从HttpResponseMessage.Content读取流内容

时间:2012-03-10 00:24:43

标签: c# .net wcf rest post

我有一个客户端程序从WCF休息服务获取httpresponsemessage。我不能为我的生活阅读那篇回复中的内容。它在内容中简单地说是“流数据内容”,内容长度为0,内容类型为“”。

我尝试过ReadAsStream()并尝试将流转换为xml文档,但是我收到一条错误消息,说根节点丢失了。

我尝试过使用WebClient,但我不知道要在标题中添加什么内容。

有人知道如何处理我的回复消息内容中的“流数据内容”吗?

2 个答案:

答案 0 :(得分:3)

可能会出现一些问题。

阅读XML

我不知道ReadAsStream是否适用于XmlDocument,但是如果你可以使用XDocument则必须更容易。无论如何,如果WCF休息服务返回除XML之外的其他内容,您将需要处理它。例如

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

标题与正文

第二个问题可能与生成响应的方式有关。进行查询时,您可以指定是否只应读取标题,或者是否应读取整个正文。鉴于内容长度为零,这意味着您将返回未知大小的流。您需要以这种方式处理流 - 将其加载到可以正确使用流的内容中。

您不应该使用WebClient,因为HTTP库是为这些东西制作的。

埃里克

答案 1 :(得分:1)

对于那些使用async的人 - 请参阅以下示例:

HttpResponseMessage response = await task.ExecuteAsync(new CancellationToken());
var yourObject = (YourObject)new XmlSerializer(typeof(YourObject)).Deserialize(new StreamReader( await response.Content.ReadAsStreamAsync()));