工作流程服務主機擴充性
本主題僅適用於 Windows Workflow Foundation 4。
.NET Framework 版本 4 提供用於裝載工作流程服務的 WorkflowServiceHost 類別。若您要在 Managed 應用程式或 Windows 服務中自我裝載工作流程服務,則可使用此類別。此類別還可在透過網際網路資訊服務 (IIS) 或 Windows Process Activation Service (WAS) 裝載工作流程時使用。WorkflowServiceHost 類別會提供擴充點,讓您加入自訂擴充、變更閒置行為,以及裝載非服務工作流程 (不使用訊息傳遞活動的工作流程)。如需變更閒置行為的範例,請參閱 How To: Control Idle Behavior Through Extensibility。
工作流程服務主機延伸模組
WorkflowServiceHost 包含 WorkflowInstanceExtensionManager 類型的 WorkflowExtensions 屬性,可提供將延伸模組加入至 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>
裝載非服務工作流程
WorkflowServiceHost 可以用來裝載非服務工作流程,或者不是以 Receive 活動開始的工作流程,或不使用訊息傳遞活動的工作流程。工作流程服務通常會以 Receive 活動開始。當 WorkflowServiceHost 接收工作流程服務的訊息時,如果尚未執行 (或已保存),則會建立新的工作流程服務執行個體。如果工作流程不是以接收活動開始,則無法藉由傳送訊息的方式啟動,因為沒有接收訊息的活動。若要裝載非服務工作流程,請從 WorkflowHostingEndpoint 衍生類別,並且覆寫 OnGetInstanceId、OnGetCreationContext 和 OnResolveBookmark。如果您要提供慣用的執行個體 ID,請覆寫 OnGetInstanceId。覆寫 OnGetCreationContext,即可建立自訂的工作流程建立內容,或是填入現有 WorkflowCreationContext 的執行個體。覆寫 OnResolveBookmark,即可從傳入訊息手動擷取書籤。若要建立非服務工作流程的新執行個體,請宣告服務合約,以定義建立新執行個體的作業。建立作業應採用 IDictionary<string, object> 傳遞任何必要的工作流程參數。此合約會由 WorkflowHostingEndpoint 衍生的類別以隱含方式實作。裝載工作流程時,可呼叫 AddServiceEndpoint,將 WorkflowHostingEndpoint 衍生類別的執行個體加入至主機,並且呼叫 Open。若要建立工作流程的執行個體,請建立服務合約型別的 ChannelFactory,並且呼叫 CreateChannel。接著,您可以呼叫服務合約中定義的建立作業。