Erweiterbarkeit des WorkflowdiensthostsWorkflow Service Host Extensibility

.NET Framework 4.6.1.NET Framework 4.6.1 stellt die WorkflowServiceHost-Klasse zum Hosten von Workflowdiensten bereit. provides the WorkflowServiceHost class for hosting workflow services. Diese Klasse wird verwendet, wenn Sie einen Workflowdienst in einer verwalteten Anwendung oder einem Windows-Dienst selbst hosten.This class is used when you are self-hosting a workflow service in a managed application or a Windows service. Diese Klasse wird auch verwendet, wenn Sie einen Workflow unter Internetinformationsdienste (IIS) oder dem Windows-Prozessaktivierungsdienst (WAS) hosten.This class is also used when hosting a workflow service with Internet Information Services (IIS) or Windows Process Activation Service (WAS). Die WorkflowServiceHost-Klasse stellt Erweiterungspunkte bereit, mit denen Sie benutzerdefinierte Erweiterungen hinzufügen, das Leerlaufverhalten ändern und andere Workflows als Dienstworkflows (die keine Messagingaktivitäten nutzen) hosten können.The WorkflowServiceHost class provides extension points that allow you to add custom extensions, change the idle behavior, and host non-service workflows (workflows that do not use messaging activities).

Erweiterungen des WorkflowdiensthostsWorkflow Service Host Extensions

WorkflowServiceHost enthält eine WorkflowExtensions-Eigenschaft vom Typ WorkflowInstanceExtensionManager, der Methoden zum Hinzufügen von Erweiterungen zu WorkflowServiceHost bereitstellt.The WorkflowServiceHost contains a WorkflowExtensions property of type WorkflowInstanceExtensionManager that provides methods to add extensions to the WorkflowServiceHost. Verwenden Sie die Add-Methode zum Hinzufügen einer Erweiterung für jede Workflowdienstinstanz.Use the Add method to add an extension for each workflow service instance. Der angegebene Delegat wird aufgerufen, um eine neue Erweiterung zu erstellen, wenn eine Workflowdienstinstanz erstellt oder aus einem Persistenzspeicher geladen wird.The delegate specified is called to create a new extension when a workflow service instance is created or loaded from a persistence store. Verwenden Sie die Add-Methode, um eine Erweiterung für jeden Workflowdiensthost hinzuzufügen. Eine Instanz der Erweiterung wird für alle Workflowdienstinstanzen genutzt.Use the Add method to add an extension for each workflow service host, one instance of the extension is shared for all workflow service instances.

Reagieren auf unbehandelte AusnahmenReact to Unhandled Exceptions

Das Verhalten WorkflowUnhandledExceptionBehavior ermöglicht das Angeben der Aktion, die ausgeführt werden soll, wenn innerhalb eines Workflowdiensts eine nicht behandelte Ausnahme auftritt.The WorkflowUnhandledExceptionBehavior enables you to specify the action to take if an unhandled exception occurs within a workflow service. Die Action-Eigenschaft gibt einen der WorkflowUnhandledExceptionAction-Werte an.The Action property specifies one of the WorkflowUnhandledExceptionAction values:

  • Abandon – Bricht die Workflowdienstinstanz ab.Abandon – Aborts the workflow service instance.

  • AbandonAndSuspend – Führt einen Rollback zum letzten beibehaltenen Zustand aus, und unterbricht die Ausführung der Workflowdienstinstanz.AbandonAndSuspend – Rolls back to the last persisted state and suspends the workflow service instance. Dies ist nur der Fall, wenn der Workflow bereits mindestens einmal beibehalten wurde.This only occurs if the workflow has already been persisted at least once. Falls nicht, wird die Workflowinstanz abgebrochen.If not the workflow instance is aborted.

  • Cancel – Bricht die Instanz ab.Cancel – Cancels the instance.

  • Terminate – Beendet die Instanz.Terminate – Terminates the instance.

Dieses Verhalten kann im Code konfiguriert werden, wie im folgenden Beispiel gezeigt.This behavior can be configured in code as shown in the following example.

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

Es kann jedoch auch in einer Konfigurationsdatei konfiguriert werden, wie im folgenden Beispiel gezeigt.It can also be configured in a configuration file as shown in the following example.

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

Hosten von anderen Workflows als DienstworkflowsHosting Non-Service Workflows

Mithilfe von WorkflowServiceHost können andere Workflows als Dienstworkflows gehostet werden. Außerdem können Workflows gehostet werden, die entweder nicht mit einer Receive-Aktivität beginnen oder die keine Messagingaktivitäten verwenden.WorkflowServiceHost can be used to host non-service workflows, or workflows that either do not begin with a Receive activity or workflows that do not use the messaging activities. Workflowdienste beginnen normalerweise mit einer Receive-Aktivität.Workflow services normally begin with a Receive activity. Wenn der WorkflowServiceHost eine Nachricht für einen Workflowdienst empfängt, wird eine neue Workflowdienstinstanz erstellt, falls diese nicht bereits ausgeführt wird (oder beibehalten wurde).When the WorkflowServiceHost receives a message for a workflow service, if it is not already running (or persisted) a new workflow service instance is created. Falls ein Workflow nicht mit einer Empfangsaktivität beginnt, kann er nicht mit dem Senden einer Nachricht gestartet werden, da keine Aktivität zum Empfangen der Nachricht vorhanden ist.If a workflow does not begin with a Receive activity, it cannot be started by sending a message because there is no activity to receive the message. Um einen anderen Workflow als einen Dienstworkflow zu hosten, leiten Sie eine Klasse von WorkflowHostingEndpoint ab und überschreiben OnGetInstanceId, OnGetCreationContext und OnResolveBookmark.To host a non-service workflow, derive a class from WorkflowHostingEndpoint and override OnGetInstanceId, OnGetCreationContext, and OnResolveBookmark. Überschreiben Sie OnGetInstanceId, wenn Sie eine bevorzugte Instanz-ID bereitstellen möchten.Override OnGetInstanceId if you want to provide a preferred instance ID. Überschreiben Sie OnGetCreationContext, um einen benutzerdefinierten Workflowerstellungskontext zu erstellen oder eine Instanz des vorhandenen WorkflowCreationContext-Objekts aufzufüllen.Override OnGetCreationContext to create a custom workflow creation context or populate an instance of the existing WorkflowCreationContext. Überschreiben Sie OnResolveBookmark, um das Lesezeichen manuell aus der eingehenden Nachricht zu extrahieren.Override OnResolveBookmark to manually extract the bookmark from the incoming message. Wenn Sie diese Methode überschreiben, müssen Sie in ihrem Text SendResponse aufrufen, um auf die an den WorkflowHostingEndpoint gesendete Nachricht zu antworten.If you override this method, you must invoke SendResponse in its body so as to respond to the message sent to the WorkflowHostingEndpoint. Andernfalls wird möglicherweise der MaxConcurrentCalls-Grenzwert schließlich überschritten.If you do not do so, a MaxConcurrentCalls limit may be eventually exceeded. In bidirektionalen Verträgen können Sie eventuell feststellen, dass der Aufruf von SendResponse fehlschlägt, weil der Client keine Antwort empfangen kann.In two-way contracts, you may be able to detect your failure to invoke SendResponse because of the client’s failure to receive a response. Bei unidirektionalen Verträgen erkennen Sie eventuell erst, wenn es zu spät ist, d. h. nachdem die SendResponse-Drosselungsgrenze überschritten wurde, dass MaxConcurrentCalls nicht aufgerufen werden kann.In one-way contracts, you may not recognize the mistake of failing to call SendResponse until it’s too late, after the MaxConcurrentCalls throttle limit is exceeded. Weitere Informationen finden Sie unter der WorkflowHostingEndpoint-Lesezeichen-Wiederaufnahmeum eine neue Instanz eines nicht-Workflows zu erstellen, deklarieren Sie einen Dienstvertrag, der einen Vorgang definiert, die eine neue Instanz erstellt.For more information, please see the WorkflowHostingEndpoint Resume BookmarkTo create a new instance of a non-service workflow, declare a service contract that defines an operation that creates a new instance. Der Erstellungsvorgang sollte ein IDictionary dauern<string, object > passieren Workflowparameter erforderlich.The creation operation should take an IDictionary<string, object> to pass any required workflow parameters. Dieser Vertrag wird implizit von der Klasse implementiert, die von WorkflowHostingEndpoint abgeleitet wurde.This contract is implicitly implemented by the WorkflowHostingEndpoint-derived class. Beim Hosten des Workflows fügen Sie eine Instanz des der WorkflowHostingEndpoint-abgeleitete Klasse mit dem Host durch Aufrufen von AddServiceEndpoint , und rufen Sie System.ServiceModel.Activities.WorkflowServiceHost.Open.When hosting the workflow, add an instance of the WorkflowHostingEndpoint-derived class to the host by calling AddServiceEndpoint and call System.ServiceModel.Activities.WorkflowServiceHost.Open. Um eine Instanz des Workflows zu erstellen, erstellen Sie für Ihren Dienstvertrag ein ChannelFactory<TChannel>-Objekt, und rufen Sie anschließend CreateChannel auf.To create an instance of the workflow, create a ChannelFactory<TChannel> of your service contract type and call CreateChannel. Sie können dann den im Dienstvertrag definierten Erstellungsvorgang aufrufen.You can then call the create operation defined in your service contract.

Siehe auchSee Also

WorkflowdiensteWorkflow Services
MessagingaktivitätenMessaging Activities