共用方式為


工作流程服務主機內部

WorkflowServiceHost 提供工作流程服務的主機。 它負責接聽傳入訊息,將訊息路由至適當的工作流程服務實例,並控制卸載和保存閑置的工作流程等功能。 本主題描述 WorkflowServiceHost 如何處理傳入訊息。

WorkflowServiceHost 概觀

類別 WorkflowServiceHost 是用來裝載工作流程服務。 它會接聽傳入的訊息,並視需要將它們路由傳送至適當的服務實例、建立新的實例或從長期記憶體載入現有的實例。 下圖高階說明 WorkflowServiceHost 的運作方式:

顯示工作流程服務主機概觀的圖表。

下圖顯示 WorkflowServiceHost 從 .xamlx 檔案載入工作流程服務定義,並從組態檔載入組態資訊。 它也會從追蹤配置檔載入追蹤組態。 WorkflowServiceHost 會公開工作流程控制端點,可讓您將控制作業傳送至工作流程實例。 如需詳細資訊,請參閱 工作流程控制端點範例

WorkflowServiceHost 也會公開接聽傳入應用程式訊息的應用程式端點。 當傳入訊息送達時,它會傳送至適當的工作流服務實例(如果它目前已載入)。 如有需要,就會建立新的工作流程實例。 或者,如果現有的實例已保存,則會從持久性存儲庫載入它。

WorkflowServiceHost 詳細數據

下圖顯示如何處理 WorkflowServiceHost 訊息的詳細資料:

顯示工作流程服務主機訊息流程的圖表。

此圖顯示三個不同的端點、應用程式端點、工作流程控制端點,以及工作流程裝載端點。 應用程式端點會接收系結至特定工作流程實例的訊息。 工作流程控制端口會監聽控制操作。 工作流程裝載端點會接聽導致 WorkflowServiceHost 載入和執行非服務工作流程的訊息。 如下圖所示,所有訊息都會透過WCF運行時間進行處理。 工作流程服務實例節流是使用 MaxConcurrentInstances 屬性達成的。 這個屬性會限制並行工作流程服務實例的數目。 當流量限制被超過時,任何新增的工作流程服務實例或激活持續性工作流程實例的要求將會被排入佇列。 無論佇列要求是新實例或執行中保存的實例,都會依 FIFO 順序處理。 載入主機原則資訊,決定如何處理未處理過的例外狀況,以及如何卸除和保存閒置的工作流程服務。 如需這些主題的詳細資訊,請參閱 如何:使用 WorkflowServiceHost 設定工作流程未處理的例外狀況行為如何:使用 WorkflowServiceHost 設定閑置行為。 工作流程實例會根據主機原則保存,並在需要時重載。 如需工作流程持續性的詳細資訊,請參閱:如何:使用 WorkflowServiceHost 設定持續性建立長時間執行的工作流程服務和工作流程持續性

下圖顯示呼叫 WorkflowServiceHost.Open 時的流程:

顯示呼叫 WorkflowServiceHost.Open 時流程的圖表。

工作流程會從 XAML 載入,並建立活動樹狀結構。 WorkflowServiceHost 會遍歷活動樹狀結構,並建立服務描述。 組態會套用至主機。 最後,主程式開始聆聽傳入訊息。

下圖顯示 WorkflowServiceHost 當它收到已將 CanCreateInstance 設定為 true之 Receive 活動系結的訊息時所執行的動作:

WFS 主機收到訊息時所使用的判定樹,CanCreateInstance 為 true。

訊息送達後,會由 WCF 通道堆疊進行處理。 系統會檢查節流裝置,並執行相關性查詢。 如果訊息系結至現有實例,則會傳遞訊息。 如果需要建立新的實例,則會檢查 Receive 活動的 CanCreateInstance 屬性。 如果設定為 true,則會建立新的實例,並傳遞訊息。

以下的圖示顯示當 WorkflowServiceHost 接收到指定給 CanCreateInstance 設定為 false 之 Receive 活動的訊息時,其行為方式。

WFS 主機收到訊息時所使用的判定樹,CanCreateInstance 為 false。

訊息送達後,會由 WCF 通道堆疊進行處理。 系統會檢查節流裝置,並執行相關性查詢。 訊息將綁定到現有的實例(因為 CanCreateInstance 為 false),因此從持久性存放區載入該實例,書籤恢復後,執行工作流。

警告

如果 SQL Server 設定為只接聽 NamedPipe 通訊協定,工作流程服務主機將無法開啟。

另請參閱