ステート マシンのワークフロー サービスのサンプル
このサンプルでは、ステート マシンのワークフローを使用してワークフロー サービスを作成する方法、ステート マシン ワークフローを使用して電卓を実装する方法、および状態を自動的に保存する長時間のプロセスを示します。ワークフロー サービスを再開したときに、ワークフローの状態が維持されているため、クライアントはワークフロー サービスの同じインスタンスと通信できます。このサンプルでは、コントラクトのアプリケーション レベルのプロトコルを強制して、サービスで予期せずに操作が呼び出された場合にワークフローで例外が発生するようにする方法を示します。
メモ : |
---|
このサンプルをビルドして実行するには、.NET Framework Version 3.5 をインストールする必要があります。プロジェクト ファイルとソリューション ファイルを開くには、Visual Studio 2008 が必要です。 |
このサンプルのセットアップの詳細については、「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」を参照してください。
このサービスでは、次のサンプル コードに示すように ICalculator
サービス コントラクトを実装します。
[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
[OperationContract()]
int PowerOn();
[OperationContract()]
int Add(int value);
[OperationContract()]
int Subtract(int value);
[OperationContract()]
int Multiply(int value);
[OperationContract()]
int Divide(int value);
[OperationContract()]
void PowerOff();
}
このサンプルはステートのセットを実装します。各ステートにはイベント ハンドラのセットがあります。各イベント ハンドラには、ICalculator
コントラクトの操作を実装する Receive アクティビティが格納されています。ステート マシンのワークフローは特定のステートにあるため、Receive アクティビティで実装される操作のセットを受け入れることができます。これによって、アプリケーション レベルのプロトコルを強制できます。
Web.config ファイルはサービスのバインディングを定義し、2 つの異なるバインディングを持つ 2 つのエンドポイントを公開します。1 つは Cookie が有効な BasicHttpContextBinding です。もう 1 つは WSHttpContextBinding で、これは BasicHttpContextBinding を使用しないクライアントで公開されます。WSHttpContextBinding は、特定のワークフロー インスタンスに要求をルーティングするときに使用するコンテキストを保持します。
インターネット インフォメーション サービス (IIS) でサービスをセットアップするには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」に記載されたセットアップ手順を実行します。
IIS で、ServiceModelSamples 仮想ディレクトリの Windows 認証を有効にします。
IIS 5.1 または 6.0 で Windows 認証を有効にするには
コマンド プロンプト ウィンドウを開き、「start inetmgr」と入力して、インターネット インフォメーション サービス (IIS) MMC スナップインを開きます。
[既定の Web サイト] 内の仮想ルート [ServiceModelSamples] を右クリックし、[プロパティ] をクリックして、[ディレクトリ セキュリティ] タブをクリックします。
[認証とアクセス制御] の [編集] をクリックします。
[認証方法] ダイアログ ボックスで、[統合 Windows 認証] をオンにします。
IIS 7.0 で Windows 認証を有効にするには
コマンド プロンプト ウィンドウを開き、「start inetmgr」と入力して、インターネット インフォメーション サービス (IIS) MMC スナップインを開きます。
[既定の Web サイト] 内の [ServiceModelSamples] 仮想ルートを選択します。
[ServiceModelSamples] ホーム ペイン内で [IIS] グループの [認証] をダブルクリックします。
[Windows 認証] を選択し、[有効] アクションを選択します。
プロジェクトをビルドします。プロジェクトがビルドされ、ServiceModelSamples が更新されます。
永続的ストアへのアクセスを許可するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」に示した Createstores.cmd スクリプトを実行します。このサンプルでは、NetFx35Samples_ServiceWorkflowStore データベースを使用します。
SQL Server ユーザー グループのメンバに ASP.NET ユーザー アカウントを作成します。
サービスが正しくインストールされたことを確認するには、ブラウザでアドレス https://localhost/ServiceModelSamples/service.svc をポイントします。サービスのヘルプ ページが表示されます。Web サービス記述言語 (WSDL: Web Services Descriptor Language) を参照するには、「https://localhost/servicemodelsamples/service.svc?wsdl」と入力します。
このサンプルを実行するには、電卓クライアントのサンプルを使用する必要があります。これは、サービスのクライアントとして機能する を使用して作成された電卓ユーザー インターフェイスです。サービスが提供するバインディングに対応する異なるエンドポイントを使用できます。バインディングを変更するには、[エンドポイント] メニュー項目をクリックし、適切なバインディング BasicHtttpContextBinding または WSHttpContextBinding を選択します。
サービスの永続的性質をテストするには、電卓クライアントの実行中にクライアントを一度閉じてから開きます。電卓クライアントは同じサービス インスタンスと通信し、下部にインスタンス ID が表示されます。電卓クライアントは、Client.ctx というテキスト ファイルを使用して、最初に呼び出しが行われた永続性のある場所 (この場合、サンプルの \bin ディレクトリ) にコンテキストを格納します。クライアントを再度開くと、ファイルがあるかどうかが確認されます。テキスト ファイルがある場合は、格納されたコンテキストが作成中のチャネルに適用されます。ワークフロー サービスが終了している場合に、\bin ディレクトリにまだ残っている Client.ctx ファイルを使用してクライアントを開くと、チャネルへのコンテキストの適用が試みられます。しかし、通信するワークフロー インスタンスが存在しないため、エラーが発生します。ファイルを削除して、やり直してください。
IIS を再起動してワークフロー サービスをリサイクルすることもできます。毎回の操作の後で永続的ストアを使用するため、サービスの状態が格納されます。したがって、IIS の再起動後にクライアントからサービスと通信しようとすると、ワークフロー インフラストラクチャは永続的ストアからワークフロー インスタンスを受信し、同じインスタンスと通信できます。
メモ : IIS を再起動した後に初めて操作を呼び出すと、MessageSecurityException 例外が発生します。これはチャネルのセキュリティ トークンの期限切れにより発生する例外です。他の操作を呼び出せば成功します。
Copyright © 2007 by Microsoft Corporation.All rights reserved.