为什么WCF中的消息似乎总是以SOAP格式?

时间:2012-04-05 07:32:14

标签: wcf serialization soap basichttpbinding wcf-serialization

我通过实施IDispatchMessageInspector在WCF中实现了一个消息检查器。

对这种方法设一个断点......

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

...我可以查看request对象以查看其中的内容。

显然我不太了解WCF因为我使用的任何端点绑定(basichttp,nettcp和netpipe)内部的消息总是以SOAP格式表示,例如。

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

这是因为在请求对象上执行.ToString()只是以SOAP格式表示消息吗?

我想象使用其他协议,例如netTcp将导致不同的消息有效负载。

还可以说我想以JSON格式表示我的数据,我该如何做呢?或者我最终会在SOAP信封中使用JSON格式的数据结构吗?

1 个答案:

答案 0 :(得分:4)

这是因为您提到的所有绑定都设计为使用SOAP协议。他们使用的是TextMessageEncoderBinaryMessageEncoder,这两种情况都适用于SOAP信封(除了您在TextMessageEncoder设置为MessageVersion的自定义绑定中使用None的情况)。

允许其他消息格式的唯一开箱即用绑定是WebHttpBinding,它使用支持XML和JSON的WebMessageEncoder