WorkflowServiceHost を使用するアプローチは、WorkflowApplication を使用する形式とまったく異なるわけではありません。さまざまな XAML(X) バージョンを保持する基本は、引き続き適用されます。そのため、WorkflowServiceHost の場合、それぞれが異なるバージョンの XAMLX をホストする複数の WorkflowServiceHost を作成する必要があります。それぞれに異なるエンドポイントがあります。したがって、基本的に en エンドポイントは、ワークフロー サービスとそのバージョンの両方に対応します。
では、クライアントから正しい WorkflowServiceHost へのメッセージを取得するにはどうすればよいでしょうか? ここでは、WCF ルーティング サービスが役に立ちます。クライアントが WorkflowServiceHost と直接通信する代わりに、中間の WCF ルーティング サービスを使用します。これにより、メッセージがチェックされ、適切な XAMLX ファイルをホストする WorkflowServiceHost にルーティングされます。それで、それはどのように知っていますか。これにはいくつかの方法があります。たとえば、メッセージ相関識別子を使用してデータベース ルックアップを実行し、新しいワークフローの要求は常に最新のバージョンに移動します。最も簡単な方法は、最初のリクエストの一部としてワークフロー サービスにバージョン番号を返させ、これを後続の各リクエストの必須部分にすることです。このようにして、WCF ルーティング サービスはメッセージ データの送信だけですべての作業を行うことができます。
この例は次のようになります。
- クライアントは、注文 ID 7 を使用して新しいワークフローを開始するメッセージを送信し、バージョン 3 を受信します。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは最新バージョンである httl://localhost/MyWorkflow.v3.xamlx に転送します。
- ワークフローに送信される次のメッセージには、orderid とバージョン 3 の両方が含まれます。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは、指定されたバージョンである httl://localhost/MyWorkflow.v3.xamlx に転送します。 .
- クライアント アプリは、古いワークフローにメッセージを送信したいと考えています。orderid 2 とバージョン 1 (このワークフローの開始時に応答) を使用します。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは指定されたバージョンである httl://localhost/MyWorkflow.v1.xamlx に転送します。
WCF ルーティング サービスの詳細については、これらのスクリーンキャストを確認してください。