2013-05-14 13 views
3

我有以下代碼的WebRequest GetResponse的堅持與默認代理

private bool IsOnline() 
    { 
     try 
     { 
      var wr = WebRequest.CreateHttp("http://www.google.com"); 
      wr.KeepAlive = false; 
      wr.Credentials = CredentialCache.DefaultCredentials; 
      using (wr.GetResponse()) 
      { 
       return true; 
      } 
     } 
     catch 
     { 
      return false; 
     } 
    } 

當我執行它,它仍然停留在GetResponse的永遠在線。

感謝回覆,我們發現問題出現在默認代理中。 事實上,如果你建造一個新的代理通過以下方式它的工作原理

 var registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", false); 
     var proxy = (string)registry.GetValue("ProxyServer"); 
     var isProxyEnabled = (int)registry.GetValue("ProxyEnable"); 

     if (isProxyEnabled > 0) 
     { 
      wr.Proxy = new WebProxy(proxy, true, null, System.Net.CredentialCache.DefaultNetworkCredentials); 
     } 

的問題是,從註冊表中手動設置代理閱讀此解決辦法代碼。如果用戶選擇「自動檢測設置」,則不起作用。

這樣: - 如何可以發現在這種情況下,代理地址? - 爲什麼默認代理不起作用?

+0

它會卡住第一次嘗試或第n次嘗試? – 2013-05-14 12:01:07

+0

如果它與Fiddler一起工作,它可能是一個代理問題......你可以從IE訪問google.com嗎? – 2013-05-14 12:01:56

+0

@DanielMošmondor第一次嘗試 – Roberto 2013-05-14 12:02:44

回答

0

看來這是webproxy自動檢測中的一個錯誤。

通過我找到了一個更優雅的解決辦法,讓我用我的初始代碼的方式。 所以閱讀thisthis問題後,我已經把這個代碼在app.config文件

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true" > 
     <proxy autoDetect="True" scriptLocation="http://wpad/wpad.dat"/> 
    </defaultProxy> 
</system.net> 

這使得程序跳過Internet選項設置和去staight檢查WPAD(類似於Firefox沒有)