Почему сообщение в 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.

Другие вопросы по тегам