当我使用HttpWebRequest
并添加此内容时:
CookieContainer container = new CookieContainer();
request.CookieContainer = container;
它会在
中抛出操作超时异常HttpWebResponse response = request.GetResponse() as HttpWebResponse;
如果我不添加CookieContainer
程序运行没有错误。为什么这不起作用?
答案 0 :(得分:4)
我也有这个问题。当我请求一个网页时,我把HttpWebRequest放在Page_Load函数中,并将当前页面的cookie添加到CookieContainer中,但它只是挂在那里直到超时
问题是当我第一次请求网页asp dot net刚刚锁定会话以保护会话同时从不同的地方写入时。当我尝试调用HttpWebRequest来请求同一个域同一个Session时它将被阻塞,直到第一个页面结束它的会话锁定,同时,第一个页面正在等待HttpWebRequest结束它的工作 这两个请求只是等待对方直到超时。好消息是我找到了解决这个问题的方法,我只是在第一页设置了EnableSessionState =“ReadOnly”,它使我调用的第一页不会锁定会话。 希望这可以帮助别人。
答案 1 :(得分:0)
您是如何创建Request对象的?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
request.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
尝试设置myWebRequest.Timeout = xxx
System.Net.ServicePointManager.DefaultConnectionLimit
ServicePoint.ConnectionLimit
检查这些链接以获取更多信息:
HttpWebRequest "operation has timed out"
I need help setting .NET HttpWebRequest timeout
Adjusting HttpWebRequest Connection Timeout in C#
以下是GetResponse()可能挂起的原因。有些是:
1)您已达到客户端的连接限制(每个http / 1.1服务器2个conns,每个http / 1.0服务器4个连接,或ServicePoint上设置的自定义限制),并且没有任何连接可以自由发送请求服务器。换句话说,您可能有2个未完成的请求(例如:到1.1服务器),完成时间超过2分钟,然后向同一服务器发出另一个GetResponse()。最后一个getresponse()可能会超时。
2)您尚未关闭早期httpwebresponse的响应流。因此,即使连接是免费的,也不会发送请求。
3)服务器发送响应的时间太长。
答案 2 :(得分:0)
情况1:
可能有几个原因。在阅读了有关您的问题后,我写了以下几行,这段代码可以使用,
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://google.com");
req.Method = "GET";
req.Timeout = 282;
CookieContainer cont = new CookieContainer();
req.CookieContainer = cont;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
Console.Write(reader.ReadToEnd());
}
resp.Close();
req.Abort();
Console.ReadLine();
我写了req.Timeout = 282;
,因为我测试了几个值,而http://google.com确实需要282毫秒来自我的电脑才能做出响应。从较慢的互联网连接,此代码可能会返回超时。
请务必将时间设置得足够高。
情况2:
如果它意识到启用了cookie,则可能是您连接的服务器需要更长的时间。如果您未将任何内容设置为req.CookieContainer
,则会禁用Cookie。所以请确保这个事实。 :)希望它能奏效。