作法:開發執行個體儲存提供者
下列程序包含建立自訂執行個體儲存提供者的步驟。如需有關執行個體儲存、查詢與控制提供者的詳細資訊,請參閱執行個體儲存、查詢與控制提供者。
建立類別庫專案。
加入對 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 方法。此方法接受對應至組態檔中指定之組態資訊的屬性包。系統會使用此屬性包中的資料來建構提供者。
在呼叫 CreateInstanceStore 或 UniqueProviderIdentifier 方法之前,先呼叫 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); }
實作 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; }
實作 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