我的问题源于我在企业网络中发现的一个问题。我正在使用Windows 8进行开发,因此我的IE10被设置为自动检测代理设置。
在我的C#应用程序中,我使用System.Net.Http.HttpClient。我发现,如果我离线、发出失败请求然后重新联网,整个进程的默认IWebProxy对象将变得无法使用。重要的是要发出一个失败的请求,否则就没有问题。以下是如何获取这个脆弱代理对象的示例。
在我的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实现的代理。内部只是在NetworkChange.NetworkAddressChanged时获取一个新的WebProxy.GetDefaultProxy()。
当应用程序启动时,我将其连接起来,问题就解决了。
WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy();
希望有人能告诉我更好的解决方法。我的具体问题是关于应用商店风格的应用程序(metro应用)。
System.Net.WebProxy.GetDefaultProxy()不可用,而System.Net.HttpWebRequest.DefaultWebProxy在离线后返回相同的无效代理。在C# Windows Store应用程序中,如何获取新的IWebProxy对象句柄?