【问题标题】:Reading streamed content from HttpResponseMessage.Content从 HttpResponseMessage.Content 读取流式内容
【发布时间】:2012-03-10 00:24:42
【问题描述】:

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

我尝试过 ReadAsStream() 并尝试将流转换为 xml 文档,但我收到错误消息,提示缺少根节点。

我尝试过使用 WebClient,但我不知道在标题中放什么。

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

【问题讨论】:

    标签: c# .net wcf rest post


    【解决方案1】:

    可能会出现几个问题。

    读取 XML

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

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

    标题与正文

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

    您不需要使用 WebClient,因为 HTTP 库就是为这些东西而设计的。

    埃里克

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 2020-03-19
        相关资源
        最近更新 更多