2009-01-29 47 views
12

我的用例是這樣的,我想調用一個web服務,如果我在一個需要身份驗證的代理服務器後面我想只使用默認憑據...我如何確定(優雅地)是否需要代理服務器身份驗證在C#winforms應用程序

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials; 

否則我就簡單地撥打電話,這將是非常好的,以確定是否需要身份驗證了前面,而不是處理異常後我嘗試撥打電話。

想法?

+0

出於好奇,如果您只使用默認憑據,那麼即使在不需要時也一直應用這些憑據會有什麼缺點? – BFree 2009-01-29 03:53:23

+0

實際上,我還沒有嘗試過使用默認憑證,只使用特定憑證,雖然使用了相同的類(DefaultWebProxy),並且拋出了一個異常,但是很好的調用,我會在下班回家時嘗試使用默認憑證它拋出相同的異常,雖然) – 2009-01-29 04:15:36

回答

4

System.Net.WebProxy有一個屬性UseDefaultCredentials可能是你想要的(但我不得不承認這裏有點無知)。有關文件的鏈接是here

+0

我認爲這可能會工作,事實上是基本上與上述相同的事情。謝謝。 – 2009-01-29 06:06:46

13

只是在我第一次部署我的app之後,我意識到有些用戶在防火牆後面......開始測試它。而不是我只是做同樣的Proxy設置是否可能需要或不是「需要407身份驗證」做一個測試...

System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri); 
//HACK: add proxy 
IWebProxy proxy = WebRequest.GetSystemWebProxy(); 
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 
req.Proxy = proxy; 
req.PreAuthenticate = true; 
//HACK: end add proxy 
req.AllowAutoRedirect = true; 
req.MaximumAutomaticRedirections = 3; 
req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; DeepZoomPublisher.com)"; 
req.KeepAlive = true; 
req.Timeout = 3 * 1000; // 3 seconds 

我不知道是什麼的相對優勢/劣勢(試{}沒有代理優先,而不僅僅是使用上面的代碼),但是現在這個代碼在我的工作(認證代理)和在家(無)都可以工作。

+0

我不認爲這裏的PreAuthenticate標誌是特別需要的,這隻會導致請求在第一次請求到Web服務器後立即進行認證,如果憑據已設置 – 2013-04-29 06:34:28

0

如果您想爲您在IE的代理服務器設置,你也可以查看註冊表:檢查註冊表樹的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings分支 - 在那裏有很多選項和設置。最值得注意的是:ProxyEnable(DWORD,0 =無代理,1 =代理啓用)。

1

實際上,似乎這畢竟不是一個問題,以前我是設置像這樣的AUTH ...

WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080"); 
    proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>); 
    WebRequest.DefaultWebProxy = proxy; 

這將是罰款,當我是代理之後,但拋出一個錯誤當沒有代理時,當然我期望上面出現同樣的錯誤,因爲我仍然只是設置了相同的憑證,但是你知道他們對於假設事情的看法......事實上,在設置默認值時沒有任何錯誤信譽,都是甜蜜的。

0

我強烈建議您嘗試this answer以類似的問題(不是:不是接受的答案)。沒有代碼改變,只是你的app.config文件中的一行。

相關問題