我遇到了一个奇怪的情况。我有一个下载如下页面的方法:
public static bool DownloadPageContent(string url,
out string content,
ref int statusCode,
CookieContainer cookie = null,
int maxAttempt = 1,
Encoding encoding = null)
{
int i = 0;
using (var client = new CookieAwareWebClient())
{
if (encoding != null)
client.Encoding = encoding;
while (i < maxAttempt)
{
try
{
i++;
if (cookie != null)
client.CookieContainer = cookie;
client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
content = client.DownloadString(url);
statusCode = 200;
return true;
}
catch(WebException ex)
{
/* some error handling code*/
_logger.Log(LogLevel.Error, ex);
}
catch (Exception ex)
{
_logger.Log(LogLevel.Error, ex);
}
}
content = "";
return false;
}
这是StackTrace
,它发生在行content = client.DownloadString(url)
:
System.Net.WebException:无法连接到远程服务器---&gt; System.Net.Sockets.SocketException:试图访问a 套接字以其访问权限xxx.xxx.xxx:80禁止的方式] System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)+208ıxxxx.xxx.xxx:80 konum:System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress) konum:System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket&amp; socket,IPAddress&amp; 地址,ConnectSocketState状态,IAsyncResult asyncResult, 异常和放大器;例外) ---İçözeldurumyığınıizlemesininsonu --- konum:System.Net.WebClient.DownloadDataInternal(Uri地址,WebRequest和请求) konum:System.Net.WebClient.DownloadString(Uri地址) konum:System.Net.WebClient.DownloadString(String address) konum:Kokoshome_Product_Downloader.Helpers.SiteHelpers.DownloadPageContent(String url,String&amp;内容,Int32&amp; statusCode,CookieContainer cookie,Int32 maxAttempt,编码编码)
奇怪的是,如果我打开Fiddler2
并运行程序,它就会运行良好!这个代码曾经工作过,而且我已经使用Fiddler
一段时间了,据我记得我没有改变任何选项。但现在有些错误,我无法弄明白。那可能是什么问题?
注意:我的互联网连接没有其他问题。我可以在没有Fiddler
的情况下连接互联网。我的操作系统是Windows 8.1
。
更新
当我尝试连接MySQL
数据库和FTP
服务器时,我遇到了同样的异常。这也与Fiddler
无效。我做了一些研究,并在Windows Sockets Error Codes
WSAEACCES 10013
权限被拒绝。尝试以某种方式访问套接字 被访问权限禁止。一个例子是使用广播 没有使用广播权限设置的sendto的地址 setsockopt的(SO_BROADCAST)。 WSAEACCES的另一个可能原因 错误是调用绑定函数时(在Windows NT 4.0上使用 SP4及更高版本),另一个应用程序,服务或内核模式驱动程序 通过独占访问绑定到同一地址。这种独家访问 是SP4及更高版本的Windows NT 4.0的新功能,并且是 使用SO_EXCLUSIVEADDRUSE选项实现。
但我仍然不知道如何解决它。
答案 0 :(得分:2)
几乎在所有情况下,这都意味着您的防火墙阻止了您的程序访问网络。当您使用Fiddler时,请求会在前往Fiddler的途中绕过防火墙,然后绕过防火墙,因为您有防火墙豁免,允许Fiddler访问Internet。