2012-09-27 6 views
7

Moje pytanie pochodzi z problemu, który odkryłem w sieci firmowej. Pracuję z Windows 8, więc w moim przypadku IE10 jest ustawiony, aby automatycznie wykrywać ustawienia proxy.Jak mogę uzyskać nowy domyślny obiekt WebProxy w aplikacji C# Windows Store?

W mojej aplikacji C# używam System.Net.Http.HttpClient. Odkryłem, że domyślny obiekt IWebProxy dla całego mojego procesu staje się bezużyteczny, jeśli przejdę do trybu offline, złożyć nieudaną prośbę, a następnie powrócić do trybu online. Ważne jest złożenie wniosku, który nie powiedzie się, w przeciwnym razie nie będzie problemu. Oto przykład, w jaki sposób mogę uzyskać uchwyt tego kruchego obiektu proxy.

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

Po niektóre eksperymenty odkryłem, że mogę dostać proxy pracę dzwoniąc System.Net.WebProxy.GetDefaultProxy();

Następnie zaimplementowałem NetworkChangAwareProxy: IWebProxy. To prawda, proxy dla mojego IWebProxy. Wewnętrznie to po prostu idzie i dostaje nową WebProxy.GetDefaultProxy() za każdym razem, gdy NetworkChange.NetworkAddressChanged.

Podłączam go, gdy aplikacja się rozpocznie, a problem zniknie.

WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy(); 

Mam nadzieję, że ktoś mi powie, że jest lepszy sposób na rozwiązanie tego problemu. Moje konkretne pytanie dotyczy jednak aplikacji stylu sklepu aplikacji. (aplikacje metro)

System.Net.WebProxy.GetDefaultProxy() nie jest dostępny, a System.Net.HttpWebRequest.DefaultWebProxy zwraca ten sam nieistniejący serwer proxy po przejściu do trybu offline i powrocie.

Jak mogę uzyskać uchwyt do nowego obiektu IWebProxy w aplikacji C# Windows Store?

+0

Czy ponowne użycie tego samego obiektu WebRequest? –

Odpowiedz

0

Można użyć żądania internetowej, aby uzyskać Proxy:

var req = WebRequest.Create(@"api/stat/stats/"); 
req.Proxy = WebRequest.GetSystemWebProxy(); 
req.Timeout = 10000; 
req.Method = "GET"; 
Powiązane problemy