2012-09-27 20 views
7

我的問題來自我在企業網絡上發現的問題。我正在開發Windows 8,所以在我的情況下IE10被設置爲自動檢測代理設置。如何在C#Windows Store應用程序中獲取新的默認WebProxy對象?

在我的C#應用​​程序中,我使用System.Net.Http.HttpClient。我發現,如果我離線,發出失敗的請求並重新聯機,整個過程的默認IWebProxy對象將變得無法使用。請求失敗很重要,否則就沒有問題了。下面是我如何獲得這個脆弱的代理對象句柄的例子。

var defaultHandler = new HttpClientHandler(); 
var fragileProxy = defaultHandler.Proxy; 
var httpClient = new HttpClient(defaultHandler); 

經過一些實驗,我發現我可以通過調用System.Net.WebProxy.GetDefaultProxy(得到工作的代理);

然後我實現了一個NetworkChangAwareProxy:IWebProxy。沒錯,代理我的IWebProxy。內部它只是去並獲得一個新的WebProxy.GetDefaultProxy()每當NetworkChange.NetworkAddressChanged。

我在應用程序啓動時連接它並且問題消失。

WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy(); 

希望有人會告訴我有一個更好的方法來解決這個問題。我的具體問題是關於應用程序商店樣式應用程序。 (metro apps)

System.Net.WebProxy.GetDefaultProxy()不可用,System.Net.HttpWebRequest.DefaultWebProxy在脫機並返回後僅返回相同的失效代理。

如何在C#Windows Store應用程序中獲取新的IWebProxy對象的句柄?

+0

你重複使用相同的WebRequest對象? –

回答

0

您可以使用web請求獲得代理:

var req = WebRequest.Create(@"api/stat/stats/"); 
req.Proxy = WebRequest.GetSystemWebProxy(); 
req.Timeout = 10000; 
req.Method = "GET"; 
相關問題