シーケンシャル ワークフロー サービスのサンプル
このサンプルでは、シーケンシャル ワークフローを使用してワークフロー サービスを作成する方法を示します。このサンプルでは、適切にサービス コントラクトを作成する方法、つまりワークフロー優先モードと呼ばれるサービス作成方法を示します。サンプルは ICalculator
コントラクトを作成し、ワークフローの構築時にワークフローに実装されます。
メモ : |
---|
このサンプルをビルドして実行するには、.NET Framework Version 3.5 をインストールする必要があります。プロジェクト ファイルとソリューション ファイルを開くには、Visual Studio 2008 が必要です。 |
ワークフローとしての電卓の実装には、次の利点があります。
ワークフローの状態を自動的に保存する長時間のプロセスを開始できます。つまり、ワークフロー サービスを再開したとき、クライアントはサービスの同じインスタンスと通信できます。
コントラクトのアプリケーション レベルのプロトコルが適用されます。操作が予期せずにこのサービスで呼び出されると、ワークフローで例外が発生します。
このワークフローでは、PowerOn
Receive アクティビティには CanCreateInstance
という名前のプロパティがあります。これには、true でマークされています。つまり、このサービスのインスタンスはクライアントが PowerOn
操作を呼び出したときに作成されます。クライアントは、この操作に対する応答の一部としてコンテキストを受信します。これ以後はワークフローの他の任意の操作を呼び出すことができます。クライアントが呼び出す各操作では、コンテキストはチャネルで送信されるため、操作を適切なインスタンスにルーティングできます。PowerOff
操作が呼び出されると、ワークフローに while ループを終了させるブール値が設定されます。
次のサンプル コードは、サービス プロジェクトの Program.cs ファイルで実装された WorkflowServiceHost
呼び出しパターンを示します。
WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();
前のサンプル コードでは、WorkflowServiceHost のコンストラクタは入力としてワークフロー型を使用し、それを開いてメッセージをリッスンします。
このサンプルには、電卓サービスの操作を呼び出すクライアント アプリケーションも含まれています。クライアント アプリケーションはシーケンシャル ワークフローであり、一連の操作呼び出しを行います。クライアント ワークフローは Send アクティビティを使用して、ワークフローの操作を呼び出します。クライアント プロジェクトには、ICalculator
サービスへの参照が含まれており、Send アクティビティはこれを使用して、適切な操作を選択して呼び出すことができるインターフェイスを表示します。
プロジェクトをセットアップ、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」に記載されたセットアップ手順を実行します。
永続化プロバイダをインストールするには、「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」トピックの CreateStores.cmd スクリプトを実行します。
このサンプルでは、NetFx35Samples_ServiceWorkflowStore データベースを使用します。これには、クライアント ワークフローの永続ストアは含まれていません。このサンプルでは SQL Server Express を使用していることを前提とします。ここにはデータベースがインストールされます。SQL Server にデータベースをインストールするには、App.config ファイルの接続文字列を変更します。
永続化プロバイダを使用しない場合は、App.config ファイルから
<WorkflowRuntime>
セクションをコメントアウトします。管理者グループのユーザーとしてサンプルを実行します。Windows Vista を使用している場合は、クライアントの実行可能ファイルを右クリックしてから [管理者として実行] をクリックします。
アプリケーションの実行が開始されると、クライアント ワークフローは一連の電卓操作を送信し、ワークフローを完了します。Enter キーを押して、他の電卓操作を送信できます。
このサービスの長期稼動性をテストするには、クライアント アプリケーションにブレークポイントを挿入します。Visual Studio のブレークポイントに到達すると、サービス アプリケーションが終了し、再起動します。クライアントのブレークポイントを解放します。クライアント ワークフローはサービスの同じワークフロー インスタンスと通信します。サンプルを 2 つのソリューションに分け、サービスのリサイクルをテストすることもできます。
別々のコンピュータでサンプルを実行するには
サービスおよびクライアントの構成ファイルを編集し、エンドポイント アドレスのサーバー名が変更されていることを確認します。サーバー名を
localhost
からサービスを実行するコンピュータ名に変更します。サービスはポート 8888 を使用するため、ファイアウォールのこのポートを開く必要があります。Windows のコントロールパネルから、[Windows ファイアウォール] をクリックします。[ポートの追加] をクリックし、ポート 8888 を追加します。また、既定のポートでサービスを実行することもできます。この場合は、エンドポイント アドレスから [:8888] を削除します。
クライアントの構成ファイルを編集し、
<endpoint>
要素の子として次の要素を追加します。<identity> <UserPrincipalName value=”*@<Domain Name in which your server is running” /> </identity>
ドメイン名を決定するために、サービスを実行しようとしているコンピュータでサービスを起動します。他のコンピュータのコマンド プロンプト ウィンドウで次のコマンドを実行します。
svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc
このコマンドにより .cs ファイルと output.config ファイルが生成されます。構成ファイルの
<endpoint>
要素で、<identity>
要素をクライアントの構成ファイルにコピーします。
Copyright © 2007 by Microsoft Corporation.All rights reserved.