Чтение потокового контента из HttpResponseMessage.Content - PullRequest
2 голосов
/ 10 марта 2012

У меня есть клиентская программа, получающая сообщение httpresponsemessage от службы отдыха WCF. Я не могу за всю жизнь прочитать содержание этого ответа. В контенте говорится просто «содержимое потоковых данных», длина содержимого равна 0, а тип содержимого - «».

Я пробовал ReadAsStream () и пытался превратить поток в документ xml, но я получил сообщение о том, что корневой узел отсутствует.

Я пытался использовать WebClient, но не знал, что добавить в заголовки.

Кто-нибудь знает, что делать с «потоком данных» в содержании моего ответного сообщения?

Ответы [ 2 ]

3 голосов
/ 10 марта 2012

Есть несколько проблем, которые могут возникнуть.

Чтение XML

Я не знаю, будет ли ReadAsStream работать для XmlDocument, но если вы можете использовать XDocument, это станет проще.В любом случае, если служба отдыха WCF возвращает дополнительный контент помимо XML, вам придется с этим справиться.Например,

var stream = response.Content.ReadAsStream();
using (var reader = XmlReader.Create(stream))
{
    XDocument.Load(reader);
}

Заголовки и тело

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

Вам не нужно использовать WebClient, так как для этого создана библиотека HTTP.

Erick

1 голос
/ 10 августа 2016

Для тех, кто использует async - см. Пример ниже:

HttpResponseMessage response = await task.ExecuteAsync(new CancellationToken());
var yourObject = (YourObject)new XmlSerializer(typeof(YourObject)).Deserialize(new StreamReader( await response.Content.ReadAsStreamAsync()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...