Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTTPWebResponse响应字符串被截断_C#_Http - Fatal编程技术网

C# HTTPWebResponse响应字符串被截断

C# HTTPWebResponse响应字符串被截断,c#,http,C#,Http,应用程序正在与REST服务对话。 Fiddler显示完整良好的XML响应作为应用程序响应 该应用程序在法属波利尼西亚,在新西兰有一个完全相同的副本,所以主要嫌疑人似乎在编码,但我们已经检查过了,结果空手而归 查看来自流读取器的输出字符串(UTF8编码),您可以看到它被截断的位置。它位于一段无害的xml中。XmlDocument对象上的下游错误声称在将字符串加载到XML文档对象时遇到了意外的文件结尾,这是很公平的 截断点为 ns6:sts krn>1& 哪一个是 ns6:sts krn>1更简单的

应用程序正在与REST服务对话。 Fiddler显示完整良好的XML响应作为应用程序响应 该应用程序在法属波利尼西亚,在新西兰有一个完全相同的副本,所以主要嫌疑人似乎在编码,但我们已经检查过了,结果空手而归

查看来自流读取器的输出字符串(UTF8编码),您可以看到它被截断的位置。它位于一段无害的xml中。XmlDocument对象上的下游错误声称在将字符串加载到XML文档对象时遇到了意外的文件结尾,这是很公平的

截断点为
ns6:sts krn>1&

哪一个是
ns6:sts krn>1更简单的方法是:

string responseString;
using (StreamReader readStream = new StreamReader(streamResponse, encode))
{
    responseString = readStream.ReadToEnd();
}
对于调试,我建议将该响应流写入一个文件,以便您能够准确地看到读取的内容。此外,您可以考虑使用单字节编码(如ISO-859-1)来读取数据并写入文件。
您应该检查
response.ContentType
属性以查看是否使用了其他文本编码。

您需要使用
使用
块:

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
都得到清理,无论是否存在任何异常


促使我考虑使用
块的原因是:

  • 某些操作未完成
  • 没有隐藏异常的try/catch块,因此如果操作由于异常而未完成,我们将知道它
  • 存在实现
    IDisposable
    的对象,这些对象不在使用
    块的
  • 结论:尝试使用
    块实现
    ,查看处理对象是否会导致操作完成


    我加上这一点是因为推理实际上是相当普遍的。同样的道理也适用于“我的邮件在两分钟内无法发送”。在这种情况下,未完成的操作是“发送电子邮件”,实例是
    SmtpClient
    MailMessage
    对象。

    请用您的代码示例替换“感谢注释”/签名。很可能您读错了/使用了错误的编码。另外,在编辑文章时,也要确保将样本数据格式化为代码。查看Fiddler中的实际字节-我打赌编码不是Utf8和Utf8“这是ns6:sts krn>1的一部分,新西兰安装了相同的REST引擎和相同的应用程序。i、 这是一个封闭的系统。在NZ中,相同的测试事务生成相同的字符串,并且不会被代码截断。从响应头->xml version=“1.0”encoding=“utf-8”standalone=“yes”中,编码肯定是utf-8。FP中的Fiddler能够以XML模式查看响应,而不会出现问题。我们在FP的人进入了十六进制级别的fiddler响应,并确认该区域没有伪造字符。与我的代码相比,它是如此优雅。在明天FP可用之前,我不知道它是否起到了作用。为什么要解决这个问题(这是部分响应,不是挂起或根本没有响应)?添加了响应。ContentType它返回“text/plain”
    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());
                }
            }
        }
     }