Почему сообщение в WCF, по-видимому, всегда в формате SOAP?
Я реализовал инспектор сообщений в 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, как бы я поступил так? Или я получу структуры данных в формате JSON в конверте SOAP?
1 ответ
Это потому, что все упомянутые вами привязки предназначены для использования протокола SOAP. Они используют либо TextMessageEncoder
или же BinaryMessageEncoder
и оба они работают с конвертами SOAP (за исключением ситуации, когда вы используете TextMessageEncoder
в пользовательском связывании с MessageVersion
установлен в None
).
Единственная готовая привязка, разрешающая другие форматы сообщений, WebHttpBinding
который использует WebMessageEncoder
поддержка как XML, так и JSON.