"POX(Plain Old XML)" 애플리케이션은 SOAP 봉투 내에 묶이지 않은 XML 애플리케이션 데이터만 포함하는 원시 HTTP 메시지를 교환하여 통신합니다. WCF(Windows Communication Foundation)는 POX 메시지를 사용하는 서비스와 클라이언트를 모두 제공할 수 있습니다. 서비스에서 WCF를 사용하여 POX 메시지를 보내고 받는 웹 브라우저 및 스크립팅 언어와 같은 클라이언트에 엔드포인트를 노출하는 서비스를 구현할 수 있습니다. 클라이언트에서 WCF 프로그래밍 모델을 사용하여 POX 기반 서비스와 통신하는 클라이언트를 구현할 수 있습니다.
비고
이 문서는 원래 .NET Framework 3.0용으로 작성되었습니다. .NET Framework 3.5는 POX 애플리케이션 작업을 기본적으로 지원합니다. 자세한 내용은 WCF 웹 HTTP 프로그래밍 모델을 참조하세요.
WCF를 사용한 POX 프로그래밍
POX 메시지를 사용하여 HTTP를 통해 통신하는 WCF 서비스는 customBinding을<> 사용합니다.
<customBinding>
<binding name="poxServerBinding">
<textMessageEncoding messageVersion="None" />
<httpTransport />
</binding>
</customBinding>
이 사용자 지정 바인딩에는 다음 두 가지 요소가 포함됩니다.
표준 WCF 텍스트 메시지 인코더는 SOAP 봉투로 감싸지지 않은 XML 메시지 페이로드를 처리할 수 있도록 None 값을 사용하도록 특별히 구성되어 있습니다.
POX 메시지를 사용하여 HTTP를 통해 통신하는 WCF 클라이언트는 유사한 바인딩을 사용합니다(다음 명령적 코드에 표시됨).
private static Binding CreatePoxBinding()
{
TextMessageEncodingBindingElement encoder =
new TextMessageEncodingBindingElement( MessageVersion.None, Encoding.UTF8 );
HttpTransportBindingElement transport = new HttpTransportBindingElement();
transport.ManualAddressing = true;
return new CustomBinding( new BindingElement[] { encoder, transport } );
}
POX 클라이언트는 메시지를 보낼 URI를 명시적으로 지정해야 하므로, 일반적으로 HttpTransportBindingElement를 수동 주소 지정 모드로 구성하고, 요소에 ManualAddressing 속성을 true
로 설정해야 합니다. 이렇게 하면 애플리케이션 코드에서 메시지를 명시적으로 처리할 수 있으며 애플리케이션이 다른 HTTP URI에 메시지를 보낼 때마다 새 ChannelFactory 메시지를 만들 필요가 없습니다.
POX 메시지는 SOAP 헤더를 사용하여 중요한 프로토콜 정보를 전달하지 않으므로 POX 클라이언트 및 서비스는 종종 메시지를 보내거나 받는 데 사용되는 기본 HTTP 요청의 일부를 조작해야 합니다. HTTP 헤더 및 상태 코드와 같은 HTTP 관련 프로토콜 정보는 다음 두 클래스를 통해 WCF 프로그래밍 모델에 표시됩니다.
HttpRequestMessagePropertyHTTP 메서드 및 요청 헤더와 같은 HTTP 요청에 대한 정보를 포함하는 입니다.
HttpResponseMessagePropertyHTTP 응답에 대한 정보(예: HTTP 상태 코드 및 상태 설명) 및 HTTP 응답 헤더를 포함합니다.
다음 코드 예제에서는 주소 http://localhost:8100/customers
가 지정된 HTTP GET 요청 메시지를 만드는 방법을 보여줍니다.
Message request = Message.CreateMessage( MessageVersion.None, String.Empty );
request.Headers.To = "http://localhost:8100/customers";
HttpRequestMessageProperty property = new HttpRequestMessageProperty();
property.Method = "GET";
property.SuppressEntityBody = true;
request.Properties.Add( HttpRequestMessageProperty.Name, property );
먼저 빈 요청 Message를 CreateMessage(MessageVersion, String)를 호출하여 생성합니다. 매개 None 변수는 SOAP 봉투가 필요하지 않음을 나타내며 Empty 매개 변수는 Action으로 전달됩니다. 그런 다음 헤더를 원하는 URI로 설정 To 하여 요청 메시지를 처리합니다. 다음으로, HttpRequestMessageProperty 생성되고 Method HTTP 동사 GET 메서드로 설정되며 SuppressEntityBody 나가는 HTTP 요청 메시지의 본문에 데이터를 전송하지 않아야 함을 나타내도록 true
설정됩니다. 마지막으로 요청 속성은 HTTP 전송이 요청을 보내는 방법에 영향을 줄 수 있도록 요청 메시지의 컬렉션에 추가 Properties 됩니다. 그런 다음 해당 인스턴스를 통해 메시지를 보낼 준비가 됩니다 IRequestChannel.
서비스에서 유사한 방법을 사용하여 들어오는 메시지에서 HttpRequestMessageProperty를 추출하고 응답을 생성할 수 있습니다.