C# 使用HttpWebResponse::GetResponseStream方法时接收不完整的数据

C# 使用HttpWebResponse::GetResponseStream方法时接收不完整的数据,c#,.net,C#,.net,HttpWebResponse::GetResponseStream()是否保证获取HTTP响应中包含的所有数据?或者我需要创建某种循环并等待以确保所有数据都是从连接到的服务器发送的吗?下面的代码成功捕获了大约50%的响应 HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://JohnDoeServerSite.com"); req.Method = "POST"; req.ContentType =

HttpWebResponse::GetResponseStream()是否保证获取HTTP响应中包含的所有数据?或者我需要创建某种循环并等待以确保所有数据都是从连接到的服务器发送的吗?下面的代码成功捕获了大约50%的响应

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://JohnDoeServerSite.com");
    req.Method = "POST";
    req.ContentType = @"text/xml; charset=utf-8";
    req.Host = "http://JohnDoeServerSite.com";
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)";
    using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))
    {
        sw.Write(xml);
    }
    string result;
    using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
    using (Stream st = res.GetResponseStream())
    {
        Thread.Sleep(10000);  //  Added to see if additional data would be sent (perhaps?)
        using (StreamReader sr = new StreamReader(st, Encoding.UTF8))
        {
            st.Flush();   
            result = sr.ReadToEnd();
        }
    }

进一步研究后,发现服务器并没有发送全部数据。迈克尔·尹(Michael Yoon)说的一切都应该归还似乎是对的。

理论上,它应该归还一切。如果web服务器的响应有什么奇怪的地方,可能会将其抛出,但这是不可能的。在您的代码中,我将删除Thread.Sleep和st.Flush(),因为它们是不必要的,甚至是不好的(在Thread.Sleep的情况下)
Thread.Sleep(…)
不是必需的,流将根据传输确认适当的
EOF
(文件结束)标记。如果网络上有更多的数据需要读取,那么读取的流将被阻塞。当你说“成功地获得响应”时,你是什么意思?小溪是空的吗?您应该检查
res.StatusCode
,可能服务器正在响应404、500或其他错误?
GetResponseStream
不返回任何数据。它返回一个
。可以读取
,以获取所有数据。没有隐藏的数据,也不需要从
流中“哄骗”数据。