1

Ich habe einen Nachrichteninspektor in WCF implementiert, indem ich IDispatchMessageInspector implementiere.Warum erscheint eine Nachricht in WCF scheinbar immer im SOAP-Format?

einen Haltepunkt auf dieser Methode Putting ...

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

... Ich kann am request Objekt schauen, um zu sehen, was drin ist.

Offensichtlich verstehe ich WCF nicht genug, denn egal welche Endpunkt-Bindung ich verwende (basichttp, nettcp und netpipe), die Nachricht wird immer im SOAP-Format dargestellt, z.

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

Ist das denn ein .ToString tun() auf dem Request-Objekt stellt nur die Nachricht im SOAP-Format?

Ich stellte mir vor, dass unter Verwendung eines anderen Protokolls, z. netTcp würde zu einer anderen Nachrichtennutzlast führen.

Sagen wir auch, ich wollte meine Daten im JSON-Format darstellen, wie würde ich das tun? Oder würde ich am Ende JSON-formatierte Datenstrukturen in einem SOAP-Umschlag haben?

Antwort

4

Dies liegt daran, dass alle von Ihnen erwähnten Bindungen für die Verwendung des SOAP-Protokolls ausgelegt sind. Sie verwenden entweder TextMessageEncoder oder BinaryMessageEncoder und beide funktionieren mit SOAP-Umschlägen (außer der Situation, in der Sie TextMessageEncoder in benutzerdefinierten Bindung mit MessageVersion auf None festgelegt verwenden).

Die einzige Out-of-the-Box-Bindung, die andere Nachrichtenformate zulässt, ist WebHttpBinding, die WebMessageEncoder unterstützt, die sowohl XML als auch JSON unterstützt.

Verwandte Themen