ワークフロー サービスの概要
このトピックの内容は、Windows Workflow Foundation 4 に該当します。
ワークフロー サービスは、ワークフローを使用して実装される WCF ベースのサービスです。ワークフロー サービスは、Windows Communication Foundation (WCF) メッセージを送受信するメッセージ アクティビティを使用するワークフローです。.NET Framework Version 4 では、ワークフロー内からメッセージを送受信するために使用できる多数のメッセージ アクティビティが導入されています。メッセージ アクティビティの詳細および異なるメッセージ交換パターンの実装に使用できる方法詳細情報、「メッセージング アクティビティの使用」を参照してください。
ワークフロー サービスを使用する利点
アプリケーションが分散型になるにつれ、負荷を軽減させるために、個々のサービスが他のサービスを呼び出す役割を果たすようになっています。これらの呼び出しを非同期操作として実装すると、コードがやや複雑になります。エラー処理によって、例外処理と詳細な追跡情報の形式がさらに複雑になります。一部のサービスには、長時間実行されることが多く、入力を待機する間に貴重なシステム リソースを占有するものがあります。このような問題があるため、分散アプリケーションは、非常に複雑で、作成と保守が困難であることがよくあります。ワークフローは、特に外部サービスへの呼び出しなど、非同期操作の連携を表す方法として最適です。また、実行時間が長いビジネス プロセスを表す場合にも効率的です。ワークフローが、分散環境でのサービス構築に役立つ資産となるのは、これらの特性があるためです。
ワークフロー サービスの実装
WCF サービスを実装するときは、サービスおよびサービスが送受信するデータを説明する一連のコントラクトを定義します。データは、データ コントラクトとメッセージ コントラクトで表されます。WCF サービスもワークフロー サービスも、サービスの説明の一環として、データ コントラクトとメッセージ コントラクトの定義を使用します。サービス自体は、(WSDL の形で) メタデータを公開して、サービスの操作を説明します。WCF では、サービス コントラクトと操作コントラクトによって、サービス、およびサービスがサポートする操作を定義します。ただし、ワークフロー サービスでは、これらのコントラクトはビジネス プロセス自体の一部です。これらは、コントラクト推論と呼ばれるプロセスによってメタデータとして公開されます。ワークフロー サービスが WorkflowServiceHost を使用してホストされている場合は、ワークフローで見つかった一連のメッセージ アクティビティに基づいて、ワークフロー定義が確認され、コントラクトが生成されます。具体的には、次のアクティビティとプロパティが、コントラクトの生成に使用されます。
Receive アクティビティ
OperationContractName
SendReply アクティビティ
TransactedReceiveScope アクティビティ
コントラクト推論の結果は、WCF サービスと操作コントラクトと同じデータ構造を使用するサービスの説明になります。この情報を使用して、ワークフロー サービス用に WSDL が公開されます。
注 : |
---|
.NET Framework 4 では、ツール サポートを追加せずに、既存のコントラクト定義を使用してワークフロー サービスを記述することはできません。ワークフロー サービスのコントラクトは、前述のコントラクト推論プロセスによって作成されます。ただし、メッセージ コントラクトおよびデータ コントラクトは完全にサポートされます。 |
ワークフロー サービスと MSMQ ベースのバインディング
WCF は、2 つの MSMQ ベースのバインディングである NetMsmqBinding と MsmqIntegrationBinding を定義します。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"%>