3

この質問に関連しています。

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

IIS でワークフローをホストする場合、正しいワークフロー定義を使用するようにするにはどうすればよいWorkflowServiceHostでしょうか?

ワークフロー定義をロードするために使用できるコンストラクターがありWorkflowServiceHostますが、XAMLX ファイルを介して IIS 内でホストしている場合は、WorkflowServiceHost自分自身を呼び出さず、IIS によって何らかの方法で処理されます。では、正しいバージョンのワークフローに対して正しいワークフロー定義が読み込まれるようにするにはどうすればよいでしょうか?

4

1 に答える 1

8

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

では、クライアントから正しい 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 ルーティング サービスの詳細については、これらのスクリーンキャストを確認してください。

于 2010-03-14T09:14:25.583 に答える