操作方法:インスタンス ストア プロバイダーの開発

次の手順は、カスタムのインスタンス ストア プロバイダーの作成方法を示しています。インスタンス ストア プロバイダー、クエリ プロバイダー、およびコントロール プロバイダーに関する一般的な情報については、「インスタンス ストア、クエリ、およびコントロール プロバイダー」を参照してください。

  1. クラス ライブラリ プロジェクトを作成します。

  2. Microsoft.ApplicationServer.StoreProvider.dll、System.Activities.DurableInstancing.dll、および System.Runtime.DurableInstancing.dll への参照を追加します。さらに、このトピックで提供されているサンプル コードをコンパイルするために、System.Configuration.dll および System.Data.dll への参照を追加します。

  3. ソース ファイルの先頭に次の 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;
    
  4. InstanceStoreProvider クラスから派生するインスタンス ストア プロバイダーのクラスを作成します。

        public sealed class MySqlWorkflowInstanceStoreProvider : InstanceStoreProvider
        {
        }
    
  5. 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);
            }
    
  6. 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;
            }
    
  7. 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