【发布时间】:2012-03-10 00:24:42
【问题描述】:
我有一个从 WCF 休息服务获取 httpresponsemessage 的客户端程序。我终生无法阅读该回复中的内容。它在内容中简单地说“流数据内容”,内容长度为0,内容类型为“”。
我尝试过 ReadAsStream() 并尝试将流转换为 xml 文档,但我收到错误消息,提示缺少根节点。
我尝试过使用 WebClient,但我不知道在标题中放什么。
有人知道如何处理我的响应消息内容中的“流数据内容”吗?
【问题讨论】:
我有一个从 WCF 休息服务获取 httpresponsemessage 的客户端程序。我终生无法阅读该回复中的内容。它在内容中简单地说“流数据内容”,内容长度为0,内容类型为“”。
我尝试过 ReadAsStream() 并尝试将流转换为 xml 文档,但我收到错误消息,提示缺少根节点。
我尝试过使用 WebClient,但我不知道在标题中放什么。
有人知道如何处理我的响应消息内容中的“流数据内容”吗?
【问题讨论】:
可能会出现几个问题。
读取 XML
我不知道 ReadAsStream 是否适用于 XmlDocument,但如果您可以使用 XDocument,它就会变得更容易。无论如何,如果 WCF 休息服务返回 XML 之外的其他内容,您将需要处理它。例如
var stream = response.Content.ReadAsStream();
using (var reader = XmlReader.Create(stream))
{
XDocument.Load(reader);
}
标题与正文
第二个问题可能与生成响应的方式有关。进行查询时,您可以指定是只读取标题,还是读取整个正文。鉴于内容长度为零,这意味着您正在返回一个未知大小的流。您需要以这种方式处理流 - 将其加载到可以正确使用流的东西中。
您不需要使用 WebClient,因为 HTTP 库就是为这些东西而设计的。
埃里克
【讨论】:
对于那些使用async 的人 - 请参阅下面的示例:
HttpResponseMessage response = await task.ExecuteAsync(new CancellationToken());
var yourObject = (YourObject)new XmlSerializer(typeof(YourObject)).Deserialize(new StreamReader( await response.Content.ReadAsStreamAsync()));
【讨论】: