我的问题来自我在公司网络上发现的问题。我正在使用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的代理。在内部,只要NetworkChange.NetworkAddressChanged,它就会获得一个新的WebProxy.GetDefaultProxy()。
我在应用程序启动时将其连接起来并且问题消失了。
WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy();
希望有人会告诉我有更好的方法来解决这个问题。我的具体问题是关于Application Store Style Apps。 (地铁应用程序)
System.Net.WebProxy.GetDefaultProxy()不可用,System.Net.HttpWebRequest.DefaultWebProxy在离线并返回后只返回相同的已解除代理。
如何在C#Windows应用商店应用中获取新IWebProxy对象的句柄?
答案 0 :(得分:2)
至少从.net 3开始,不推荐使用System.Net.WebProxy.GetDefaultProxy(),而是使用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
答案 1 :(得分:0)
您可以使用网络请求获取代理:
var req = WebRequest.Create(@"api/stat/stats/");
req.Proxy = WebRequest.GetSystemWebProxy();
req.Timeout = 10000;
req.Method = "GET";