流作为SOAP响应传递

时间:2012-02-29 20:47:40

标签: c# wcf soap stream

我有一个SOAP响应,它将其body元素作为... stream传回...我被告知这意味着正在传递一个流。我怎么去读这个流?我怎样才能知道它是什么?接收流的程序是WCF服务。

1 个答案:

答案 0 :(得分:0)

Streams通常只能读取一次,因此如果您读取该流,它可能会被消耗,您需要重新创建它。您可以在其中执行此操作的一个位置是自定义消息编码器,它包装原始绑定编码器。

您需要实施两种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);
}