"Не удалось выполнить попытку подключения, потому что связанная сторона не ответила должным образом через какое-то время", используя WebClient

Я использую следующий код, который работает на локальном компьютере, но когда я попробовал тот же код на сервере, он выдает мне ошибку

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

Вот мой код:

WebClient client = new WebClient();
// Add a user agent header in case the 
// requested URI contains a query.
//client.Headers.Add ("ID", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
data.Close();
reader.Close();

Я получаю сообщение об ошибке

Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);

Это связано с настройкой брандмауэра?

Ответы

Ответ 1

У меня была аналогичная проблема, и мне пришлось преобразовать URL-адрес из строки в объект Uri, используя:

Uri myUri = new Uri(URLInStringFormat, UriKind.Absolute);

(URLInStringFormat - ваш URL-адрес) Попробуйте подключиться с помощью Uri вместо строки:

WebClient client = new WebClient();
client.OpenRead(myUri);

Ответ 3

Является ли URL-адрес этого кода доступным в браузере?

http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID

Первое, что вам нужно проверить, это правильный URL-адрес. Затем проверьте в браузере, просматривается ли он. затем используйте инструмент Fiddler, чтобы проверить, что происходит по сети. Возможно, URL-адрес, который вызывается через код, ошибочно экранирован.

Затем проверьте связанные с брандмауэром проблемы.

Ответ 4

  • Первая возможность. Зашифрованная строка в связанном файле Web.config должна быть такой же, как и в строке подключения (которая показана выше) А также, когда вы меняете что-либо в "Редакторе реестра" или regedit.exe (как написано в "Запустить" ), после любых изменений закройте редактор реестра и reset ваши информационные службы Интернета, набрав IISRESET при запуске. И затем войдите в свою среду.

  • Введите Service.msc при запуске и проверке:

    • Запускается состояние государственных служб ASP.NET. Если нет, щелкните по нему правой кнопкой мыши по свойствам, измените его тип запуска на автоматический.

    • Служба отчетов Iris ReportManager этого конкретного банка указана как "Запущена" или "Нет". Если его запуск, он отобразит "IRIS REPORT MANAGER SERVICE", как показано в списке. Если нет, то запустите его, нажав IRIS.REPORTMANAGER.EXE

    Затем снова reset IIS

Ответ 5

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

В моей службе я звонил, был вызов другой веб-службы. Как goof, я забыл убедиться, что настройки DNS были правильными, когда я опубликовал веб-сервис, поэтому мой веб-сервис при публикации пытался вызвать из api.myproductionserver.local, а не api.myproductionserver.com. Это был основной веб-сервис, который вызывал таймаут.

В любом случае, я думал, что пройду это.

Ответ 6

У меня была эта проблема. Код работал нормально при запуске локально, но не на сервере. Использование psPing (https://technet.microsoft.com/en-us/sysinternals/psping.aspx) Я понял, что порт приложений ничего не возвращает. Оказалось, что это проблема межсетевого экрана. Я не включил порт своих приложений в брандмауэре Windows.

Администрирование > Брандмауэр Windows с расширенной безопасностью добавлен порт моих приложений в правила входящих и начал работать.

Как-то изменился номер порта приложения, поэтому потребовалось некоторое время, чтобы выяснить, что происходит, поэтому подумал, что я поделюсь этой возможностью, если это сэкономит кому-то еще время...

Ответ 7

Это может быть проблема с настройками прокси-сервера на сервере. Вы можете попробовать отключить настройку прокси-сервера,
 <defaultProxy enabled="false" />

Ответ 8

Я знаю, что это сообщение было опубликовано 5 лет назад, но у меня недавно была эта проблема. Это может быть вызвано ограничениями корпоративной сети. Поэтому мое решение - позволить WebClient пройти через прокси-сервер для совершения вызова. Вот код, который работал для меня. Надеюсь, поможет.

        using (WebClient client = new WebClient())
        {
            client.Encoding = Encoding.UTF8;
            WebProxy proxy = new WebProxy("your proxy host IP", port);
            client.Proxy = proxy;
            string sourceUrl = "xxxxxx";
            try
            {
                using (Stream stream = client.OpenRead(new Uri(noaaSourceUrl)))
                {
                    //......
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }

Ответ 9

Я знаю, это старый пост, но я столкнулся с точно такой же проблемой, и мне удалось использовать это, MALWAREBYTES программу MALWAREBYTES которая вызывала проблему.

Ответ 10

Добавление следующего блока кода в web.config решает мою проблему

 <system.net>
    <defaultProxy enabled="false" >
    </defaultProxy>
  </system.net>