Тайм-аут операции HttpWebRequest с CookieContainer - PullRequest
1 голос
/ 27 ноября 2011

Когда я использую HttpWebRequest и добавляю это:

CookieContainer container = new CookieContainer();
request.CookieContainer = container;

будет выдано исключение Operation Timeout в

HttpWebResponse response = request.GetResponse() as HttpWebResponse;

Если я не добавлю CookieContainer, программа запустится без ошибок. Почему это не работает?

Ответы [ 3 ]

4 голосов
/ 30 марта 2012

У меня тоже была эта проблема.когда я запрашиваю веб-страницу и помещаю запрос HttpWebRequest в функцию Page_Load и добавляю cookie с текущей страницы в CookieContainer, но он просто зависает там до истечения времени ожидания

, проблема заключается в том, что я впервые запрашиваю asp веб-страницыdot net просто заблокировал сеанс для защиты одновременной записи сеанса из другого места.когда я пытаюсь вызвать HttpWebRequest, чтобы запросить тот же домен, тот же сеанс, он будет заблокирован до окончания первой страницы, пока не будет заблокирована сессия. Между тем, первая страница ожидает завершения HttpWebRequest, и два запроса просто ждут друг друга, пока не истечет время ожидания.

хорошая новость в том, что я нашел способ решить эту проблему, я просто установил EnableSessionState = "ReadOnly" на первой странице, это делает первую страницу, которую я вызываю, не блокировать сеанс.надеюсь, это кому-нибудь поможет.

0 голосов
/ 27 ноября 2011

Ситуация 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 отключен. Поэтому, пожалуйста, будьте уверены в этом факте. :) надеюсь, что это сработает.

0 голосов
/ 27 ноября 2011

Как вы создаете объект запроса ??

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
            request.CookieContainer = new CookieContainer();
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();

CookieContainer

Попробуйте установить myWebRequest.Timeout = xxx

  • Если вы выполняете несколько одновременных запросов, попробуйте установить предел подключений

System.Net.ServicePointManager.DefaultConnectionLimit
ServicePoint.ConnectionLimit

Проверьте эти ссылки для получения дополнительной информации:

HttpWebRequest "истекло время ожидания операции"
Мне нужна помощь в настройке таймаута .NET HttpWebRequest
Настройка таймаута подключения HttpWebRequest в C #

. Существует множество причин, по которым GetResponse () может зависнуть.Некоторые из них:

1) Вы достигли лимита подключения на клиенте (2 conns на сервер http / 1.1, 4 подключения на сервер http / 1.0 или пользовательский лимит, установленный в ServicePoint), и соединение не установленобесплатно отправить запрос на сервер.Другими словами, у вас может быть 2 невыполненных запроса (например, к серверу 1.1), выполнение которых занимает более 2 минут, а затем выполните еще один GetResponse () для того же сервера.Время ожидания последней функции getresponse () может быть превышено.

2) Вы не закрыли поток ответов более раннего httpwebresponse.Таким образом, даже если соединение бесплатное, запрос отправляться не будет.

3) Сервер слишком долго отправляет ответ.

...