2013-03-26 5 views
3

В настоящее время в одном из наших приложений я вижу большие задержки при выполнении первого HTTP WebRecest. По нашим журналам есть отставание в 30-60 секунд. Он блокирует на HttpWebRequest.BeginGetResponseHttpWebRequest.BeginGetResponse блокирует 30-60 секунд

Вот цитата из MSDN:

Метод BeginGetRequestStream требует некоторых синхронных задач настройки для завершения (разрешение DNS, прокси обнаружения и TCP сокет подключения, например,) до того, как этот метод станет асинхронным. Как результат , этот метод никогда не следует вызывать в потоке пользовательского интерфейса (UI) , потому что это может занять некоторое время, как правило, несколько секунд. В в некоторых средах, где сценарии веб-прокси не настроены , это может занять 60 секунд или более. Значение по умолчанию для атрибута загрузки в элементе файла конфигурации составляет за одну минуту, на которую приходится большая часть потенциальной задержки времени.

Я понимаю, что есть разрешение DNS, определение прокси и другие необходимые вещи. Но 30-60 секунд слишком длинны. Когда я ввожу тот же URL-адрес в любой браузер, я сразу же получаю страницу. Когда я разрешаю руководство по DNS, также нет задержки. Все параллельные запросы к тому же URI не блокируются. Когда я перезапускаю приложение, первый запрос блокируется снова за мин. 30 секунд.

Это известная проблема? Есть ли ошибка? Мы видим это на разных машинах, поэтому я не думаю, что моя машина для разработчиков - проблема.

Вот несколько примеров кода:

private void TestWebRequest() 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://matrix.ag-software.de/http-bind"); 
    request.ContentType = "text/xml; charset=utf-8"; 
    request.Method = "POST"; 
    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);    
} 

private void GetRequestStreamCallback(IAsyncResult result) 
{ 
    // 
} 

обновление: Это должно быть проблема с моим Windows 7 Установка. Я тестировал еще 2 машины и не могу вызвать такую ​​же проблему. Я видел лог-файлы от клиентов с точно такими же проблемами. Кажется, что это происходит в некоторых условиях на некоторых машинах.

+0

Это таргетинг на интранет или интернет-адрес? – Justin

+0

Я добавил несколько примеров кода. У меня проблема с внутренней и внешней. Возможно, это единственная проблема с этой конкретной реализацией сервера и может быть решена с помощью некоторых специальных настроек. На MONO у нас нет этой проблемы. В настоящее время я отлаживаю полную платформу .NET 3.5.Проблема не существует во всех версиях рамок. Например, Silverlight работает нормально, но использует стек браузера. – Alex

+0

Вы пробовали, если против каких-либо других сайтов, таких как google или stackoverflow? Существует ли это тогда? – Justin

ответ

0
+0

yes Я видел эти потоки раньше. Но не уверен, что это точно такая же проблема. Я не получаю исключения, перечисленные в эти потоки. И эти потоки довольно старые, если это проблема .NET, она должна быть исправлена ​​уже в последних версиях, таких как 3.5, 4 и 4.5. – Alex

+0

@Pete: Вы должны дать краткое описание того, что делается в ссылках, как ссылка-о nly ответы не допускаются. – jgauffin

1

Я только что произошел через то же самое.

Я выяснил, что брандмауэр Microsoft Client генерировал его. Я использовал его, чтобы избежать навигации по доверенности моей компании. Моим первым решением было установить жесткий диск request.Proxy. Чтобы избежать этой уродливой строки кода, я в конечном итоге отключил брандмауэр Microsoft Client и установил прокси-сервер в настройках Интернета.

Надеюсь, это поможет.

Как сказал @EricLaw, регистрация System.Net может помочь. Вот ссылка на MSDN: Enable System.Net logging.

+0

Медленное обнаружение прокси-серверов часто является причиной отложенных запросов. Включение ведения журнала System.NET поможет выявить, является ли это причиной конкретной проблемы производительности .NET WebRequest. – EricLaw

+0

Спасибо @ EricLaw. Я посмотрю на это, потому что у меня было всего несколько URI, которые так долго. – Diego

Смежные вопросы