我通过实施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格式的数据结构吗?
答案 0 :(得分:4)
这是因为您提到的所有绑定都设计为使用SOAP协议。他们使用的是TextMessageEncoder
或BinaryMessageEncoder
,这两种情况都适用于SOAP信封(除了您在TextMessageEncoder
设置为MessageVersion
的自定义绑定中使用None
的情况)。
允许其他消息格式的唯一开箱即用绑定是WebHttpBinding
,它使用支持XML和JSON的WebMessageEncoder
。