如何:开发实例存储提供程序
下面过程提供了创建自定义实例存储提供程序的步骤。有关实例存储、查询和控制提供程序的常规信息,请参阅实例存储、查询和控制提供程序。
创建一个类库项目。
添加对 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 方法。此方法返回的唯一提供程序 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