1

を実装して、WCF にメッセージ インスペクターを実装しIDispatchMessageInspectorました。

このメソッドにブレークポイントを設定しています...

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 形式で自分のデータを表現したいとしましょう。これを行うにはどうすればよいでしょうか? それとも、SOAP エンベロープ内の JSON 形式のデータ構造になってしまうのでしょうか?

4

1 に答える 1

4

これは、あなたが言及したすべてのバインディングが SOAP プロトコルを使用するように設計されているためです。これらは、SOAP エンベロープで動作するこれらのいずれかTextMessageEncoderまたは両方を使用しています ( set toを使用してカスタム バインディングでBinaryMessageEncoder使用する状況を除く)。TextMessageEncoderMessageVersionNone

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

于 2012-04-05T07:39:16.297 に答える