App正在与REST服务进行通信。 Fiddler在应用程序响应中显示完整的良好XML响应 该应用程序在法属波利尼西亚和新西兰的相同副本工作,所以主要的嫌疑人似乎编码,但我们已经检查出来并空手而归。
查看流阅读器中的输出字符串(UTF8编码),您可以看到它被截断的位置。它是一个无害的xml片段。 XmlDocument对象的下游错误声称在将字符串加载到XML Document对象时遇到了意外的文件结尾,这是公平的。
截断点为
NS6:STS-KRN→1&安培;
是其中的一部分 NS6:STS-KRN→1< / NS6:STS-KRN><
响应字符串或我们应该检查的其他参数是否有任何大小限制。 我完全没有想法。代码按要求提供。
Stream streamResponse = response.GetResponseStream();
StringBuilder sb = new StringBuilder();
Encoding encode = Encoding.GetEncoding("utf-8");
if (streamResponse != null)
{
StreamReader readStream = new StreamReader(streamResponse, encode);
while (readStream.Peek() >= 0)
{
sb.Append((char)readStream.Read());
}
streamResponse.Close();
}
答案 0 :(得分:1)
更简单的方法是:
string responseString;
using (StreamReader readStream = new StreamReader(streamResponse, encode))
{
responseString = readStream.ReadToEnd();
}
对于调试,我建议将该响应流写入文件,以便您可以准确地看到读取的内容。此外,您可以考虑使用单字节编码(如ISO-8859-1)来读取数据并写入文件。
您应该检查response.ContentType
属性以查看是否使用了其他文本编码。
答案 1 :(得分:1)
您需要使用using
块:
using (WebResponse response = request.GetResponse())
{
using (Stream streamResponse = response.GetResponseStream())
{
StringBuilder sb = new StringBuilder();
if (streamResponse != null)
{
using (StreamReader readStream = new StreamReader(streamResponse, Encoding.UTF8))
{
sb.Append(readStream.ReadToEnd());
}
}
}
}
这将确保您的WebResponse
,Stream
和StreamReader
全部清除,无论是否有例外。
让我思考using
块的原因是:
IDisposable
的对象不在using
块结论:尝试实现using
块以查看是否处理对象将导致操作完成。
我添加了这个,因为推理实际上非常普遍。同样的推理适用于“我的邮件消息不会被发送两分钟”。在这种情况下,未完成的操作是“发送电子邮件”,实例是SmtpClient
和MailMessage
个对象。