このタスクでは、操作の呼び出しに成功した後にサービスの状態を永続化する属性を使用して、タスク 1 で作成したサービスを装飾します。
永続性サービス属性でサービスを装飾するには
Service1.cs (Visual Basic ソリューションを作成した場合は Service1.vb) を開きます。
[ソリューション エクスプローラ] ペインの SimpleDurableService プロジェクト ノードの下で、[参照] サブフォルダを右クリックし、[参照の追加] を選択します。
[参照の追加] ダイアログ ボックスの [.NET] タブで [System.WorkflowServices] を選択し、[OK] をクリックします。
C# ソース ファイルに次の using ステートメントを追加します。
Visual Basic ソリューションを作成した場合は、SimpleDurableService プロジェクト ノードを右クリックし、[プロパティ] をクリックします。[参照] タブをクリックし、[インポートされた名前空間] の下の [System.ServiceModel.Description] チェック ボックスをオンにします。
サービスを保持するには、次の例のように DurableServiceAttribute 属性および SerializableAttribute 属性で Service1 クラスを装飾する必要があります。
DurableServiceAttribute 属性は、WCF サービスの状態情報をデータべースやファイルなどの永続的ストアに永続化することを指定します。また、サービス型は、永続的ストアに転送できるようにシリアル化可能でなければなりません。
次の例に示すように、DurableOperationAttribute 属性でサービス操作を装飾します。この属性は、操作完了後にサービス インスタンス状態を保存することを指定します。
修飾された操作が正常に完了すると、CanCreateInstance プロパティおよび CompletesInstance プロパティによって、永続性サービス インスタンスを作成または完了するように指定されます。このチュートリアルでは、一部の操作にサービス インスタンスの動作を制御する最初の操作と最後の操作があります。
既定値に設定されている DurableOperationAttribute 属性で修飾された操作では、永続化ストアの既存のサービス インスタンス エントリへの状態情報の永続化のみを行うことができます。ただし、System.ServiceModel.SessionMode.NotAllowed が true に設定されたサービス コントラクトを作成する場合は、すべての DurableOperationAttribute 属性の CanCreateInstance プロパティを true に設定する必要があります。
これでサービスが適切な属性で修飾されるので、構成ファイルを設定し、使用する永続化ストアを参照する必要があります。
永続性サービスを構成するには
App.config を開きます。
WSHttpContextBinding など、コンテキスト バインドを参照するようにエンドポイント設定を変更します。
<endpoint address ="" binding="wsHttpContextBinding" contract="SimpleDurableService.IService1" />
特定のサービス インスタンスを識別するためにクライアントによって DurableOperationContext が使用されるため、コンテキスト バインドを使用する必要があります。要求/応答操作を呼び出し、サービスから応答を受信した後、クライアントはそれ以降の操作の呼び出しごとに InstanceId 値を使用して、クライアント自体を適切なサービス インスタンスに関連付けます。この追跡機構が使用されていない場合は、サービス インスタンスがシャットダウンされるか、クライアントから切断されると、クライアントは特定のサービス インスタンスとの接続を再び確立できなくなります。
次の子ノードを動作ノードに追加します。
<behaviors> <serviceBehaviors> <behavior name="SimpleDurableService.Service1Behavior"> <!-- To avoid disclosing metadata information, set the following value to false and remove the preceding metadata endpoint before deployment. --> <serviceMetadata httpGetEnabled="True"/> <!-- To receive exception details in faults for debugging purposes, set the following value to true. Set the value to false before deployment to avoid disclosing exception information. --> <serviceDebug includeExceptionDetailInFaults="False" /> <persistenceProvider type="System.ServiceModel.Persistence.SqlPersistenceProviderFactory, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DurableServiceStore" persistenceOperationTimeout = "00:00:10" lockTimeout="00:01:00" serializeAsText="true"/> </behavior> </serviceBehaviors> </behaviors>
PersistenceProviderElement は、サービスで使用される PersistenceProvider の型を定義します。このチュートリアルでは、SQL データベースに接続する PersistenceProvider 型の新しいインスタンスを作成するために、SqlPersistenceProviderFactory を使用しています。追加操作が呼び出され、正常に実行されるたびに、新しいサービス インスタンスが生成され、その状態情報が SQL データベースに保存されます。
サービス インスタンスが永続化のために使用する SQL データベースの接続文字列を追加します。
</system.serviceModel> <connectionStrings> <add name="DurableServiceStore" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=NetFx35Samples_DurableServiceStore;Integrated Security=SSPI"/> </connectionStrings> </configuration>
![]() |
---|
このチュートリアルでは、「Durable Workflow Services Sample」で使用したものと同じデータベースを使用します。したがって、接続文字列は同じです。永続的ストアへのアクセスを許可するには、「One-Time Setup Procedure for the Windows Communication Foundation Samples」の Createstores.cmd スクリプトを実行します。 |
次のタスクでは、永続性サービスにアクセスできるクライアントを作成します。
関連項目
タスク
タスク 1: 永続性サービス コントラクトの定義と実装
タスク 3: 永続性サービス クライアントの作成
その他の技術情報
Copyright © 2007 by Microsoft Corporation. All rights reserved.