操作方法:インスタンス ストア プロバイダーの開発
次の手順は、カスタムのインスタンス ストア プロバイダーの作成方法を示しています。インスタンス ストア プロバイダー、クエリ プロバイダー、およびコントロール プロバイダーに関する一般的な情報については、「インスタンス ストア、クエリ、およびコントロール プロバイダー」を参照してください。
クラス ライブラリ プロジェクトを作成します。
Microsoft.ApplicationServer.StoreProvider.dll、System.Activities.DurableInstancing.dll、および System.Runtime.DurableInstancing.dll への参照を追加します。さらに、このトピックで提供されているサンプル コードをコンパイルするために、System.Configuration.dll および System.Data.dll への参照を追加します。
ソース ファイルの先頭に次の using ステートメントを追加します。
using Microsoft.ApplicationServer.StoreProvider; using System.Runtime.DurableInstancing; using System.Activities.DurableInstancing; //for the sample code provided in the methods using System.Collections.Specialized; using System.Data; using System.Data.SqlClient;
InstanceStoreProvider クラスから派生するインスタンス ストア プロバイダーのクラスを作成します。
public sealed class MySqlWorkflowInstanceStoreProvider : InstanceStoreProvider { }
Initialize メソッドを実装します。このメソッドは、構成ファイルで指定された構成情報に対応するプロパティ バッグを受け付けます。このプロパティ バッグのデータはプロバイダーの作成に使用されます。
Initialize メソッドは CreateInstanceStore メソッドまたは UniqueProviderIdentifier メソッドの前に呼び出されます。
string ConnectionString { get; set; } public override void Initialize(string name, NameValueCollection config) { this.ConnectionString= config["connectionString"]; // Initialize the base class base.Initialize(name, config); }
System.Runtime.DurableInstancing.InstanceStore オブジェクトを返す InstanceStoreProvider クラスの CreateInstanceStore メソッドを実装します。クライアントはこのオブジェクトを使用して、インスタンス ストアに対してコマンドを実行します。
public override InstanceStore CreateInstanceStore() { // the following line creates an instance of the SqlWorkflowInstanceStore class SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(this.ConnectionString); return store; }
UniqueProviderIdentifier メソッドを実装します。このメソッドが返す一意のプロバイダー ID を使用して、異なるプロバイダー オブジェクトが、基になる同一のストアに解決されるかどうかを判断します。
string UniqueStoreIdentifier { get; set; } public override string UniqueProviderIdentifier() { this.UniqueStoreIdentifier = GetUniqueStoreIdentifier(this.ConnectionString); return this.UniqueStoreIdentifier; } private string GetUniqueStoreIdentifier(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand()) { command.CommandType = CommandType.Text; command.CommandText = "SELECT TOP (1) [StoreIdentifier] FROM [Microsoft.ApplicationServer.DurableInstancing].[StoreVersion]"; command.Connection = connection; command.Connection.Open(); Guid identifier = (Guid)command.ExecuteScalar(); return identifier.ToString(); } } }
ワークフロー管理サービス (WMS) またはワークフロー ホストは、インスタンス ストア プロバイダーに対してこのメソッドを呼び出し、ストア固有の InstanceStore オブジェクトを取得します。AppFabric には、SQL ワークフロー インスタンス ストアのインスタンス ストア プロバイダーがあります。このプロバイダーは、CreateInstanceStore メソッドが呼び出されたときに SqlWorkflowInstanceStore オブジェクトを作成します。
重要
Windows Server AppFabric へのプロバイダーの登録方法については、「操作方法: カスタム プロバイダーの登録」を参照してください。
2011-12-05