Windows Workflow Foundation - Korelacja parametrów

Czasami tworząc diagram jest potrzeba uzyskania pewnych informacji lub wykonanie pewnych akcji równolegle wykorzystują np kontrolkę Parallel.



Jak widzimy w tym przypadku chce wykorzystać tę samą funkcjonalność aby uzyskać zgodę na daną płatność od dwóch menedżerów. W obu "gałęziach" diagram jest identyczny. Najpierw uruchamiam metodę ConfirmPayment interfejsu IManagerConfirmService aby uzyskać zgodę a następnie czekam na reakcje ze strony menadżera określone poprzez wywołanie jednego z dwóch zdarzeń.Te dwa diagramy są wykonywane jednocześnie. Więc jeśli w odpowiedzi zostanie uruchomione zdarzenie do którego diagramu zostanie przypisane, jeśli oba czekają na te same zdarzenia ?.
Twórcy WF pomyśleli też o tym. Najpierw musimy ustalić nazwę parametru który będzie służył do rozpoznawania kontekstu. Ustala się go na interfejsie w poprzez użycia atrybutu CorrelationParameter:

[ExternalDataExchange]
[CorrelationParameter("alias")]
internal interface IManagerConfirmService
{
[CorrelationAlias("alias", "e.Alias")]
event EventHandler Approve;

[CorrelationAlias("alias", "e.Alias")]
event EventHandler Reject;

[CorrelationInitializer]
void ConfirmPayment(string alias);
}

Na każdym zdarzeniu który ma być obsługiwany w kontekście należy zastosować atrybut CorrelationAlias. Jest stosowany aby poinformować WF jaka właściwość klasy przekazywanej w obsłudze zdarzenia przechowuje informacje o wspólnym parametrze. Na koniec musimy przyozdobić jedną metodę lub zdarzenie atrybutem CorrelationInitializer umożliwiają utworzenie kontekstu. Pierwsze uruchomienie tak oznaczonej metody lub zdarzenia, uruchomi w WF utworzenie kontekstu w którym kluczem będzie wartość tego parametru określonego poprzez ten atrybut CorrelationParameter. W tym momencie trzeba przygotować jeszcze kontrolki na diagramie poprzez ustawienie na wszystkich kontrolkach atrybutu CorrelationToken na wspólną wartość. Po ustawieniu tej wartości uaktywni się nam dodatkowe pole OwnerActivityName gdzie trzeba wybrać kontrolkę która zawiera w sobie diagram realizowany w wspólnym kontekście. Używają np zdarzenia z powyższego interfejsu, jego właściwość e.Alias zostanie przekazane do parametru alias przez co zostanie rozpoznany odpowiedni kontekst i zostanie obsłużony odpowiednia część diagramu.

Przykład który to wykorzystuje jest dostępny tutaj CommunicationsWorkflow.zip

SFX-SQLi i zrzut bazy danych do w postaci Xml

Jak wiadomo w MS SQL 2005/2008 można w zapytaniu wykorzystać klauzurę FOR XML.
Na tej stronie przedstawiono metodę na wydobycie całej bazy danych w postaci jednego ciągu znaków. Autor rozwija też program który pozwala na praktyczne przetestowanie podatności własnych systemów na tego typu technikę ataku ( bo można ten atak zaliczyć do SQL injection)
http://www.kachakil.com/papers/sfx-sqli-en.htm