WorkflowServiceHost を使用した WF4 ワークフローのバージョン管理
-
19-09-2019 - |
質問
関連 この質問.
を使用してワークフローのバージョン管理を実装する方法を理解しています WorkflowApplication
. 。ワークフローの古いバージョンの元の XAML 定義を保持している場合は、適切なコマンドを使用してそれらを読み込むことができます。 WorkflowApplication
コンストラクタ。
どうすればそれを保証できますか WorkflowServiceHost
IIS でワークフローをホストする場合、正しいワークフロー定義を使用しますか?
があります WorkflowServiceHost
ワークフロー定義を読み込むために使用できるコンストラクターですが、XAMLX ファイルを通じて IIS 内でホストしている場合は呼び出しません。 WorkflowServiceHost
これは IIS によって何らかの形で処理されます。では、ワークフローの正しいバージョンに正しいワークフロー定義がロードされていることを確認するにはどうすればよいでしょうか?
解決
WorkflowServiceHost を使用するアプローチは、WorkflowApplication を使用する方法とそれほど変わりません。さまざまな XAML(X) バージョンを維持する基本は、引き続き適用されます。したがって、WorkflowServiceHost の場合は、それぞれが異なるバージョンの XAMLX をホストする複数の WorkflowServiceHost を作成する必要があります。それぞれに異なるエンドポイントがあります。したがって、基本的に、エンドポイントはワークフロー サービスとそのバージョンの両方に対応します。
では、クライアントから正しい 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 ルーティング サービスの詳細については、スクリーンキャストをご覧ください。