2010-11-23 20 views
8

私はプロキシなしで動作するプログラムと、認証付きプロキシを自動的に作成しています。 WCFサービスを呼び出す必要があります。この例では、インスタンスはclientと呼ばれています。また、資格情報を要求する自己記述クラス(proxyHelper)を使用します。デフォルトのWebプロキシからURIを取得

BasicHttpBinding connection = client.Endpoint.Binding as BasicHttpBinding;<br/> 
connection.ProxyAddress = _???_<br/> 
connection.UseDefaultWebProxy = false;<br/> 
connection.BypassProxyOnLocal = false;<br/> 
connection.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;<br/> 
client.ClientCredentials.UserName.UserName = proxyHelper.Username; 
client.ClientCredentials.UserName.Password = proxyHelper.Password; 

ProxyAddressの取得に問題が発生しました。実際に定義されたプロキシを取得するのにHttpWebRequest.GetSystemWebProxy()を使用すると、デバッグモードで表示されます正しいプロキシアドレスですが、非公開のプロパティです。 UseDefaultWebProxyをtrueに設定しても機能しません。また、プロキシアドレスをハードコードして、UseDefaultWebProxyをfalseに設定しても正常に動作します。だから...どのように私はデフォルトのWebプロキシのアドレスを収集することができますか?

答えて

15

プロキシにはGetProxyというメソッドがあり、これを使用してプロキシのUriを取得できます。

はここでMSDNからの説明の抜粋です:

GetProxy方法は、WebRequestクラスのインスタンスが アクセスインターネットリソースに使用するURI 返します。

GetProxyは、 IsBypassedメソッドを使用して、宛先をBypassListの の内容と比較します。 IsBypassed がtrueを返した場合、GetProxyは を返し、WebRequest インスタンスはプロキシ サーバーを使用しません。

宛先がBypassListにない場合は、 WebRequestインスタンスはプロキシ サーバーを使用し、Addressプロパティは が返されます。

次のコードを使用して、プロキシの詳細を取得できます。 GetProxyメソッドに渡すUriは重要です。指定されたUriに対してプロキシがバイパスされていない場合にのみ、プロキシ認証情報を返します。

var proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); 

//gets the proxy uri, will only work if the request needs to go via the proxy 
//(i.e. the requested url isn't in the bypass list, etc) 
Uri proxyUri = proxy.GetProxy(new Uri("http://www.google.com")); 

proxyUri.Host.Dump();  // 10.1.100.112 
proxyUri.AbsoluteUri.Dump(); // http://10.1.100.112:8080/ 
+3

完璧、ありがとうございます!私はちょうどラインを追加しました:Uri proxyAddress = proxy.GetProxy(client.Endpoint.Address.Uri); – Jan

+0

あなたは大歓迎です:-) –

+0

私は '.Dump()'メソッドを利用できません。そのライブラリは何ですか? – codeMonkey

関連する問題