Я создаю приложение (.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 информацию о прокси или нет?