次の方法で共有


ワークフロー サービス ホストの内部

WorkflowServiceHost はワークフロー サービスのホストを提供します。 受信メッセージをリッスンし、適切なワークフロー サービス インスタンスにルーティングし、アイドル状態のワークフローのアンロードと永続化などを制御します。 このトピックでは、WorkflowServiceHost が受信メッセージを処理する方法について説明します。

WorkflowServiceHost の概要

WorkflowServiceHost クラスは、ワークフロー サービスをホストするために使用されます。 受信メッセージをリッスンし、適切なサービス インスタンスにルーティングし、新しいインスタンスを作成するか、必要に応じて永続ストレージから既存のインスタンスを読み込みます。 次の図は、 WorkflowServiceHost のしくみの概要を示しています。

ワークフロー サービス ホストの概要を示す図。

この図は、 WorkflowServiceHost が .xamlx ファイルからワークフロー サービス定義を読み込み、構成ファイルから構成情報を読み込むことを示しています。 また、追跡プロファイルから追跡構成も読み込まれます。 WorkflowServiceHost は、ワークフロー コントロール エンドポイントを公開します。これにより、ワークフロー インスタンスに制御操作を送信できます。 詳細については、「 ワークフロー コントロール エンドポイントのサンプル」を参照してください。

WorkflowServiceHost では、受信アプリケーション メッセージをリッスンするアプリケーション エンドポイントも公開されます。 受信メッセージが到着すると、適切なワークフロー サービス インスタンス (現在読み込まれている場合) に送信されます。 必要に応じて、新しいワークフロー インスタンスが作成されます。 または、既存のインスタンスが永続化されている場合は、永続化ストアから読み込まれます。

WorkflowServiceHost の詳細

次の図は、 WorkflowServiceHost がメッセージを処理する方法を少し詳しく示しています。

ワークフロー サービス ホスト メッセージ フローを示す図。

この図は、3 つの異なるエンドポイント、アプリケーション エンドポイント、ワークフロー コントロール エンドポイント、ワークフロー ホスティング エンドポイントを示しています。 アプリケーション エンドポイントは、特定のワークフロー インスタンスにバインドされたメッセージを受信します。 ワークフロー コントロール エンドポイントは、制御操作をリッスンします。 ワークフロー ホスティング エンドポイントは、 WorkflowServiceHost がサービス以外のワークフローを読み込んで実行する原因となるメッセージをリッスンします。 図に示すように、すべてのメッセージは WCF ランタイムを介して処理されます。 ワークフロー サービス インスタンスの調整は、 MaxConcurrentInstances プロパティを使用して実現されます。 このプロパティは、同時実行ワークフロー サービス インスタンスの数を制限します。 このスロットルを超えると、新しいワークフロー サービス インスタンスに対する追加の要求、または永続化されたワークフロー インスタンスをアクティブ化するための要求がキューに入れられます。 キューに登録された要求は、新しいインスタンスの要求であるか、実行中の永続化されたインスタンスに対する要求であるかに関係なく、FIFO 順に処理されます。 ハンドルされない例外の処理方法と、アイドル状態のワークフロー サービスのアンロードと永続化方法を決定するホスト ポリシー情報が読み込まれます。 これらのトピックの詳細については、「 方法: WorkflowServiceHost を使用してワークフローのハンドルされない例外動作を構成 する 」および「方法: WorkflowServiceHost でアイドル動作を構成する」を参照してください。 ワークフロー インスタンスはホスト ポリシーに従って永続化され、必要に応じて再読み込みされます。 ワークフローの永続化の詳細については、「 方法: WorkflowServiceHost を使用して永続化を構成する、 実行時間の長いワークフロー サービスを作成するワークフローの永続化を構成する」を参照してください。

次の図は、WorkflowServiceHost.Open が呼び出されたときのフローを示しています。

WorkflowServiceHost.Open が呼び出されたときのフローを示す図。

ワークフローが XAML から読み込まれ、アクティビティ ツリーが作成されます。 WorkflowServiceHost アクティビティ ツリーをウォークし、サービスの説明を作成します。 構成がホストに適用されます。 最後に、ホストは受信メッセージのリッスンを開始します。

次の図は、CanCreateInstance が true に設定されている受信アクティビティにバインドされたメッセージを受信したときに、WorkflowServiceHostが実行する処理を示しています。

メッセージを受信し、CanCreateInstance が true のときに WFS ホストによって使用されるデシジョン ツリー。

メッセージが到着し、WCF チャネル スタックによって処理されます。 スロットルがチェックされ、関連付けクエリが実行されます。 メッセージが既存のインスタンスにバインドされている場合は、メッセージが配信されます。 新しいインスタンスを作成する必要がある場合は、Receive アクティビティの CanCreateInstance プロパティがチェックされます。 true に設定すると、新しいインスタンスが作成され、メッセージが配信されます。

次の図は、CanCreateInstance が false に設定されている受信アクティビティにバインドされたメッセージを受信したときに、 WorkflowServiceHost が実行する処理を示しています。

メッセージを受信し、CanCreateInstance が false の場合に WFS ホストによって使用されるデシジョン ツリー。

メッセージが到着し、WCF チャネル スタックによって処理されます。 スロットルがチェックされ、関連付けクエリが実行されます。 メッセージは既存のインスタンスにバインドされるため (CanCreateInstance が false であるため)、インスタンスは永続化ストアから読み込まれ、ブックマークが再開され、ワークフローが実行されます。

Warnung

SQL Server が NamedPipe プロトコルでのみリッスンするように構成されている場合、ワークフロー サービス ホストは開けなくなります。

こちらも参照ください