8

我的问题来自我在公司网络上发现的一个问题。我正在使用 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();

希望有人会告诉我有更好的方法来解决这个问题。我的具体问题是关于应用商店风格的应用程序。(地铁应用)

System.Net.WebProxy.GetDefaultProxy() 不可用,并且 System.Net.HttpWebRequest.DefaultWebProxy 只是在离线和回来后返回相同的失效代理。

如何在 C# Windows Store 应用程序中获取新 IWebProxy 对象的句柄?

4

2 回答 2

2

System.Net.WebProxy.GetDefaultProxy() 至少从 .net 3 开始已被弃用,请改用 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

于 2012-11-19T16:54:38.050 回答
0

您可以使用网络请求来获取代理:

var req = WebRequest.Create(@"api/stat/stats/");
req.Proxy = WebRequest.GetSystemWebProxy();
req.Timeout = 10000;
req.Method = "GET";
于 2014-02-12T19:45:04.197 回答