流作为SOAP响应传递
问题描述:
我有一个SOAP响应传回它的主体元素为...流......我被告知这意味着流正在被传递。我将如何去阅读这个流?我怎样才能找出它是什么流?接收流的程序是一个WCF服务。流作为SOAP响应传递
答
流通常只能读取一次,所以如果读取流可能会被使用,您需要重新创建它。你可以做的一个可能的地方是在一个自定义信息编码器,它包装原始绑定编码器。
有两个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
使用StreamReader? – talnicolas 2012-02-29 20:49:44
@talnicolas在我的经验中,StreamReader对于阅读任意流并不是非常有用... – 2012-02-29 20:54:53
@MarcGravell噢,好吧,这只是一个提示,我并不真正了解任何C#。 – talnicolas 2012-02-29 20:56:49