2

WebClient を使用して http Web サービスとの間で接続 (データのダウンロードなど) を行うアプリ (.NET 2.0) を作成しています。プロキシ情報を保存するか、デフォルトを使用するように設定できるようにするためのフォームを追加しています。私はいくつかのことについて少し混乱しています。

まず、WebProxy または IWebProxy のいずれかで使用できるメソッドとプロパティの一部は、両方にはありません。呼び出されたときに WebClient がどのようになるかを設定することに関して、ここでの違いは何ですか?

次に、WebProxy または IWebProxy クラスを使用して設定した場合、WebClient にプロキシ情報を使用するように指示する必要がありますか? それとも自動的に継承されますか?

第 3 に、ユーザーがデフォルトのプロキシ (IE で設定されているもの) を使用するオプションを提供し、デフォルトの資格情報 (IE で設定されているものは何でも) を使用する場合、これら 2 つは相互に排他的ですか? または、デフォルトのプロキシも使用している場合に、デフォルトの資格情報のみを使用しますか?

これにより、WebProxy と IWebProxy の違いがすべてわかります。WebRequest.DefaultProxy は IWebPRoxy クラスですが、UseDefaultCredentials は IWebProxy クラスのメソッドではなく、WebProxy のみにあり、2 つの異なるクラスである場合にプロキシを WebRequest.DefautlProxy に設定する方法は?

ユーザーが保存したフォーム設定を読み取るための現在の方法を次に示します。ただし、WebProxy と IWebProxy が混在しているため、これが正しいか、不十分か、やり過ぎか、単に間違っているかはわかりません。

    private WebProxy _proxyInfo = new WebProxy();
    private WebProxy SetProxyInfo()
    {
        if (UseProxy) 
        {
            if (UseIEProxy)
            {
                // is doing this enough to set this as default for WebClient?
                IWebProxy iProxy = WebRequest.DefaultWebProxy; 
                if (UseIEProxyCredentials)
                {
                    _proxyInfo.UseDefaultCredentials = true;
                }
                else
                {
                    // is doing this enough to set this as default credentials for WebClient?
                    WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword);
                }
            }
            else
            {
                // is doing this enough to set this as default for WebClient?
                WebRequest.DefaultWebProxy = new WebProxy(ProxyAddress, ParseLib.StringToInt(ProxyPort));
                if (UseIEProxyCredentials)
                {
                    _proxyInfo.UseDefaultCredentials = true;
                }
                else
                {
                    WebRequest.DefaultWebProxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword);
                }
            }
        }
        // Do I need to WebClient to absorb this returned proxy info if I didn't set or use defaults?
        return _proxyInfo;
    }

アプリ固有のプロキシ情報の保存を破棄するだけでなく、アプリがログイン ユーザーのデフォルトのプロキシ情報と資格情報を使用できるようにするだけの理由はありますか? HTTP を使用している場合、これで十分ではないでしょうか?

パート 2 質問:
WebClient インスタンスがプロキシ情報を使用しているかどうかをテストするにはどうすればよいですか?

4

1 に答える 1

1

IWebProxyはインターフェースであり、WebProxyはそのインターフェースを実装します。したがって、WebProxyは、IWebProxyには存在しないより多くのメソッド/プロパティを持つことができます。

MSDNのWebClientページによると...

備考

Proxyプロパティは、このWebClientオブジェクトに代わってリモートサーバーと通信するIWebProxyインスタンスを識別します。プロキシは、構成ファイルとInternetExplorerローカルエリアネットワーク設定を使用してシステムによって設定されます。プロキシを使用しないように指定するには、ProxyプロパティをGetEmptyWebProxyメソッドによって返されるプロキシインスタンスに設定します。

自動プロキシ検出の詳細については、自動プロキシ検出を参照してください。

したがって、Webプロキシを明示的に指定しなくても問題ありません。IEが使用しているもの(存在する場合)を使用する必要があります。

于 2010-05-23T23:06:53.233 に答える