次の方法で共有


ワークフロー サービスの概要

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

ワークフロー サービスは、ワークフローを使用して実装される WCF ベースのサービスです。ワークフロー サービスは、Windows Communication Foundation (WCF) メッセージを送受信するメッセージ アクティビティを使用するワークフローです。.NET Framework Version 4 では、ワークフロー内からメッセージを送受信するために使用できる多数のメッセージ アクティビティが導入されています。メッセージ アクティビティの詳細および異なるメッセージ交換パターンの実装に使用できる方法詳細情報、「メッセージング アクティビティの使用」を参照してください。

ワークフロー サービスを使用する利点

アプリケーションが分散型になるにつれ、負荷を軽減させるために、個々のサービスが他のサービスを呼び出す役割を果たすようになっています。これらの呼び出しを非同期操作として実装すると、コードがやや複雑になります。エラー処理によって、例外処理と詳細な追跡情報の形式がさらに複雑になります。一部のサービスには、長時間実行されることが多く、入力を待機する間に貴重なシステム リソースを占有するものがあります。このような問題があるため、分散アプリケーションは、非常に複雑で、作成と保守が困難であることがよくあります。ワークフローは、特に外部サービスへの呼び出しなど、非同期操作の連携を表す方法として最適です。また、実行時間が長いビジネス プロセスを表す場合にも効率的です。ワークフローが、分散環境でのサービス構築に役立つ資産となるのは、これらの特性があるためです。

ワークフロー サービスの実装

WCF サービスを実装するときは、サービスおよびサービスが送受信するデータを説明する一連のコントラクトを定義します。データは、データ コントラクトとメッセージ コントラクトで表されます。WCF サービスもワークフロー サービスも、サービスの説明の一環として、データ コントラクトとメッセージ コントラクトの定義を使用します。サービス自体は、(WSDL の形で) メタデータを公開して、サービスの操作を説明します。WCF では、サービス コントラクトと操作コントラクトによって、サービス、およびサービスがサポートする操作を定義します。ただし、ワークフロー サービスでは、これらのコントラクトはビジネス プロセス自体の一部です。これらは、コントラクト推論と呼ばれるプロセスによってメタデータとして公開されます。ワークフロー サービスが WorkflowServiceHost を使用してホストされている場合は、ワークフローで見つかった一連のメッセージ アクティビティに基づいて、ワークフロー定義が確認され、コントラクトが生成されます。具体的には、次のアクティビティとプロパティが、コントラクトの生成に使用されます。

Receive アクティビティ

SendReply アクティビティ

TransactedReceiveScope アクティビティ

コントラクト推論の結果は、WCF サービスと操作コントラクトと同じデータ構造を使用するサービスの説明になります。この情報を使用して、ワークフロー サービス用に WSDL が公開されます。

Dd456797.note(ja-jp,VS.100).gif注 :
.NET Framework 4 では、ツール サポートを追加せずに、既存のコントラクト定義を使用してワークフロー サービスを記述することはできません。ワークフロー サービスのコントラクトは、前述のコントラクト推論プロセスによって作成されます。ただし、メッセージ コントラクトおよびデータ コントラクトは完全にサポートされます。

ワークフロー サービスと MSMQ ベースのバインディング

WCF は、2 つの MSMQ ベースのバインディングである NetMsmqBindingMsmqIntegrationBinding を定義します。MSMQ ベースのバインディングは、多くの場合、ワークフロー サービスと共に使用されます。これは、これらのサービスに、実行時間が長いという性質があるためです。MSMQ ベースのバインディングには、MSMQ メッセージが有効と見なされる時間を指定する ValidityDuration プロパティがあります。ワークフロー サービスは本質的に実行時間が長いため、ワークフロー サービスによるメッセージの処理が可能になる前に、MSMQ メッセージの有効期間が切れることがあります。そのため、MSMQ バインディングの有効期間を適切な値に設定することが重要です。この値は、ワークフローとそのメッセージの処理方法に基づいて選択する必要があります。たとえば、Receive アクティビティがあり、これに続いて 10 分間実行されるカスタム アクティビティがあり、その後に別の Receive アクティビティがある場合、ValidityDuration の適切な値は 10 分を超えることになります。

ワークフロー サービスのホスティング

WCF サービスと同様に、ワークフロー サービスはホストされている必要があります。WCF サービスは、ServiceHost クラスを使用してサービスをホストし、ワークフロー サービスは、WorkflowServiceHost を使用してサービスをホストします。WCF サービスと同様に、ワークフロー サービスはさまざまな方法でホストできます。次に例を示します。

  • マネージ .NET Framework アプリケーション。

  • インターネット インフォメーション サービス (IIS)。

  • Windows プロセス アクティブ化サービス (WAS)。

  • マネージ Windows サービス。

マネージ .NET Framework アプリケーションまたはマネージ Windows サービスでホストされるワークフロー サービスは、WorkflowServiceHost クラスのインスタンスを作成し、このインスタンスに、Body プロパティ内のワークフロー定義を含む WorkflowService のインスタンスを渡します。メッセージ アクティビティを格納するワークフロー定義は、ワークフロー サービスとして公開されます。

ワークフロー サービスを IIS または WAS でホストするには、ワークフロー サービス定義を格納する .xamlx ファイルを仮想ディレクトリに配置します。既定のエンドポイント (BasicHttpBinding を使用) は、自動的に作成されます。詳細については、次のトピックを参照してください。、「Simplified Configuration」を参照してください。また、Web.config ファイルを仮想ディレクトリに配置し、独自のエンドポイントを指定することもできます。ワークフロー定義がアセンブリ内にある場合は、.svc ファイルを仮想ディレクトリに配置し、ワークフロー アセンブリを App_Code ディレクトリに配置できます。この .svc ファイルには、サービス ホスト ファクトリと、ワークフロー サービスを実装するクラスを指定する必要があります。次の例に、サービス ホスト ファクトリを指定し、ワークフロー サービスを実装するクラスを指定する方法を示します。

<%@ServiceHost Factory=" System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory
Service="EchoService"%>