다음을 통해 공유


방법: 인스턴스 저장소 공급자 개발

다음 절차에서는 사용자 지정 인스턴스 저장소 공급자를 만드는 단계를 제공합니다. 인스턴스 저장소, 쿼리 및 제어 공급자에 대한 일반적인 내용은 인스턴스 저장소, 쿼리 및 제어 공급자를 참조하십시오.

  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. 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에는 CreateInstanceStore 메서드 호출 시 SqlWorkflowInstanceStore 개체를 만드는 SQL 워크플로 인스턴스 저장소에 대한 인스턴스 저장소 공급자가 포함되어 있습니다.

중요

Windows Server AppFabric에 공급자 등록에 대한 자세한 내용은 방법: 사용자 지정 공급자 등록을 참조하십시오.

  2011-12-05