Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program .NET Framework 4.6.1 udostępnia klasę WorkflowServiceHost do hostowania usług przepływu pracy. Ta klasa jest używana podczas samodzielnego hostowania usługi przepływu pracy w aplikacji zarządzanej lub usłudze systemu Windows. Ta klasa jest również używana podczas hostowania usługi przepływu pracy z usługami Internet Information Services (IIS) lub Usługą aktywacji procesów systemu Windows (WAS). Klasa WorkflowServiceHost udostępnia punkty rozszerzenia, które umożliwiają dodawanie niestandardowych rozszerzeń, zmienianie zachowania bezczynności i hostowanie przepływów pracy innych niż usługi (przepływy pracy, które nie korzystają z działań obsługi komunikatów).
Rozszerzenia hosta usługi przepływu pracy
Zawiera WorkflowServiceHost właściwość WorkflowExtensions typu WorkflowInstanceExtensionManager, która udostępnia metody dodawania rozszerzeń do WorkflowServiceHost. Użyj metody Add, aby dodać rozszerzenie dla każdego wystąpienia usługi przepływu pracy. Określony delegat jest wywoływany w celu utworzenia nowego rozszerzenia podczas tworzenia lub ładowania wystąpienia usługi przepływu pracy z magazynu trwałości. Użyj metody Add, aby dodać rozszerzenie dla każdego hosta usługi przepływu pracy. Jedno wystąpienie rozszerzenia jest współdzielone przez wszystkie wystąpienia tej usługi.
Reagowanie na nieobsługiwane wyjątki
Element WorkflowUnhandledExceptionBehavior umożliwia określenie akcji do wykonania, jeśli w usłudze przepływu pracy wystąpi nieobsługiwany wyjątek. Właściwość Action określa jedną z WorkflowUnhandledExceptionAction wartości:
Abandon — przerywa wystąpienie usługi przepływu pracy.
AbandonAndSuspend — cofa się do ostatniego stanu utrwalonego i zawiesza wystąpienie usługi zarządzania przepływem pracy. Dzieje się tak tylko wtedy, gdy przepływ pracy został już utrwalony co najmniej raz. Jeśli nie, wystąpienie przepływu pracy zostanie przerwane.
Cancel — Anuluje wystąpienie.
Terminate — zakończa instancję.
To zachowanie można skonfigurować w kodzie, jak pokazano w poniższym przykładzie.
host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });
Można go również skonfigurować w pliku konfiguracji, jak pokazano w poniższym przykładzie.
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<workflowUnhandledExceptionBehavior action="Abandon" />
</behavior>
</serviceBehaviors>
</behaviors>
Hostowanie przepływów pracy innych niż usługi
WorkflowServiceHost może być używany do hostowania przepływów pracy, które nie są oparte na usługach, lub przepływów pracy, które nie zaczynają się od działania Receive lub nie używają działań związanych z komunikatami. Usługi przepływu pracy zwykle zaczynają się od Receive aktywności. Po odebraniu WorkflowServiceHost komunikatu do usługi przepływu pracy, jeśli usługa nie jest już uruchomiona (lub utrwalona), zostanie utworzone nowe wystąpienie usługi przepływu pracy. Jeśli przepływ pracy nie rozpoczyna się od działania Odbieranie, nie można go uruchomić, wysyłając komunikat, ponieważ nie ma żadnych działań do odbierania komunikatu. Aby hostować przepływ pracy spoza usługi, należy utworzyć klasę na podstawie WorkflowHostingEndpoint i zastąpić OnGetInstanceId, OnGetCreationContext, i OnResolveBookmark. Zastąp OnGetInstanceId, jeśli chcesz podać preferowany identyfikator wystąpienia. Nadpisz OnGetCreationContext, aby utworzyć niestandardowy kontekst tworzenia przepływu pracy lub zainicjować wystąpienie istniejącego WorkflowCreationContext. Zastąpij OnResolveBookmark , aby ręcznie wyodrębnić zakładkę z wiadomości przychodzącej. Jeśli zastąpisz tę metodę, musisz wywołać SendResponse w jej treści, aby móc odpowiedzieć na komunikat wysłany do elementu WorkflowHostingEndpoint. Jeśli tego nie zrobisz, MaxConcurrentCalls limit może zostać ostatecznie przekroczony. W kontraktach dwukierunkowych może być możliwe wykrycie niepowodzenia wywołania SendResponse z powodu braku odpowiedzi klienta. W przypadku umów jednokierunkowych po przekroczeniu limitu SendResponse możesz nie zauważyć błędu polegającego na niewywołaniu MaxConcurrentCalls aż do momentu, gdy będzie za późno. Aby utworzyć nowe wystąpienie przepływu pracy spoza usługi, zadeklaruj kontrakt usługi, który definiuje operację, która tworzy nowe wystąpienie. Operacja tworzenia powinna przyjmować ciąg IDictionary<, obiekt> , aby przekazać wszystkie wymagane parametry przepływu pracy. Ten kontrakt jest niejawnie implementowany przez klasę pochodną WorkflowHostingEndpoint. Podczas hostowania przepływu pracy dodaj instancję klasy pochodnej WorkflowHostingEndpoint do hosta poprzez wywołanie metody AddServiceEndpoint oraz metody Open. Aby utworzyć wystąpienie przepływu pracy, utwórz typ kontraktu usługi i wywołaj metodę ChannelFactory<TChannel>CreateChannel. Następnie można wywołać operację tworzenia zdefiniowaną w kontrakcie usługi.