SQL 어댑터를 사용하여 WCF 채널 모델 개요
SQL Server 대한 Microsoft BizTalk 어댑터에서 작업을 호출하기 위해 코드는 WCF 클라이언트 역할을 하며 어댑터에 아웃바운드 작업을 보냅니다. WCF 채널 모델에서 코드는 채널을 통해 요청 메시지를 전송하여 어댑터에서 작업을 호출합니다.
어댑터를 사용하여 폴링 기반 데이터 변경 메시지를 수신하기 위해 코드는 WCF 서비스 역할을 하며 어댑터에서 인바운드 폴링, TypedPolling 또는 알림 작업을 받습니다. 즉, 코드는 채널을 통해 어댑터에서 이러한 작업에 대한 요청 메시지를 받습니다.
이 섹션의 topics WCF 채널 모델에서 SQL 어댑터를 사용하는 방법에 대한 개요를 제공합니다.
WCF 채널 모델 개요
클라이언트와 서비스는 SOAP 메시지를 교환하여 통신합니다. WCF 채널 모델은 이 메시지 교환의 하위 수준 추상화입니다. 채널 스택이라는 계층화된 프로토콜 스택을 사용하여 메시지를 보내고 받을 수 있는 인터페이스 및 형식을 제공합니다. 스택의 각 계층은 채널로 구성되며 각 채널은 WCF 바인딩에서 만들어집니다. 가장 낮은 계층에는 전송 채널이 있습니다. 전송 채널은 서비스와 클라이언트 간의 기본 전송 메커니즘을 구현하고 각 메시지를 더 높은 계층(그리고 궁극적으로 소비하는 애플리케이션)에 System.ServiceModel.Message로 제공합니다. WCF 메시지 클래스는 SOAP 메시지의 추상화입니다. WCF는 요청-회신 또는 단방향과 같은 기본 SOAP 메시지 교환 패턴을 모델링하는 채널 셰이프라고 하는 여러 채널 인터페이스를 제공합니다. WCF 전송 바인딩은 더 높은 계층이 메시지를 보내고 받는 데 사용할 수 있는 하나 이상의 채널 셰이프 구현을 제공합니다. WCF 채널 모델에 대한 자세한 내용은 채널 모델 개요를 참조하세요.
SQL 어댑터는 SQL Server 데이터베이스를 WCF 서비스로 노출하는 WCF 사용자 지정 전송 바인딩입니다.
SQL Server 어댑터에 대해 지원되는 채널 셰이프
어댑터는 다음 WCF 채널 셰이프를 구현합니다.
IRequestChannel (System.ServiceModel.Channels.IRequestChannel). IRequestChannel 인터페이스는 요청-회신 메시지 교환의 클라이언트 쪽을 구현합니다. IRequestChannel을 사용하여 응답을 사용하려는 작업(예: 테이블에서 SELECT 쿼리 수행)을 수행할 수 있습니다.
IOutputChannel (System.ServiceModel.Channels.IOutputChannel). 이 셰이프는 단방향 메시지 교환의 클라이언트 쪽을 구현합니다. IOutputChannel을 사용하여 응답을 사용할 필요가 없는 작업을 호출할 수 있습니다(예: 반환 매개 변수가 없는 프로시저 호출).
중요
SQL Server 클라이언트에 대한 어댑터의 모든 기본 호출은 동기적입니다. 여기에는 IOutputChannel을 통해 호출된 작업의 결과인 SQL Server 클라이언트에 대한 호출이 포함됩니다. IOutputChannel을 사용하는 경우 어댑터는 SQL Server 클라이언트에서 받은 응답을 삭제합니다.
IInputChannel (System.ServiceModel.Channels.IInputChannel). 이 셰이프는 단방향 메시지 교환의 서비스 쪽을 구현합니다. IInputChannel을 사용하여 어댑터에서 폴링 또는 알림과 같은 인바운드 작업에 대한 메시지를 받습니다.
WCF 바인딩과 마찬가지로 SQL 어댑터는 팩터리 패턴을 사용하여 애플리케이션 코드에 채널을 제공합니다. Microsoft.Adapters.SQLBinding 개체를 사용하여 다음 인스턴스를 만듭니다.
System.ServiceModel.ChannelFactory<IRequestChannel> 은 어댑터에서 요청-응답 작업을 호출하는 데 사용할 수 있는 IRequestChannel 채널을 제공합니다.
System.ServiceModel.ChannelFactory<IOutputChannel> 은 어댑터에서 단방향 작업을 호출하는 데 사용할 수 있는 IOutputChannel 채널을 제공합니다.
System.ServiceModel.IChannelListener<IInputChannel>은 어댑터에서 폴링 또는 알림과 같은 인바운드 작업에 대한 메시지를 수신하는 데 사용할 수 있는 IInputChannel 채널을 제공합니다.
WCF 채널 모델에서 SQL Server 데이터베이스 어댑터에 대한 메시지 만들기
WCF에서 System.ServiceModel.Channels.Message 클래스는 SOAP 메시지의 메모리 내 표현을 제공합니다. static Message.Create 메서드를 호출하여 메시지 instance 만듭니다.
SOAP 메시지에는 SQL 어댑터로 보낼 메시지 instance 만들 때 지정해야 하는 두 가지 중요한 부분이 있습니다.
메시지 작업은 SOAP 메시지 헤더의 일부인 문자열입니다. 메시지 작업은 데이터베이스에서 호출해야 하는 작업을 식별합니다. 다음은 Employee 테이블에서
TableOp/Select/dbo/Employee
선택 작업을 호출하도록 지정된 메시지 작업을 보여줍니다.메시지 본문에는 작업에 대한 매개 변수 데이터가 포함됩니다. 메시지 본문은 요청된 작업에 대해 SQL 어댑터가 예상하는 메시지 스키마에 해당하는 올바른 형식의 XML로 구성됩니다. 다음 메시지 본문은 Employee 테이블에서 Select 작업을 지정합니다(SELECT * FROM Employee WHERE Employee_ID=10001).
<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <Columns>*</Columns> <Query>where Employee_ID=10001</Query> </Select>
작업에 대한 SQL 어댑터 메시지 스키마 및 메시지 작업에 대한 자세한 내용은 SQL Server BizTalk 어댑터에 대한 메시지 및 메시지 스키마를 참조하세요.
이 Create 메서드는 오버로드되며 메시지 본문을 제공하기 위한 다양한 옵션을 제공합니다. 다음 코드에서는 XmlReader를 사용하여 메시지 본문을 제공하여 메시지 instance 만드는 방법을 보여 줍니다. 이 코드에서 메시지 본문은 파일에서 읽습니다.
XmlReader readerIn = XmlReader.Create("SelectInput.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default,
"TableOp/Select/dbo/Employee",
readerIn);
중요
메시지 instance 메시지 작업을 제공해야 합니다. 이 작업은 일반적으로 메시지 instance 만들 때 수행됩니다.