2012-02-29 5 views
1

私は、そのbody要素を... stream ...として返すSOAP応答を持っています。これは、ストリームが渡されているということです。私はこのストリームをどのように読むことになるでしょうか?それが何の流れであるかをどのようにして知ることができますか?ストリームを受信するプログラムはWCFサービスです。SOAP応答として渡されるストリーム

+1

StreamReaderを使用しますか? – talnicolas

+0

私の経験では@talnicolas、StreamReaderは実際には任意のストリームを読むのには非常に便利ではありません... –

+0

@MarcGravellああ、それはちょうどヒントだった、私は本当にC#を知りません。 – talnicolas

答えて

0

ストリームはしばしば一度しか読み込むことができないため、ストリームを読むとそのストリームは消費される可能性があり、ストリームを再作成する必要があります。可能な場所の1つは、元のバインディングエンコーダをラップするカスタムメッセージエンコーダです。

実装する必要があるメソッドは2つあります。バッファリングされたケースでは、呼び出しをラップされたエンコーダに委譲するだけで、メッセージの内容が得られます。ストリーミングの場合、メッセージを書き込み、ラップされたエンコーダにメモリストリームを渡し、内容を検査してから、パラメータとして渡されたストリームにストリームの内容を書き出します。

public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) 
{ 
    ArraySegment<byte> result = this.wrappedEncoder.WriteMessage(message, maxMessageSize, bufferManager, messageOffset); 
    // message contents on the array segment. 
    return result; 
} 

public override void WriteMessage(Message message, Stream stream) 
{ 
    MemoryStream ms = new MemoryStream(); 
    this.wrappedEncoder.WriteMessage(message, ms); 
    // message contents in the memory stream 
    ms.Position = 0; 
    ms.CopyTo(stream); 
} 
+0

私はTransferModeをStreamedから私のWeb.configのBufferedに切り替えました。これで私のログに本文が表示されるようになりました – symbiont

関連する問題