我正在尝试从网页上发出网页请求,而我在生产服务器上遇到了问题。
Web应用程序是一个内部网站点,在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
我尝试过的所有网址都不会出现此错误,我可以从www.yahoo.com获取回复,但不会从www.google.com获取回复。
在我的电脑(Windows 7)上,一切正常,我可以使用相同的身份验证模式(使用域控制器)从任何URL获得响应,问题只发生在生产服务器上(Windows Server 2008)。
任何人都有意识形态?
答案 0 :(得分:5)
我遇到了这样的问题,事实证明我们是代理人的背后,可能是问题,我知道这是一个很长的镜头,但它可能会起作用
我从浏览器中复制了代理数据,只需用代理替换代理字符串(不要忘记端口)。
WebProxy webproxy = new WebProxy("http://192.168.4.8:8080");
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Proxy = webproxy;
答案 1 :(得分:1)
服务器可能由于身份验证以外的其他原因主动拒绝连接。这些其他大多数原因都与请求的形式和接收请求的端口有关。不匹配或关闭的端口将导致拒绝连接。但是,在这种情况下,在Google的前门发出的HttpRequest应该会得到回应。我猜想Google可能会检查您的HttpRequest中包含的WebAgent标头信息;您的应用程序看起来像一个.NET应用程序,并将其呈现给Google。我想谷歌已采取措施减少来自简单的.NET应用程序的DOS攻击,例如你的无限循环GetResponse()调用。您可能需要通过指定自定义WebAgent标题字符串来模拟其他浏览器,例如IE 8。