Udostępnij za pośrednictwem


Rozszerzalność hosta usługi przepływu pracy

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ść typuWorkflowInstanceExtensionManager, która udostępnia metody dodawania rozszerzeń do klasy WorkflowServiceHost.WorkflowExtensions Add Użyj metody , 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. Add Użyj metody , aby dodać rozszerzenie dla każdego hosta usługi przepływu pracy. Jedno wystąpienie rozszerzenia jest współużytkowane dla wszystkich wystąpień usługi przepływu pracy.

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 przepływu pracy. Dzieje się tak tylko wtedy, gdy przepływ pracy został już utrwalone co najmniej raz. Jeśli wystąpienie przepływu pracy nie zostanie przerwane.

  • Cancel — Anuluje wystąpienie.

  • Terminate — kończy wystąpienie.

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 służyć do hostowania przepływów pracy spoza usługi lub przepływów pracy, które nie zaczynają się od działania lub przepływów pracy, które nie korzystają z Receive działań obsługi komunikatów. Usługi przepływu pracy zwykle zaczynają się od Receive działania. Po odebraniu WorkflowServiceHost komunikatu dla usługi przepływu pracy, jeśli nie jest jeszcze uruchomiony (lub utrwalone) 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ę z WorkflowHostingEndpoint klasy i zastąpić OnGetInstanceId, OnGetCreationContexti OnResolveBookmark. Zastąpij OnGetInstanceId , jeśli chcesz podać preferowany identyfikator wystąpienia. Zastąpij OnGetCreationContext , aby utworzyć niestandardowy kontekst tworzenia przepływu pracy lub wypełnić wystąpienie istniejącego WorkflowCreationContextelementu . 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 metodę w jej treści, aby 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 kontraktów jednokierunkowych możesz nie rozpoznać błędu niepowodzenia wywołania SendResponse , dopóki nie będzie za późno, po przekroczeniu limitu MaxConcurrentCalls ograniczenia. 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 wystąpienie klasy -pochodnej WorkflowHostingEndpointdo hosta, wywołując AddServiceEndpoint metodę i wywołując metodę 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.

Zobacz też