2010-05-21 19 views
2

我正在創建一個應用程序(.NET 2.0),該應用程序使用WebClient將連接(下載數據等)連接到http Web服務。 我現在添加一個表單來處理允許代理信息存儲或設置爲使用默認值。我對某些事情有點困惑。WebProxy和IWebProxy相對於WebClient有什麼關係?

首先,在WebProxy或IWebProxy中可用的某些方法&屬性不在兩者中。在設置WebClient在被調用時的方式方面有什麼不同?

其次,如果我在其他地方使用WebProxy或IWebProxy類來設置代理信息,我必須告訴WebClient使用代理信息嗎?還是它會自動繼承?

第三,當給用戶使用默認代理(不管是在IE中設置的)和使用默認憑證(我假設無論在IE中設置什麼)的選項時,這兩個是互斥的嗎?或者你也只使用默認憑證,當你也使用默認代理?

這讓我看到WebProxy和IWebProxy之間的全部區別。 WebRequest.DefaultProxy是一個IWebPRoxy類 但是 UseDefaultCredentials不是IWebProxy類中的一個方法,而是它只在WebProxy上,反過來,如果它們是兩個不同的類,那麼如何將代理設置爲WebRequest.DefautlProxy?

這是我目前的讀取用戶的存儲形式設置方法 - 但我不知道這是正確的,沒有足夠的,矯枉過正,或只是錯誤的,因爲WebProxy和IWebProxy的搭配:

private WebProxy _proxyInfo = new WebProxy(); 
    private WebProxy SetProxyInfo() 
    { 
     if (UseProxy) 
     { 
      if (UseIEProxy) 
      { 
       // is doing this enough to set this as default for WebClient? 
       IWebProxy iProxy = WebRequest.DefaultWebProxy; 
       if (UseIEProxyCredentials) 
       { 
        _proxyInfo.UseDefaultCredentials = true; 
       } 
       else 
       { 
        // is doing this enough to set this as default credentials for WebClient? 
        WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword); 
       } 
      } 
      else 
      { 
       // is doing this enough to set this as default for WebClient? 
       WebRequest.DefaultWebProxy = new WebProxy(ProxyAddress, ParseLib.StringToInt(ProxyPort)); 
       if (UseIEProxyCredentials) 
       { 
        _proxyInfo.UseDefaultCredentials = true; 
       } 
       else 
       { 
        WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword); 
       } 
      } 
     } 
     // Do I need to WebClient to absorb this returned proxy info if I didn't set or use defaults? 
     return _proxyInfo; 
    } 

是否有任何理由不只是取消存儲應用程序特定的代理信息,並且只允許應用程序使用默認代理信息&憑證登錄的用戶?如果使用HTTP,這會不夠嗎?

第2部分問題:
如何測試WebClient實例是否使用代理信息?

回答

1

IWebProxy是一個接口,WebProxy實現了該接口。所以,WebProxy可以有更多的方法/屬性不在IWebProxy上。

按照WebClient page on MSDN ...

備註

的代理屬性標識與代表此 WebClient的對象的遠程服務器通信 的 IWebProxy實例。代理設置爲 系統使用配置文件 和Internet Explorer本地區域 網絡設置。若要指定不應使用代理 ,請將代理 屬性設置爲由GetEmptyWebProxy 方法返回的代理實例 。

有關自動代理 檢測的信息,請參閱自動代理 檢測。

因此,如果您沒有明確指定webproxy,應該可以。它應該使用IE正在使用的那個(如果有的話)。