WebRequest.GetResponse зависает?

При написании ниже мой код блокируется в GetResponse. Почему?

        try
        {
            WebRequest myWebRequest = WebRequest.Create(strURL);
            WebResponse myWebResponse = myWebRequest.GetResponse();
            //more code here

person Community    schedule 06.09.2009    source источник
comment
Нет проблем при попытке сделать это на localhost, что такое URI?   -  person Ralf de Kleine    schedule 07.09.2009
comment
Недостаточно информации для диагностики. Блокируется ли он для вас независимо от того, какой URL-адрес вы используете, только для одного URL-адреса, происходит ли это постоянно, что происходит, когда вы пытаетесь получить доступ к URL-адресу из своего браузера?   -  person Pete OHanlon    schedule 07.09.2009


Ответы (1)


Обычно это происходит, если вы сделали несколько запросов к одному и тому же хосту и не удалили файл WebResponse.

Настройки управления соединениями по умолчанию разрешают только 2 (или, может быть, 4, я не помню) открытых соединений с одним и тем же хостом одновременно. Если вам действительно нужно это изменить, используйте <connectionManagement>< /a> элемент app.config, но обычно достаточно просто избавиться от WebResponse:

try
{
    WebRequest myWebRequest = WebRequest.Create(strURL);
    using (WebResponse myWebResponse = myWebRequest.GetResponse())
    {
        //more code here
person Jon Skeet    schedule 06.09.2009
comment
Я ‹3 Jon Skeet, который полностью решил проблему. Опять же, мне бы никогда не пришлось проверять утилизацию. Спасибо. - person ; 07.09.2009
comment
Это не помогло мне. Я попробовал подход с использованием, а также сделал Закрыть ответ внутри использования... но все равно получил ту же проблему. - person Ted; 04.12.2011
comment
@John Skeet, у меня есть сценарий, в котором я хочу возвращать большие данные в виде непрерывного потока. Если я поместил свой возврат myWebResponse.GetResponseStream(), не будет ли он Close() потоком до того, как будет возвращен весь поток?... если я не использую оператор using, не будет ли это также означать, что myWebResponse не будет правильно утилизирован?... Я знаю, что могу закрыть Stream в своей вызывающей функции, но не уверен, что происходит с объектом WebResponse - person user919426; 19.03.2015
comment
Решил! написал метод void, который имеет два параметра Stream, один входящий, а другой записываемый, в соответствии с соглашением для потоков. Красиво распоряжается! - person user919426; 19.03.2015