1

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

在这个方法上设置一个断点......

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 格式的数据结构吗?

4

1 回答 1

4

这是因为您提到的所有绑定都是为使用 SOAP 协议而设计的。他们使用其中一个TextMessageEncoderBinaryMessageEncoder两个都与 SOAP 信封一起使用(除了TextMessageEncoder在自定义绑定中使用MessageVersionset to的情况None)。

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

于 2012-04-05T07:39:16.297 回答