Какова связь между WebProxy и IWebProxy по отношению к WebClient? - PullRequest
2 голосов
/ 22 мая 2010

Я создаю приложение (.NET 2.0), которое использует WebClient для подключения (downloaddata и т. Д.) К / из веб-службы http. Сейчас я добавляю форму для обработки, позволяющую хранить информацию о прокси или использовать ее по умолчанию. Я немного запутался в некоторых вещах.

Во-первых, некоторые методы и свойства, доступные в WebProxy или IWebProxy, отсутствуют в обоих. В чем здесь различие в настройке того, каким будет WebClient при его вызове?

Во-вторых, нужно ли указывать WebClient использовать информацию о прокси, если я установил его с помощью класса WebProxy или IWebProxy в другом месте? Или это автоматически наследуется?

В-третьих, при предоставлении пользователю возможности использовать прокси-сервер по умолчанию (независимо от того, что установлено в IE) и учетные данные по умолчанию (я полагаю, также, что установлено в IE), эти два взаимоисключающие? Или вы используете учетные данные по умолчанию, когда вы также использовали прокси по умолчанию?

В этом заключается вся разница между WebProxy и IWebProxy. WebRequest.DefaultProxy - это класс IWebPRoxy но UseDefaultCredentials не является методом в классе IWebProxy, а только в WebProxy, и, в свою очередь, Как установить прокси для 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 информацию о прокси или нет?

1 Ответ

1 голос
/ 24 мая 2010

IWebProxy - это интерфейс, и WebProxy реализует этот интерфейс. Таким образом, WebProxy может иметь больше методов / свойств, которых нет в IWebProxy.

По данным страницы WebClient на MSDN ...

Примечания

Свойство Proxy идентифицирует Экземпляр IWebProxy, который общается с удаленными серверами от имени этого Объект WebClient. Прокси установлен система, использующая файлы конфигурации и локальная область Internet Explorer Сетевые настройки. Чтобы указать, что нет прокси должен быть использован, установите прокси свойство экземпляра прокси возвращается GetEmptyWebProxy способ.

Для получения информации об автоматическом прокси обнаружение, см. Автоматический прокси Обнаружение.

Следовательно, все должно быть в порядке, если вы явно не указали веб-прокси. Он должен использовать тот, который использует IE (если есть).

...