Sdílet prostřednictvím


Rozšíření hostitele služby pracovního postupu

.NET Framework 4.6.1 poskytuje WorkflowServiceHost třídu pro hostování služeb pracovních postupů. Tato třída se používá, když sami hostujete službu pracovního postupu ve spravované aplikaci nebo službě systému Windows. Tato třída se také používá při hostování služby pracovního postupu se službou Internetová informační služba (IIS) nebo službou aktivace procesu systému Windows (WAS). Třída WorkflowServiceHost poskytuje rozšiřující body, které umožňují přidávat vlastní rozšíření, měnit chování nečinnosti a hostovat pracovní postupy mimo službu (pracovní postupy, které nepoužívají aktivity zasílání zpráv).

Rozšíření hostitele služby pracovního postupu

Obsahuje WorkflowServiceHostWorkflowExtensions vlastnost typu WorkflowInstanceExtensionManager , která poskytuje metody pro přidání rozšíření do WorkflowServiceHost. Tuto metodu Add použijte k přidání rozšíření pro každou instanci služby pracovního postupu. Zadaný delegát je volána k vytvoření nového rozšíření při vytvoření nebo načtení instance služby pracovního postupu z úložiště trvalosti. Tuto metodu Add použijte k přidání rozšíření pro každého hostitele služby pracovního postupu, jedna instance rozšíření je sdílena pro všechny instance služby pracovního postupu.

Reakce na neošetřené výjimky

Umožňuje WorkflowUnhandledExceptionBehavior určit akci, která se má provést, pokud dojde k neošetřené výjimce v rámci služby pracovního postupu. Vlastnost Action určuje jednu z WorkflowUnhandledExceptionAction hodnot:

  • Abandon – Přeruší instanci služby pracovního postupu.

  • AbandonAndSuspend – Vrátí zpět poslední trvalý stav a pozastaví instanci služby pracovního postupu. K tomu dochází pouze v případě, že pracovní postup již byl alespoň jednou zachován. Pokud není instance pracovního postupu přerušena.

  • Cancel – Zruší instanci.

  • Terminate – Ukončí instanci.

Toto chování lze nakonfigurovat v kódu, jak je znázorněno v následujícím příkladu.

host.Description.Behaviors.Add(new WorkflowUnhandledExceptionBehavior { Action = WorkflowUnhandledExceptionAction.Abandon });

Dá se také nakonfigurovat v konfiguračním souboru, jak je znázorněno v následujícím příkladu.

<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
          <workflowUnhandledExceptionBehavior action="Abandon" />
        </behavior>
      </serviceBehaviors>
</behaviors>

Hostování pracovních postupů mimo službu

WorkflowServiceHost lze použít k hostování neslužných pracovních postupů nebo pracovních postupů, které nezačínají aktivitou Receive nebo pracovními postupy, které nepoužívají aktivity zasílání zpráv. Služby pracovních postupů obvykle začínají aktivitou Receive . WorkflowServiceHost Když obdrží zprávu pro službu pracovního postupu, pokud ještě není spuštěná (nebo trvalá), vytvoří se nová instance služby pracovního postupu. Pokud pracovní postup nezačíná aktivitou příjmu, nelze ji spustit odesláním zprávy, protože zprávu nelze přijmout žádnou aktivitou. Chcete-li hostovat pracovní postup mimo službu, odvodit třídu z WorkflowHostingEndpoint a přepsat OnGetInstanceId, OnGetCreationContexta OnResolveBookmark. Pokud chcete zadat ID upřednostňované instance, přepište OnGetInstanceId ho. Přepsání OnGetCreationContext pro vytvoření vlastního kontextu vytvoření pracovního postupu nebo naplnění instance existujícího WorkflowCreationContext. Přepište OnResolveBookmark ruční extrahování záložky z příchozí zprávy. Pokud tuto metodu přepíšete, musíte vyvolat SendResponse v jeho textu, aby reagovala na zprávu poslanou do WorkflowHostingEndpoint. Pokud to neuděláte, může dojít k překročení limitu MaxConcurrentCalls . V obousměrných kontraktech možná budete moct zjistit, že se nepodařilo vyvolat, SendResponse protože se klientovi nepodařilo přijmout odpověď. V jednosměrných kontraktech možná nerozpoznáte chybu, že selhává, SendResponse dokud není příliš pozdě, po překročení limitu MaxConcurrentCalls omezení. Chcete-li vytvořit novou instanci pracovního postupu mimo službu, deklarujte kontrakt služby, který definuje operaci, která vytvoří novou instanci. Operace vytvoření by měla mít řetězec IDictionary<, objekt> pro předání požadovaných parametrů pracovního postupu. Tento kontrakt je implicitně implementována WorkflowHostingEndpoint-odvozenou třídou. Při hostování pracovního postupu přidejte instanci WorkflowHostingEndpoint-odvozené třídy do hostitele voláním AddServiceEndpoint a voláním Open. Chcete-li vytvořit instanci pracovního postupu, vytvořte ChannelFactory<TChannel> typ kontraktu služby a volání CreateChannel. Pak můžete volat operaci vytvoření definovanou ve smlouvě o poskytování služeb.

Viz také