2012-02-29 80 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