我正在創建一個應用程序(.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實例是否使用代理信息?