Невозможно установить соединение, потому что целевая машина активно отказалась от него - PullRequest
3 голосов
/ 23 октября 2010

Я пытаюсь выполнить веб-запрос с веб-страницы, и у меня возникла проблема на рабочем сервере.

Веб-приложение представляет собой веб-сайт интрасети с такой конфигурацией на web.config:

<authentication mode="Windows" />

Я использую его для аутентификации пользователя домена.

Теперь я пытаюсь загрузить веб-страницу для разбора некоторой информации, я использовал код ниже, ошибка появляется во второй строке:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Сообщение об ошибке:

Невозможно установить соединение, поскольку целевая машина активно отказалась от него. 64.233.163.104:80.

Трассировка стека:

[SocketException (0x274d): No connection could be made because the target machine actively refused it 64.233.163.104:80]
   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +269
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) +649

[WebException: Unable to connect to the remote server]
   System.Net.HttpWebRequest.GetResponse() +1126
   Fumagalli.Insight.Admin.Teste.Page_Load(Object sender, EventArgs e) +606
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

Эта ошибка возникает не на всех URL-адресах, которые я пробовал. Я могу получить ответ от www.yahoo.com, но не от www.google.com, например.

На моем ПК (Windows 7) все всегда работает, я могу получить ответ с любого URL, используя тот же режим аутентификации (с контроллером домена), проблема возникает только на рабочем сервере (Windows Server 2008).

У кого-нибудь есть идея?

Ответы [ 2 ]

5 голосов
/ 23 октября 2010

У меня была такая проблема, оказалось, что мы за прокси, это может быть проблемой, я знаю, что это далеко, но это может сработать

Я скопировал данные прокси из моего браузера, просто замените строку прокси своим прокси (не забудьте порт).

WebProxy webproxy = new WebProxy("http://192.168.4.8:8080");
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Proxy = webproxy;
1 голос
/ 23 октября 2010

Сервер может активно отклонить соединение по другим причинам, кроме аутентификации. Большинство из этих других причин связаны с формой запроса и портом, по которому он получен. Несоответствие или закрытый порт приведет к отклонению соединения. В этом случае, однако, HttpRequest, сделанный на входной двери Google, должен получить ответ. Я предполагаю, что Google может проверять информацию заголовка WebAgent, включенную в ваш запрос HttpRequest; Ваше приложение выглядит как приложение .NET и представляет себя Google как таковой. Я предполагаю, что Google предпринял шаги, чтобы уменьшить атаки DOS от простых приложений .NET, таких как ваше, с бесконечным циклом вызова GetResponse (). Возможно, вам придется выдать себя за другой браузер, например IE 8, указав пользовательскую строку заголовка WebAgent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...