Charakterystyka funkcji programu Windows Workflow Foundation

Program .NET Framework 4 dodaje wiele funkcji do programu Windows Workflow Foundation. W tym dokumencie opisano szereg nowych funkcji i przedstawiono szczegółowe informacje o scenariuszach, w których mogą być przydatne.

Działania dotyczące komunikatów

Działania obsługi komunikatów (Receive, SendReply, Send, ReceiveReply) są używane do wysyłania i odbierania komunikatów WCF z przepływu pracy. Receive i SendReply działania są używane do tworzenia operacji usługi Windows Communication Foundation (WCF), która jest uwidaczniona za pośrednictwem WSDL, podobnie jak standardowe usługi internetowe WCF. Send i ReceiveReply są używane do korzystania z usługi internetowej podobnej do programu WCF ChannelFactory; istnieje również środowisko dodawania odwołania do usługi dla programu Workflow Foundation, które generuje wstępnie skonfigurowane działania.

Wprowadzenie do działań związanych z obsługą komunikatów

  • W programie Visual Studio 2012 utwórz projekt aplikacji usługi przepływu pracy WCF. Element Receive i SendReply zostanie umieszczony na kanwie.

  • Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Dodaj odwołanie do usługi. Wskaż istniejącą usługę internetową WSDL i kliknij przycisk OK. Skompiluj projekt, aby wyświetlić wygenerowane działania (zaimplementowane przy użyciu i SendReceiveReply) w przyborniku.

  • Dokumentacja usług przepływu pracy

Przykładowy scenariusz działań obsługi komunikatów

Usługa BestPriceFinder wzywa wiele usług lotniczych, aby znaleźć najlepszą cenę biletu dla określonej trasy. Zaimplementowanie tego scenariusza wymagałoby użycia działań komunikatów w celu otrzymania żądania ceny, pobrania cen z usług zaplecza i odpowiedzi na żądanie ceny przy użyciu najlepszej ceny. Wymagałoby to również użycia innych działań wbudowanych w celu utworzenia logiki biznesowej do obliczenia najlepszej ceny.

Workflowservicehost

Jest WorkflowServiceHost to host gotowego przepływu pracy, który obsługuje wiele wystąpień, konfiguracji i komunikatów WCF (chociaż przepływy pracy nie są wymagane do korzystania z komunikatów w celu hostowania). Integruje się również z trwałością, śledzeniem i kontrolą wystąpienia za pomocą zestawu zachowań usługi. Podobnie jak w przypadku programu WCF ServiceHost, WorkflowServiceHost może być hostowany samodzielnie w konsoli/aplikacji WinForms/WPF lub usłudze systemu Windows albo hostowanej w internecie (jako plik xamlx) w usługach IIS lub WAS.

Wprowadzenie do hosta usługi przepływu pracy

Scenariusz WorkflowServiceHost

Usługa BestPriceFinder wzywa wiele usług lotniczych, aby znaleźć najlepszą cenę biletu dla określonej trasy. Zaimplementowanie tego scenariusza wymaga hostowania przepływu pracy w programie WorkflowServiceHost. Użyje również działań związanych z komunikatami, aby otrzymać żądanie ceny, pobrać ceny z usług zaplecza i odpowiedzieć na żądanie ceny przy użyciu najlepszej ceny.

Korelacja

Korelacja jest jedną z dwóch rzeczy:

  • Sposób grupowania komunikatów; oznacza to, że relacja między komunikatem żądania a jego odpowiedzią.

  • Sposób mapowania kawałka danych na wystąpienie usługi

Wprowadzenie

  • Aby rozpocząć pracę z korelacją, utwórz nowy projekt w programie Visual Studio. Utwórz zmienną typu CorrelationHandle.

  • Przykładem korelacji używanej do grupowania komunikatów razem jest korelacja request-reply, która grupuje komunikaty razem.

  • Przykładem mapowania elementu danych na wystąpienie usługi jest korelacja oparta na zawartości, która mapuje dane (na przykład identyfikator zamówienia) do określonego wystąpienia przepływu pracy.

    • W przypadku dowolnego działania obsługi komunikatów kliknij CorrelationInitializers właściwość i dodaj zmienną utworzoną QueryCorrelationInitializer powyżej przy użyciu zmiennej CorrelationHandle . Kliknij dwukrotnie żądaną właściwość w komunikacie (np. OrderID) z menu rozwijanego. CorrelatesWith Ustaw właściwość na zmienną używaną CorrelationHandle powyżej.
  • Dokumentacja koncepcyjna korelacji

Scenariusz korelacji

Przepływ pracy przetwarzania zamówień służy do obsługi tworzenia nowych zamówień i aktualizowania istniejących zamówień, które są w toku. Zaimplementowanie tego scenariusza wymaga hostowania przepływu pracy w WorkflowServiceHost programie i korzystania z działań obsługi komunikatów. Wymagałoby to również korelacji na orderId podstawie elementu , aby upewnić się, że aktualizacje są wprowadzane do prawidłowego przepływu pracy.

Uproszczona konfiguracja

Schemat konfiguracji programu WCF jest złożony i zapewnia użytkownikom wiele trudnych do znalezienia funkcji. W programie .NET Framework 4.6.1 skupiliśmy się na pomaganiu użytkownikom programu WCF w konfigurowaniu swoich usług przy użyciu następujących funkcji:

  • Usuwanie potrzeby jawnej konfiguracji poszczególnych usług. Jeśli nie skonfigurujesz żadnych <elementów usługi> dla usługi, a usługa nie definiuje programowo żadnego punktu końcowego, zestaw punktów końcowych zostanie automatycznie dodany do usługi, jeden na adres podstawowy usługi i kontrakt zaimplementowany przez usługę.

  • Umożliwia użytkownikowi zdefiniowanie wartości domyślnych dla powiązań i zachowań WCF, które zostaną zastosowane do usług bez jawnej konfiguracji.

  • Standardowe punkty końcowe definiują wstępnie skonfigurowane punkty końcowe wielokrotnego użytku, które mają stałe wartości dla co najmniej jednej właściwości punktu końcowego (adres, powiązanie i kontrakt) oraz zezwalają na definiowanie właściwości niestandardowych.

  • ConfigurationChannelFactory<TChannel> Na koniec program umożliwia centralne zarządzanie konfiguracją klienta WCF, co jest przydatne w scenariuszach, w których konfiguracja jest wybierana lub zmieniana po czasie ładowania domeny aplikacji.

Wprowadzenie

Uproszczone scenariusze konfiguracji

  • Doświadczony deweloper ASMX chce rozpocząć korzystanie z usługi WCF. Jednak WCF wydaje się zbyt skomplikowane! Jakie są wszystkie informacje potrzebne do zapisania w pliku konfiguracji? Na platformie .NET 4 można nawet zdecydować, że w ogóle nie ma pliku konfiguracji.

  • Istniejący zestaw usług WCF jest bardzo trudny do skonfigurowania i konserwacji. Plik konfiguracji zawiera tysiące wierszy kodu XML, które są niezwykle niebezpieczne do dotknięcia. Potrzebna jest pomoc w celu zmniejszenia ilości kodu do czegoś bardziej zarządzanego.

Rozpoznawanie kontraktów danych

W programie .NET Framework 3.5 wprowadzono kilka ograniczeń dotyczących projektowania znanych typów:

  • Dynamiczne dodawanie znanych typów podczas serializacji lub deserializacji nie było możliwe.

  • Serializatory nie mogą zajmować się nieznanymi informacjami o typie xsi:.

  • Nie było możliwe, aby użytkownicy określili, co xsi:type mają pojawić się na przewodzie, na przykład, aby rozmiar wystąpienia serializacji na przewodach był mniejszy.

Element DataContractResolver rozwiązuje te problemy w programie .NET Framework 4.5.

Wprowadzenie

Scenariusze rozpoznawania kontraktów danych

  • Unikanie konieczności deklarowania dziesiątków KnownTypeAttribute obiektów w usłudze.

  • Zmniejszenie rozmiaru obiektu blob XML.

Schemat blokowy

Schemat blokowy to dobrze znany paradygmat, który wizualnie reprezentuje problemy z domeną. Jest to nowy styl przepływu sterowania, który wprowadzamy w programie .NET Framework 4. Podstawową cechą schematu blokowego jest to, że w danym momencie jest wykonywane tylko jedno działanie. Schematy blokowe mogą wyrażać pętle i alternatywne wyniki, ale nie mogą natywnie wyrażać współbieżnego wykonywania wielu węzłów.

Wprowadzenie

Scenariusze schematu blokowego

Działanie schematu blokowego może służyć do implementowania gry zgadywania. Zgadywanie gry jest bardzo proste: komputer wybiera losową liczbę, a gracz musi odgadnąć tę liczbę. Gdy gracz przesyła każdy zgadywanie, komputer wyświetla im wskazówkę (tj. "spróbuj użyć mniejszej liczby"). Jeśli gracz znajdzie liczbę w mniej niż 7 próbach, otrzyma specjalną gratulację od komputera. Tę grę można zaimplementować za pomocą kombinacji następujących działań proceduralnych:

Działania proceduralne (Sekwencja, If, ForEach, Switch, Assign, DoWhile, While)

Działania proceduralne zapewniają mechanizm modelowania sekwencyjnego przepływu sterowania przy użyciu pojęć znanych programistom. Te działania umożliwiają tradycyjnie ustrukturyzowane konstrukcje języka programowania, a w razie potrzeby zapewniają równoważność języka z typowymi językami proceduralnymi, takimi jak C# i Visual Basic.

Wprowadzenie

Scenariusze działań proceduralnych

  • Parallel: intranetowy system zarządzania dokumentami ma przepływ pracy zatwierdzania dokumentów. Dokumenty muszą zostać zatwierdzone przez osoby w kilku działach, zanim będą mogły zostać opublikowane w intranecie. Nie ma ustalonego zamówienia dla zatwierdzeń; mogą wystąpić w dowolnym momencie, gdy dokument znajduje się w fazie "oczekiwanie na zatwierdzenie". Gdy użytkownik przesyła dokument do przeglądu, musi zostać zatwierdzony przez bezpośredniego menedżera, administratora intranetu i wewnętrznego menedżera komunikacji.

  • ParallelForEach<T>: Aplikacja WF zarządza zakupami firmowymi w dużej firmie. Zasady korporacyjne określają, że przed zaplanowanie jakiejkolwiek operacji zakupu wymagane są wyceny trzech różnych dostawców. Pracownik z działu zakupu wybiera trzech dostawców z listy dostawców firmy. Po wybraniu tych dostawców i powiadomieniu, firma będzie czekać na swoje propozycje gospodarcze. Propozycje mogą pojawić się w dowolnej kolejności. Aby zaimplementować ten scenariusz w programie WF, użyjemy ParallelForEach<T> elementu , który będzie iterować przez naszą kolekcję dostawców i prosić o ich propozycje ekonomiczne. Po zebraniu wszystkich ofert zostanie wybrana i wyświetlona najlepsza oferta.

InvokeMethod

Działanie InvokeMethod umożliwia wywoływanie metod publicznych w obiektach lub typach w zakresie. Obsługuje wywoływanie wystąpień i metod statycznych z parametrami lub bez parametrów (w tym tablic parametrów) i metod ogólnych. Umożliwia również wykonywanie metody synchronicznie i asynchronicznie.

Wprowadzenie

  • W programie Visual Studio 2012 utwórz aplikację konsolową przepływu pracy. InvokeMethod Dodaj działanie w projektancie przepływu pracy i skonfiguruj na nim metody statyczne i wystąpienia.

  • dokumentacja Projektant: Projektant działania InvokeMethod

Scenariusze InvokeMethod

  • Należy wywołać metodę w obiekcie w zakresie. Na przykład wartość musi zostać dodana do słownika. Wywoływana jest metoda Add wystąpienia słownika, a podano klucz i wartość.

  • Metoda musi zostać wywołana na starszym obiekcie CLR. Zamiast tworzyć niestandardowe działanie w celu zawijania wywołania do tej starszej klasy, jeśli jest ona w zakresie podczas wykonywania przepływu pracy, InvokeMethod można użyć.

Działania związane z obsługą błędów

Działanie TryCatch udostępnia mechanizm przechwytywania wyjątków występujących podczas wykonywania zestawu zawartych działań (podobnie jak konstrukcja Try/Catch w języku C# i Visual Basic). TryCatch Zapewnia obsługę wyjątków na poziomie przepływu pracy. Po wystąpieniu nieobsługiwanego wyjątku przepływ pracy zostanie przerwany, a blok Finally nie zostanie wykonany. To zachowanie jest zgodne z językiem C#.

Wprowadzenie

Scenariusze obsługi błędów

Zestaw działań należy wykonać, a w przypadku wystąpienia błędu należy wykonać konkretną logikę. Jeśli podczas tej logiki obsługi błędów okaże się, że błąd nie jest możliwy do odzyskania, wyjątek zostanie przywrócony, a działanie nadrzędne (lub host) zajmie się problemem.

Wybierz działanie

Działanie Pick zapewnia modelowanie przepływu sterowania opartego na zdarzeniach w programie WF. Pick zawiera wiele gałęzi, w których każda gałąź czeka na wystąpienie określonego zdarzenia przed uruchomieniem. W tej konfiguracji działanie Pick zachowuje się podobnie do Switch<T> tego, na którym działanie będzie wykonywać tylko jeden zestaw zdarzeń, na których nasłuchuje. Każda gałąź jest sterowana zdarzeniami i zdarzenie, które najpierw uruchamia odpowiednią gałąź. Wszystkie inne gałęzie anulują i przestają nasłuchiwać zdarzeń.

Wprowadzenie

Wybierz scenariusz

Użytkownik musi zostać poproszony o podanie danych wejściowych. W normalnych okolicznościach deweloper używa wywołania metody, takiego jak ReadLine w celu wyświetlenia monitu o wprowadzenie danych wejściowych użytkownika. Problem z tą konfiguracją polega na tym, że program czeka, aż użytkownik wprowadzi coś. W tym scenariuszu potrzebny jest limit czasu, aby odblokować działanie blokujące. Typowym scenariuszem jest taki, który wymaga wykonania zadania w danym czasie. Limit czasu działania blokującego jest scenariuszem, w którym funkcja Pick dodaje dużą wartość.

Usługa routingu WCF

Usługa routingu została zaprojektowana jako ogólny router oprogramowania, który umożliwia kontrolowanie przepływu komunikatów WCF między klientami i usługami. Usługa routingu umożliwia oddzielenie klientów od usług, co zapewnia znacznie większą swobodę w zakresie konfiguracji, które można obsługiwać, oraz elastyczność, jaką masz podczas rozważania sposobu hostowania usług. W programie .NET Framework 3.5 klienci i usługi zostały ściśle powiązane; klient musiał wiedzieć o wszystkich usługach potrzebnych do rozmowy i lokalizacji. Ponadto program WCF w programie .NET Framework 3.5 miał następujące ograniczenia:

  • Obsługa błędów była złożona, ponieważ ta logika musiała być zakodowana na komputerze klienckim.

  • Klienci i usługi zawsze musieli używać tych samych powiązań.

  • Usługi były rzadko dobrze uwzględniane: łatwiej jest komunikować się z jedną usługą, która implementuje wszystko, zamiast wybierać między wieloma usługami.

Usługa routingu na platformie .NET 4 została zaprojektowana w celu ułatwienia rozwiązywania tych problemów. Nowa usługa routingu ma następujące funkcje:

  1. Routing oparty na zawartości (MessageFilter obiekty badają komunikat, aby określić, gdzie ma zostać wysłany).

  2. Mostkowanie protokołu (transport i komunikat)

  3. Obsługa błędów (router przechwytuje wyjątki komunikacji i przejmie tryb failover do punktów końcowych kopii zapasowych)

  4. Aktualizacja dynamicznej (w pamięci) konfiguracji routingu MessageFilterTable<TFilterData> i konfiguracji routingu.

Wprowadzenie

  1. Dokumentacja: routing

  2. Przykłady: Usługi routingu [przykłady WCF]

  3. Blog: Reguły routingu!

Scenariusze routingu

Usługa routingu jest przydatna w następujących scenariuszach:

  • Klienci mogą komunikować się z wieloma usługami bez konieczności bezpośredniego rozwiązywania problemów.

  • Klienci mogą wykonywać dodatkową logikę na żądaniu klienta, aby określić, gdzie go kierować

  • Dekompiluj operacje wykonywane przez klienta w wielu implementacjach usługi bez refaktoryzacji klienta.

  • Klienci i usługi mogą mówić różne powiązania z różnymi ustawieniami zabezpieczeń.

  • Klienci mogą być bardziej niezawodni w przypadku awarii lub niedostępności usług.

Odnajdywanie w programie WCF

Odnajdywanie WCF to technologia struktury, która umożliwia włączenie mechanizmu odnajdywania do infrastruktury aplikacji. Za pomocą tej funkcji można wykrywać usługę i konfigurować klientów do wyszukiwania usług. Klienci nie muszą już być zakodowani za pomocą punktu końcowego, dzięki czemu aplikacja będzie bardziej niezawodna i odporna na błędy. Odnajdywanie to idealna platforma do tworzenia funkcji automatycznej konfiguracji w aplikacji.

Produkt jest oparty na standardzie WS-Discovery. Jest przeznaczony do współdziałania, rozszerzalnego i ogólnego. Produkt obsługuje dwa tryby działania:

  1. Zarządzane: w przypadku, gdy istnieje jednostka w sieci, z której można zapoznać się z istniejącymi usługami, klienci wysyłają do niej zapytania bezpośrednio w celu uzyskania informacji. Jest to analogiczne do usługi Active Directory.

  2. Ad hoc: gdzie klienci używają komunikatów multiemisji do lokalizowania usług.

Ponadto komunikaty odnajdywania są niezależne od protokołu sieciowego; Można ich używać na szczycie dowolnego protokołu, który obsługuje wymagania dotyczące trybu. Na przykład komunikaty multiemisji odnajdywania można wysyłać za pośrednictwem kanału UDP lub dowolnej innej sieci obsługującej komunikaty multiemisji. Te punkty projektowe, w połączeniu z elastycznością funkcji, umożliwiają dostosowanie odnajdywania specjalnie do rozwiązania.

Wprowadzenie

Scenariusze odnajdywania

Deweloper nie chce twardo kodować punktów końcowych, ponieważ jest nieznany, gdy moja usługa będzie dostępna. Zamiast tego deweloper chce wybrać usługę w czasie wykonywania. Wymagana jest większa odporność, niezawodność i automatyczna konfiguracja między składnikami w aplikacji.

Śledzenie

Śledzenie przepływu pracy zapewnia wgląd w wykonywanie wystąpienia przepływu pracy. Zdarzenia śledzenia są emitowane z przepływu pracy na poziomie wystąpienia przepływu pracy i gdy działania w przepływie pracy są wykonywane. Aby subskrybować rekordy śledzenia, należy dodać uczestnika śledzenia przepływu pracy do hosta przepływu pracy. Rekordy śledzenia są filtrowane przy użyciu profilu śledzenia. Program .NET Framework udostępnia uczestnika śledzenia ETW (śledzenie zdarzeń dla systemu Windows), a podstawowy profil jest instalowany w pliku machine.config.

Wprowadzenie

  1. W programie Visual Studio 2010 utwórz projekt aplikacji usługi przepływu pracy WCF. Element Receive i SendReply zostanie umieszczony na kanwie, aby rozpocząć.

  2. Otwórz plik web.config i dodaj zachowanie śledzenia FUNKCJI ETW bez profilu.

    1. Używany jest profil domyślny.

    2. Otwórz podgląd zdarzeń i włącz kanał analityczny w następującym węźle: Podgląd zdarzeń, dzienniki aplikacji i usług, Microsoft, Windows, Application Server-Applications. Kliknij prawym przyciskiem myszy pozycję Analityczne i wybierz pozycję Włącz dziennik.

    3. Uruchom usługę przepływu pracy.

    4. Obserwuj zdarzenia śledzenia przepływu pracy w podglądzie zdarzeń.

  3. Przykłady: Śledzenie

  4. Dokumentacja koncepcyjna: Śledzenie i śledzenie przepływu pracy

Magazyn wystąpień przepływu pracy SQL

Jest SqlWorkflowInstanceStore to implementacja oparta na programie SQL Server magazynu wystąpień. Magazyn wystąpień przechowuje stan uruchomionego wystąpienia wraz ze wszystkimi danymi niezbędnymi do załadowania i wznowienia tego wystąpienia. Host usługi instruuje magazyn wystąpień, aby zapisać stan wystąpienia, jeśli przepływ pracy będzie się powtarzać, i nakazuje magazynowi wystąpień załadowanie stanu wystąpienia po nadejściu komunikatu dla tego wystąpienia lub wygasa działanie opóźnienia.

Wprowadzenie

  1. W programie Visual Studio 2012 utwórz przepływ pracy zawierający niejawne lub jawne Persist działanie. SqlWorkflowInstanceStore Dodaj zachowanie do hosta usługi przepływu pracy. Można to zrobić w kodzie lub w pliku konfiguracji aplikacji.

  2. Przykłady: trwałość

  3. Dokumentacja koncepcyjna: magazyn wystąpień przepływu pracy SQL.