【问题标题】:StreamReader.ReadToEnd() not returning all contentsStreamReader.ReadToEnd() 不返回所有内容
【发布时间】:2018-04-04 13:26:49
【问题描述】:

我正在使用一个返回 XML 的外部 API。当存在内部服务器错误时,此 API 返回非 XML 值,以获取我使用 ReadToEnd 的值。我在生产中遇到了这个有趣的错误......基本上有时返回的 XML 值没有完整返回,这导致 xmlDocument.LoadXml 触发异常。

try {
    using (var response = (HttpWebResponse)httpWebRequest.GetResponse())
    using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
    {
        // First get value as string and then convert it to XML.
        // NOTE: This is implemented in this way as a non-XML value may be returned           
        responseString = reader.ReadToEnd();
        var xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(responseString);
        return xmlDocument;
    }
} (XmlException xmlEx) {
    // Handle Exception as String is not XML....
}   

返回消息示例

<tournamentinfo version="1.0">
<funtables>12</funtables>
<tables>135</tables
<activetables>63</activetables>
<funplayers>0</funplayers>
<realplayers>227</realplayers>
<onlineplayers>731</onlineplayers>
</tourna

基本上结束节点应该是&lt;/tournamentinfo&gt;

【问题讨论】:

  • 这肯定是您要处理的 API 的创建者的问题吗?
  • 如果此 api 的作者在出现错误的情况下返回状态码为 200 的响应(如您的代码所示) - 我不会依赖他们做所有正确的事情(例如总是返回完整的 xml 响应) .
  • 您期望的实际 XML 文档有多大?
  • 在我的机器上,整个 XML 值被返回,没有任何截断值。返回的 XML 大约为 1MB
  • 这可能是你的问题 - 看看这个问题:stackoverflow.com/questions/38334720/…

标签: c# .net stream


【解决方案1】:

基本上,出现此问题是因为在提供者更新其 RSS 提要时,正在执行对提供者 API 的调用。

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多