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

时间:2009-09-22 11:19:35

标签: 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", "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.

9 个答案:

答案 0 :(得分:6)

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

有关详细信息,请参阅以下链接: http://msdn.microsoft.com/en-us/library/hyb3xww8%28VS.80%29.aspx

答案 1 :(得分:5)

就我而言,这解决了这个问题:

                System.Net.ServicePointManager.Expect100Continue = false;

以上都不是。

答案 2 :(得分:1)

前一段时间我遇到了同样的异常,我记得由于.NET中的错误,在某些情况下会发生 。您可以通过将请求的Timeout和ReadWriteTimeout设置为更高的值来解决此问题,或将KeepAlive设置为false。

这只是一种解决方法,所以我建议你在假设之前尝试找出实际的根本原因。

我会尝试提供一些网络参考,同时,看看 Big files uploading (WebException: The connection was closed unexpectedly)

答案 3 :(得分:1)

对使用 http 的 API 使用 https GET 时遇到了同样的错误。可能对某人有帮助。

答案 4 :(得分:0)

似乎可能出现问题:

  1. 您永远不会将您创建的代理分配给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;
    

    (注意最后一行的差异)。

  2. 您在代理上使用端口80。当然这是正确的?许多代理使用端口8080。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

这是解决方案