Поток передается как ответ SOAP - PullRequest
1 голос
/ 01 марта 2012

У меня есть SOAP-ответ, который передает свой элемент тела как ... поток ... и мне сказали, что это означает, что поток передается. Как бы я прочитал этот поток? Как я могу узнать, что это за поток? Программа, принимающая поток, является службой WCF.

1 Ответ

0 голосов
/ 01 марта 2012

Потоки часто могут быть прочитаны только один раз, поэтому, если вы прочитаете поток, он, вероятно, будет использован, и вам нужно будет его воссоздать.Одним из возможных мест, где вы могли бы это сделать, является пользовательский кодировщик сообщений, который оборачивает оригинальный кодировщик привязки.

Существует два метода 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);
}
...