다음을 통해 공유


SQL 어댑터를 사용하여 채널 만들기

WCF 채널 모델에서는 SQL Server 데이터베이스에서 작업을 호출하고 WCF 채널을 통해 SQL Server 위해 Microsoft BizTalk 어댑터와 SOAP 메시지를 교환하여 결과를 수신합니다.

  • IRequestChannel 또는 IOutputChannel을 사용하여 아웃바운드 작업을 호출하여 어댑터에 메시지를 보냅니다.

  • 폴링, TypedPolling 또는 알림 작업에 대한 IInputChannel을 통해 메시지를 수신하여 인바운드 작업에 대한 메시지를 받습니다.

    이 항목의 절차에서는 인바운드 및 아웃바운드 작업에 사용되는 채널 셰이프를 만들고 구성하는 방법에 대한 정보를 제공합니다.

아웃바운드(클라이언트) 채널 만들기

IRequestChannel 또는 IOutputChannel을 사용하여 SQL Server 데이터베이스에서 작업을 호출할 수 있습니다. 두 경우 모두 먼저 적절한 인터페이스를 사용하여 System.ServiceModel.ChannelFactory 를 만듭니다. 그런 다음 팩터리를 사용하여 채널을 만듭니다. 채널을 만든 후에는 이 채널을 사용하여 어댑터에서 작업을 호출할 수 있습니다.

아웃바운드 채널을 만들고 열려면

  1. 엔드포인트 및 바인딩을 사용하여 원하는 채널 셰이프에 대한 ChannelFactory instance 만들고 초기화합니다. 엔드포인트는 SQL Server 연결 URI를 지정하고 바인딩은 sqlBinding의 instance.

  2. Credentials 속성을 사용하여 채널 팩터리에 대한 SQL Server 자격 증명을 제공합니다.

  3. 채널 팩터리를 엽니다.

  4. 채널 팩터리에서 CreateChannel 메서드를 호출하여 채널의 instance 가져옵니다.

  5. 채널을 엽니다.

    코드 또는 구성에서 바인딩 및 엔드포인트 주소를 지정할 수 있습니다.

코드에서 바인딩 및 엔드포인트 주소 지정

다음 코드 예제에서는 코드에서 바인딩 및 엔드포인트 주소를 지정하여 IRequestChannel 을 만드는 방법을 보여줍니다. IOutputChannel을 만드는 코드는 ChannelFactory 및 채널 형식에 대해 IOutputChannel 인터페이스를 지정해야 한다는 점을 제외하고 동일합니다.

// Create binding -- set binding properties before you open the factory.  
SqlAdapterBinding sdbBinding = new SqlAdapterBinding();  
  
// Create address.  
EndpointAddress sdbAddress = new EndpointAddress("mssql://<sql_server_name>//<database_name>?");  
  
// Create channel factory from binding and address.  
ChannelFactory<IRequestChannel> factory =   
    new ChannelFactory<IRequestChannel>(sdbBinding, sdbAddress);  
  
// Specify credentials.   
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open factory  
factory.Open();  
  
// Get channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

구성에서 바인딩 및 엔드포인트 주소 지정

다음 코드 예제에서는 구성에 지정된 클라이언트 엔드포인트에서 채널 팩터리를 만드는 방법을 보여 줍니다.

// Create channel factory from configuration.  
ChannelFactory<IRequestChannel> factory =  
new ChannelFactory<IRequestChannel>("MyRequestChannel");  
  
// Specify credentials.  
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open the factory.  
factory.Open();  
  
// Get a channel and open it.  
IRequestChannel channel = factory.CreateChannel();  
channel.Open();  

구성 설정

다음 코드는 앞의 예제에 사용된 구성 설정을 보여 있습니다. 클라이언트 엔드포인트에 대한 계약은 만들려는 채널 셰이프의 종류에 따라 "System.ServiceModel.Channels.IRequestChannel" 또는 "System.ServiceModel.Channels.IOutputChannel"이어야 합니다.

<?xml version="1.0" encoding="utf-8"?>  
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">  
    <system.serviceModel>  
        <bindings>  
            <sqlBinding>  
                <binding name="SqlAdapterBinding" closeTimeout="00:01:00" openTimeout="00:01:00"  
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" maxConnectionPoolSize="100"  
                    encrypt="false" useAmbientTransaction="true" batchSize="20"  
                    polledDataAvailableStatement="" pollingStatement="" pollingIntervalInSeconds="30"  
                    pollWhileDataFound="false" notificationStatement="" notifyOnListenerStart="true"  
                    enableBizTalkCompatibilityMode="true" chunkSize="4194304"  
                    inboundOperationType="Polling" useDatabaseNameInXsdNamespace="false"  
                    allowIdentityInsert="false" enablePerformanceCounters="false"  
                    xmlStoredProcedureRootNodeName="" xmlStoredProcedureRootNodeNamespace="" />  
            </sqlBinding>  
        </bindings>  
        <client>  
            <endpoint address="mssql://mysqlserver//mydatabase?" binding="sqlBinding"  
                bindingConfiguration="SqlAdapterBinding" contract="System.ServiceModel.Channels.IRequestChannel"  
                name="MyRequestChannel" />  
        </client>  
    </system.serviceModel>  
</configuration>  

인바운드(서비스) 채널 만들기

sqlBinding의 instance 바인딩 속성을 설정하여 SQL Server 데이터베이스 테이블 및 뷰를 폴링하도록 SQL 어댑터를 구성합니다. 그런 다음 이 바인딩을 사용하여 IInputChannel 채널을 가져와 어댑터에서 폴링, TypedPolling 또는 알림 작업을 받을 수 있는 채널 수신기를 빌드합니다.

인바운드 작업을 받을 IInputChannel을 만들고 열려면

  1. SQLBinding의 instance 만듭니다.

  2. 인바운드 작업에 필요한 바인딩 속성을 설정합니다. 예를 들어 폴링 작업의 경우 최소한 InboundOperationType, PolledDataAvailableStatementPollingStatement 바인딩 속성을 설정하여 SQL Server 데이터베이스를 폴링하도록 SQL 어댑터를 구성해야 합니다.

  3. SQLBinding에서 BuildChannelListener<IInputChannel> 메서드를 호출하여 채널 수신기를 만듭니다. SQL Server 연결 URI를 이 메서드의 매개 변수 중 하나로 지정합니다.

  4. 수신기를 엽니다.

  5. 수신기에서 AcceptChannel 메서드를 호출하여 IInputChannel 채널을 가져옵니다.

  6. 채널을 엽니다.

    다음 코드에서는 채널 수신기를 만들고 IInputChannel 을 가져와 어댑터에서 데이터 변경 메시지를 받는 방법을 보여 줍니다.

중요

SQL 어댑터는 단방향 수신만 지원합니다. 따라서 IInputChannel을 사용하여 SQL Server 인바운드 작업에 대한 메시지를 수신해야 합니다.

// Create a binding: specify the InboundOperationType, the PolledDataAvailableStatement, and   
// the PollingStatement binding properties.  
SqlAdapterBinding binding = new SqlAdapterBinding();  
binding.InboundOperationType = InboundOperation.Polling;  
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM EMPLOYEE";  
binding.PollingStatement = "SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000";  
  
// Create a binding parameter collection and set the credentials  
ClientCredentials credentials = new ClientCredentials();  
credentials.UserName.UserName = "myuser";  
credentials.UserName.Password = "mypassword";  
  
BindingParameterCollection bindingParams = new BindingParameterCollection();  
bindingParams.Add(credentials);  
  
// Get a listener from the binding and open it.  
Uri connectionUri = new Uri("mssql://mysqlserver//mydatabase?");  
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);  
listener.Open();  
  
// Get a channel from the listener and open it.  
IInputChannel channel = listener.AcceptChannel();  
channel.Open();  

참고 항목

WCF 채널 모델을 사용하여 애플리케이션 개발