C# System.Net.WebException:基础连接已关闭:连接意外关闭

C# System.Net.WebException:基础连接已关闭:连接意外关闭,c#,asp.net,C#,Asp.net,我正在编写一个.NET应用程序,它应该将数据发布到另一个.NET应用程序。 我使用以下代码请求登录页面 WebProxy proxy = new WebProxy("http://proxy:80/", true); HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest; //proxy.Credentials = new NetworkCredential("myusername", "mypass

我正在编写一个.NET应用程序,它应该将数据发布到另一个.NET应用程序。 我使用以下代码请求登录页面

WebProxy proxy = new WebProxy("http://proxy:80/", true);
HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
//proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
// webRequest.Proxy = proxy;
webRequest.Proxy = WebRequest.DefaultWebProxy;

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
string responseData = responseReader.ReadToEnd();
但它在这方面失败了

StreamReader responseReader = new StreamReader
                                  (webRequest.GetResponse().GetResponseStream());
出现以下错误消息:

System.Net.WebException: The underlying connection was closed: The connection was 
                         closed unexpectedly.

不久前我遇到了同样的异常,我记得在某些情况下,这种情况是由于.NET中的错误造成的。您可以通过将请求的超时和ReadWriteTimeout设置为更高的值或将KeepAlive设置为false来解决此问题

不过,这只是一个解决办法,所以我建议您在假设任何事情之前,尝试找到实际的根本原因

我将尝试提供一些网络参考,同时,请看

如果您使用的是.NET 2.0或更高版本,您是否可以启用网络跟踪,并查看线路上实际发生的情况。通过这种方式,您可以获得有关此特定异常的更多信息

有关更多详细信息,请参阅以下链接,

似乎要解决可能出现的问题:

  • 您从未将创建的代理分配给HttpWebRequest

    WebProxy **proxy** = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    //proxy.Credentials = new NetworkCredential("myusername", "mypassword", "domain"); 
    // webRequest.Proxy = proxy;
    webRequest.Proxy = **WebRequest.DefaultWebProxy**;
    
    您应该这样分配它:

    WebProxy proxy = new WebProxy("http://proxy:80/", true);
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;
    webRequest.Proxy = proxy;
    
    (注意最后一行中的差异)

  • 您在代理服务器上使用端口80。确定是这样吗?许多代理使用端口8080


  • 这是解决方案

    在我的案例中,这解决了问题:

    System.Net.ServicePointManager.Expect100Continue = false;
    

    以上都没有。

    在我的情况下,我需要设置代理设置,以便在同一端口上不仅允许HTTP,还允许HTTPS,因为其中一个请求是通过HTTPS协议发送的。

    对我来说情况不同。查询花费的时间太长,因此连接超时。WCF中有五个超时 1.发送超时-默认为1分钟 2.接收超时-默认为1分钟 3.打开超时-默认值为1分钟 4.关闭超时-默认值为1分钟 5.非活动超时-默认值为10分钟

    我已经正确设置了发送和接收超时,但问题是由于不活动超时,因为服务器上的查询太长,WCF服务正在关闭通道,因此无法传回响应。
    如果您使用WCF从服务器获取响应,这需要很长时间才能运行,希望这对您有所帮助。

    我曾经遇到过这个问题。我的病毒防护是罪魁祸首。

    看来我们已经知道了一些事情。我现在得到一条错误消息,远程服务器返回了一个错误:(411)所需的长度。虽然当我设置应用程序挂起的lengthfeild时…我在尝试与嵌入式设备web服务通信时遇到了一个问题,这就是解决方案。我建议改为:
    request.ServicePoint.Expect100Continue=false问题似乎是服务器正在关闭连接-可能正在死亡。检查服务器(日志、eventwvr等)并粘贴服务器代码。或者,您可能无法连接到正确的框(代理设置等)。您返回的http状态是什么(如果我没记错的话,它在异常的响应中)?要开始跟踪问题,我建议您将调用包装在异常捕获代码中,并打印出完整的堆栈跟踪。此异常尤其难以跟踪。如果您想要任何合理的答案,请提供尽可能多的信息异常的堆栈跟踪只提供:at System.Net.HttpWebRequest.GetResponse()尝试从代码段中删除所有未使用的垃圾。我可能想知道为什么我的问题的答案是11年前的。无论如何,将我的代理更改为使用8080端口立即解决了这个问题。我不知道为什么。这些单元测试在80端口下运行多年,但突然停止工作。11年过去了,谢谢你的提示!哈哈。总是乐于助人我,11年前;)
    
    System.Net.ServicePointManager.Expect100Continue = false;