Въпросът ми идва от проблем, който открих в корпоративната мрежа. Аз се развивам с Windows 8, така че в моя случай IE10 е настроен да открива автоматично прокси настройки.
В моето приложение 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();
Надявам се, че някой ще ми каже, че има по-добър начин да се реши този проблем. Моят конкретен въпрос обаче е за Apps за приложения за приложения за приложения. (метро приложения)
System.Net.WebProxy.GetDefaultProxy () не е налице и System.Net.HttpWebRequest.DefaultWebProxy току-що връща същия пропуск на прокси, след като е офлайн и се връща.
Как мога да получа дръжка на нов обект на IWebProxy в приложение C # Windows Store?
Отговори:
2 за отговор № 1System.Net.WebProxy.GetDefaultProxy () е отхвърлен поне от .net 3, вместо това използвайте System.Net.WebRequest.GetSystemWebProxy (). За WinRT те премахнаха много отхвърлени методи.
виждам http://msdn.microsoft.com/en-us/library/system.net.webproxy.getdefaultproxy.aspx И http://msdn.microsoft.com/en-us/library/system.net.webrequest.getsystemwebproxy.aspx
0 за отговор № 2
Можете да използвате заявката в мрежата, за да получите прокси сървъра:
var req = WebRequest.Create(@"api/stat/stats/");
req.Proxy = WebRequest.GetSystemWebProxy();
req.Timeout = 10000;
req.Method = "GET";