共用方式為


作法:開發執行個體儲存提供者

下列程序包含建立自訂執行個體儲存提供者的步驟。如需有關執行個體儲存、查詢與控制提供者的詳細資訊,請參閱執行個體儲存、查詢與控制提供者

  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 方法。此方法接受對應至組態檔中指定之組態資訊的屬性包。系統會使用此屬性包中的資料來建構提供者。

    在呼叫 CreateInstanceStoreUniqueProviderIdentifier 方法之前,先呼叫 Initialize 方法。

    
            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. 實作 InstanceStoreProvider 類別的 CreateInstanceStore 方法,以傳回 System.Runtime.DurableInstancing.InstanceStore 物件,用戶端將會使用此物件針對執行個體儲存區執行命令。

    
            public override InstanceStore CreateInstanceStore()
            {
                // the following line creates an instance of the SqlWorkflowInstanceStore class
                    SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(this.ConnectionString);
                return store;
            }
    
  7. 實作 UniqueProviderIdentifier 方法。系統會使用此方法傳回的唯一提供者識別碼,來決定是否要將不同的提供者物件解析為相同的基礎儲存區。

            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 物件。

重要

如需以 Microsoft AppFabric 1.1 for Windows Server 註冊提供者的相關資訊,請參閱作法:註冊自訂提供者

  2012-03-05