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