質問

関連 この質問.

を使用してワークフローのバージョン管理を実装する方法を理解しています WorkflowApplication. 。ワークフローの古いバージョンの元の XAML 定義を保持している場合は、適切なコマンドを使用してそれらを読み込むことができます。 WorkflowApplication コンストラクタ。

どうすればそれを保証できますか WorkflowServiceHost IIS でワークフローをホストする場合、正しいワークフロー定義を使用しますか?

があります WorkflowServiceHost ワークフロー定義を読み込むために使用できるコンストラクターですが、XAMLX ファイルを通じて IIS 内でホストしている場合は呼び出しません。 WorkflowServiceHost これは IIS によって何らかの形で処理されます。では、ワークフローの正しいバージョンに正しいワークフロー定義がロードされていることを確認するにはどうすればよいでしょうか?

役に立ちましたか?

解決

WorkflowServiceHost を使用するアプローチは、WorkflowApplication を使用する方法とそれほど変わりません。さまざまな XAML(X) バージョンを維持する基本は、引き続き適用されます。したがって、WorkflowServiceHost の場合は、それぞれが異なるバージョンの XAMLX をホストする複数の WorkflowServiceHost を作成する必要があります。それぞれに異なるエンドポイントがあります。したがって、基本的に、エンドポイントはワークフロー サービスとそのバージョンの両方に対応します。

では、クライアントから正しい WorkflowServiceHost にメッセージを取得するにはどうすればよいでしょうか?ここでは、WCF ルーティング サービスがあなたの味方です。クライアントは WorkflowServiceHost と直接通信する代わりに、中間の WCF ルーティング サービスを使用します。これにより、メッセージがチェックされ、適切な XAMLX ファイルをホストする WorkflowServiceHost にメッセージがルーティングされます。では、どうやってそれを知ることができるのでしょうか。それにはいくつかの方法があります。たとえば、メッセージ相関識別子を使用してデータベース検索を実行し、新しいワークフローのリクエストは常に最新バージョンに進みます。最も簡単な方法は、ワークフロー サービスに最初のリクエストの一部としてバージョン番号を返し、これを後続の各リクエストの必須部分にすることです。このようにして、WCF ルーティング サービスはメッセージ データの送信のみですべての作業を行うことができます。

この例は次のとおりです。

  1. クライアントは、注文 ID 7 を使用して新しいワークフローを開始するメッセージを送信し、バージョン 3 を受信します。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは最後のバージョンである httl://localhost/MyWorkflow.v3.xamlx に転送します。
  2. ワークフローに送信される次のメッセージには、orderid とバージョン 3 の両方が含まれます。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは指定されたバージョンである httl://localhost/MyWorkflow.v3.xamlx に転送します。
  3. クライアント アプリは、古いワークフローにメッセージを送信しようとしています。orderid 2 とバージョン 1 (このワークフローの開始時に応答された) を使用します。クライアント アプリケーションは URL httl://localhost/MyWorkflow.xaml を使用し、ルーティング サービスは指定されたバージョンである httl://localhost/MyWorkflow.v1.xamlx に転送します。

チェック これら WCF ルーティング サービスの詳細については、スクリーンキャストをご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top