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 ストア アプリで新しい 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.aspx およびhttp://msdn.microsoft.com/en-us/library/system.net.webrequest.getsystemwebproxyを参照してください。 .aspx

于 2012-11-19T16:54:38.050 に答える
0

Web リクエストを使用してプロキシを取得できます。

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