1

IDispatchMessageInspector을 구현하여 WCF에서 메시지 관리자를 구현했습니다. 이 방법에 중단 점을 퍼팅 WCF의 메시지가 항상 SOAP 형식으로 표시되는 이유는 무엇입니까?

...

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
{ 
    // Impementation 
} 

... 나는 내 것이 무엇인지 알아보기 위해서는 request 개체를 볼 수 있습니다. 나는 (basichttp, nettcp 및 netpipe)를 사용하여 어떤 엔드 포인트 바인딩 내부의 메시지는 항상 예를 ​​들어, SOAP 형식으로 표현되기 때문에 분명히

나는 충분히 WCF를 이해 해달라고

<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"> 
    <s:Header> 
     -- headers -- 
    </s:Header> 
    <s:Body> 
     -- body -- 
    </s:Body> 
</s:Envelope> 

요청 객체에 불과 SOAP 형식으로 메시지를 나타내는로 .toString()를하고 있기 때문입니다?

다른 프로토콜 (예 : netTcp는 다른 메시지 페이로드를 발생시킵니다.

또한 JSON 형식으로 데이터를 나타내고 싶다고 말하면 어떻게해야합니까? 아니면 SOAP envelope 내부에 JSON 형식의 데이터 구조를 만들겠습니까?

답변

4

언급 한 모든 바인딩이 SOAP 프로토콜을 사용하도록 설계 되었기 때문입니다. 그들은 TextMessageEncoder 또는 BinaryMessageEncoder와 (당신이 NoneMessageVersion 세트와 바인딩 정의에 TextMessageEncoder를 사용하는 상황 제외) SOAP 봉투와 함께 이러한 작업 중 하나만을 사용하고 있습니다.

다른 메시지 형식을 허용하는 유일한 기본 바인딩은 WebHttpBinding이며 WebMessageEncoder은 XML과 JSON을 모두 지원합니다.

관련 문제