1

IDispatchMessageInspectorを実装してWCFでメッセージインスペクタを実装しました。このメソッドにブレークポイントを置く WCFのメッセージがSOAP形式のように見えるのはなぜですか?

...

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

...私の中にあるものを見るためにrequestオブジェクトを見ることができます。

私が使用しているエンドポイントバインディング(basichttp、nettcp、netpipe)は常に内部でメッセージがSOAP形式で表示されるため、明らかにWCFは十分理解できません。

<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エンベロープの内部にあるのでしょうか?

答えて

4

あなたが言及したすべてのバインディングがSOAPプロトコルを使用するように設計されているからです。彼らはTextMessageEncoderまたはBinaryMessageEncoderのいずれかを使用していますが、これらは両方ともをNoneに設定してカスタムバインドでTextMessageEncoderを使用する場合を除き、SOAPエンベロープで動作します。

他のメッセージ形式を許可する唯一の既定のバインディングはWebHttpBindingで、WebMessageEncoderはXMLとJSONの両方をサポートしています。