シーケンシャル ワークフロー サービスのサンプル

Download sample

このサンプルでは、シーケンシャル ワークフローを使用してワークフロー サービスを作成する方法を示します。このサンプルでは、適切にサービス コントラクトを作成する方法、つまりワークフロー優先モードと呼ばれるサービス作成方法を示します。サンプルは ICalculator コントラクトを作成し、ワークフローの構築時にワークフローに実装されます。

Noteメモ :

このサンプルをビルドして実行するには、.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 アクティビティはこれを使用して、適切な操作を選択して呼び出すことができるインターフェイスを表示します。

プロジェクトをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」に記載されたセットアップ手順を実行します。

  2. 永続化プロバイダをインストールするには、「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」トピックの CreateStores.cmd スクリプトを実行します。

  3. このサンプルでは、NetFx35Samples_ServiceWorkflowStore データベースを使用します。これには、クライアント ワークフローの永続ストアは含まれていません。このサンプルでは SQL Server Express を使用していることを前提とします。ここにはデータベースがインストールされます。SQL Server にデータベースをインストールするには、App.config ファイルの接続文字列を変更します。

  4. 永続化プロバイダを使用しない場合は、App.config ファイルから <WorkflowRuntime> セクションをコメントアウトします。

  5. 管理者グループのユーザーとしてサンプルを実行します。Windows Vista を使用している場合は、クライアントの実行可能ファイルを右クリックしてから [管理者として実行] をクリックします。

  6. アプリケーションの実行が開始されると、クライアント ワークフローは一連の電卓操作を送信し、ワークフローを完了します。Enter キーを押して、他の電卓操作を送信できます。

  7. このサービスの長期稼動性をテストするには、クライアント アプリケーションにブレークポイントを挿入します。Visual Studio のブレークポイントに到達すると、サービス アプリケーションが終了し、再起動します。クライアントのブレークポイントを解放します。クライアント ワークフローはサービスの同じワークフロー インスタンスと通信します。サンプルを 2 つのソリューションに分け、サービスのリサイクルをテストすることもできます。

別々のコンピュータでサンプルを実行するには

  1. サービスおよびクライアントの構成ファイルを編集し、エンドポイント アドレスのサーバー名が変更されていることを確認します。サーバー名を localhost からサービスを実行するコンピュータ名に変更します。

  2. サービスはポート 8888 を使用するため、ファイアウォールのこのポートを開く必要があります。Windows のコントロールパネルから、[Windows ファイアウォール] をクリックします。[ポートの追加] をクリックし、ポート 8888 を追加します。また、既定のポートでサービスを実行することもできます。この場合は、エンドポイント アドレスから [:8888] を削除します。

  3. クライアントの構成ファイルを編集し、<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> 要素をクライアントの構成ファイルにコピーします。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.