共用方式為


工作流程服務主機擴充性

.NET Framework 4.6.1 提供用於裝載工作流程服務的 WorkflowServiceHost 類別。 若您要在 Managed 應用程式或 Windows 服務中自我裝載工作流程服務,則可使用此類別。 此類別還可在透過網際網路資訊服務 (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 接收工作流程服務的訊息時,如果尚未執行 (或已保存),則會建立新的工作流程服務執行個體。 如果工作流程不是以接收活動開始,則無法藉由傳送訊息的方式啟動,因為沒有接收訊息的活動。 若要裝載非服務工作流程,請從 WorkflowHostingEndpoint 衍生類別,並且覆寫 OnGetInstanceIdOnGetCreationContextOnResolveBookmark。 如果您要提供慣用的執行個體 ID,請覆寫 OnGetInstanceId。 覆寫 OnGetCreationContext,即可建立自訂的工作流程建立內容,或是填入現有 WorkflowCreationContext 的執行個體。 覆寫 OnResolveBookmark,即可從傳入訊息手動擷取書籤。 如果您覆寫此方法,就必須在其主體中叫用 SendResponse,以便回應傳送至 WorkflowHostingEndpoint 的訊息。 如果您沒有這樣做,最後可能會超過 MaxConcurrentCalls 限制。 在雙向合約中,您可以偵測由於用戶端無法接收回應所導致的 SendResponse 叫用失敗。 在單向合約中,您可能要等到超過 SendResponse 節流閥限制之後,才能辨識無法呼叫 MaxConcurrentCalls 的錯誤,但是卻為時已晚。 若要建立非服務工作流程的新執行個體,請宣告服務合約,以定義建立新執行個體的作業。 建立作業應採用 IDictionary<string, object> 傳遞任何必要的工作流程參數。 此合約會由 WorkflowHostingEndpoint 衍生的類別以隱含方式實作。 裝載工作流程時,可呼叫 WorkflowHostingEndpoint,將 AddServiceEndpoint 衍生類別的執行個體加入至主機,並且呼叫 Open。 若要建立工作流程的執行個體,請建立服務合約型別的 ChannelFactory<TChannel>,並且呼叫 CreateChannel。 接著,您可以呼叫服務合約中定義的建立作業。

另請參閱