共用方式為


工作流程服務主機擴充性

.NET Framework 4.6.1 提供裝載 WorkflowServiceHost 工作流程服務的類別。 當您在受控應用程式或 Windows 服務中自我裝載工作流程服務時,會使用此類別。 使用 Internet Information Services (IIS) 或 Windows Process Activation Service (WAS) 裝載工作流程服務時,也會使用這個類別。 類別 WorkflowServiceHost 提供擴充點,可讓您新增自定義延伸模組、變更閑置行為,以及裝載非服務工作流程(不使用傳訊活動的工作流程)。

工作流程服務主機延伸套件

WorkflowServiceHost包含WorkflowExtensions屬性,該屬性屬於WorkflowInstanceExtensionManager類型,提供將擴充功能新增至WorkflowServiceHost的方法。 Add使用 方法,為每個工作流程服務實例新增擴充功能。 當建立或從持續性存放區載入工作流程服務實例時,會呼叫指定的委派來建立新的延伸模組。 Add使用 方法,為每個工作流程服務主機新增擴充功能,所有工作流程服務實例都會共用一個延伸模塊實例。

回應未處理的例外狀況

WorkflowUnhandledExceptionBehavior可讓您指定在工作流程服務內發生未處理的例外狀況時要採取的動作。 屬性 Action 會指定其中 WorkflowUnhandledExceptionAction 一個值:

  • Abandon – 中止工作流程服務實例。

  • AbandonAndSuspend – 回復至最後一個保存狀態,並暫停工作流程服務實例。 只有當工作流程已保存至少一次時,才會發生此情況。 如果不是,則工作流程實例將被中止。

  • Cancel – 取消 實例。

  • Terminate – 終止 實例。

此行為可以在程式代碼中設定,如下列範例所示。

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

它也可以在組態檔中設定,如下列範例所示。

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

托管非服務工作流程

WorkflowServiceHost 可用來裝載非服務工作流程,或是那些不以 Receive 活動開頭或不使用傳訊活動的工作流程。 工作流程服務通常會從 Receive 活動開始。 WorkflowServiceHost當 收到工作流程服務的訊息時,如果它尚未執行(或保存),就會建立新的工作流程服務實例。 如果工作流程不是以 Receive 活動開頭,則無法透過傳送訊息來啟動,因為沒有接收訊息的活動。 若要載入非服務工作流程,請從 WorkflowHostingEndpoint 衍生類別,並覆寫 OnGetInstanceIdOnGetCreationContextOnResolveBookmark。 如果您要提供慣用的實體識別碼,請覆蓋 OnGetInstanceId 。 覆寫 OnGetCreationContext 以建立自定義工作流程建立上下文,或填入現有的 WorkflowCreationContext 實例。 覆寫 OnResolveBookmark 以手動從傳入訊息擷取書籤。 如果您覆寫此方法,則必須在其方法中呼叫 SendResponse,以回應傳送至 WorkflowHostingEndpoint 的訊息。 如果您未這麼做, MaxConcurrentCalls 最終可能會超過限制。 在雙向合約中,由於客戶端未收到回應,您可能會偵測到自己未能成功叫用 SendResponse 。 在單向合約中,直到超過SendResponse節流限制,您可能會太遲才注意到未呼叫MaxConcurrentCalls的錯誤。 若要建立非服務工作流程的新實例,請宣告定義建立新實例之作業的服務合約。 建立作業應該採用 IDictionary<字串,對象> 來傳遞任何必要的工作流程參數。 此合約是由WorkflowHostingEndpoint衍生類別隱式實作的。 當裝載工作流程時,透過呼叫WorkflowHostingEndpointAddServiceEndpoint衍生類別的實例新增至主機,然後呼叫Open。 若要建立工作流程的實體,請建立您的服務合約類型的 ChannelFactory<TChannel>,並呼叫 CreateChannel。 然後,您可以呼叫服務合約中定義的建立作業。

另請參閱