2012-02-29 83 views
1

我有一個SOAP響應傳回它的主體元素爲...流......我被告知這意味着流正在被傳遞。我將如何去閱讀這個流?我怎樣才能找出它是什麼流?接收流的程序是一個WCF服務。流作爲SOAP響應傳遞

+1

使用StreamReader? – talnicolas 2012-02-29 20:49:44

+0

@talnicolas在我的經驗中,StreamReader對於閱讀任意流並不是非常有用... – 2012-02-29 20:54:53

+0

@MarcGravell噢,好吧,這只是一個提示,我並不真正瞭解任何C#。 – talnicolas 2012-02-29 20:56:49

回答

0

流通常只能讀取一次,所以如果讀取流可能會被使用,您需要重新創建它。你可以做的一個可能的地方是在一個自定義信息編碼器,它包裝原始綁定編碼器。

有兩個WriteMessage您需要實現的方法。在緩衝的情況下,只需將呼叫委派給封裝的編碼器,並且您將獲得消息內容。在流式傳輸的情況下,您會將傳遞一個內存流的消息寫入包裝的編碼器,檢查內容,然後將流內容寫入作爲參數傳遞的流中。

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

謝謝。我將轉換模式從Streamed切換到Buffered,而不是在我的Web.config中,現在我可以在我的日誌中看到正文 – symbiont 2016-09-30 12:50:12