如果我不打开Fiddler,为什么我在下载页面时会出现SocketException?

时间:2015-02-28 09:02:30

标签: c# fiddler socketexception

我遇到了一个奇怪的情况。我有一个下载如下页面的方法:

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选项实现。

但我仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:2)

几乎在所有情况下,这都意味着您的防火墙阻止了您的程序访问网络。当您使用Fiddler时,请求会在前往Fiddler的途中绕过防火墙,然后绕过防火墙,因为您有防火墙豁免,允许Fiddler访问Internet。