我正在编写一个.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.
答案 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)
似乎可能出现问题:
您永远不会将您创建的代理分配给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。
答案 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;
这是解决方案