如何在C#Windows应用商店应用中获取新的默认WebProxy对象?

时间:2012-09-27 21:21:27

标签: c# windows-8 windows-runtime webproxy

我的问题来自我在公司网络上发现的问题。我正在使用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对象的句柄?

2 个答案:

答案 0 :(得分:2)

至少从.net 3开始,不推荐使用System.Net.WebProxy.GetDefaultProxy(),而是使用System.Net.WebRequest.GetSystemWebProxy()。对于WinRT,他们删除了许多已弃用的方法。

参见http://msdn.microsoft.com/en-us/library/system.net.webproxy.getdefaultproxy.aspxhttp://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";