如何:开发实例存储提供程序

下面过程提供了创建自定义实例存储提供程序的步骤。有关实例存储、查询和控制提供程序的常规信息,请参阅实例存储、查询和控制提供程序

  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 方法。此方法返回的唯一提供程序 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 对象。

Important要点
有关用 Windows Server AppFabric 注册提供程序的信息,请参阅 如何: 注册自定义提供程序

  2011-12-05