[Из песочницы] Использование ClickOnce и прокси-сервера
сегодня в 14:56
Бывает так, что для управления доступом пользователей к Интернету и ресурсам внешней сети используется прокси-сервер (с аутентификацией или без). ClickOnce предоставляет поддержку встроенной проверки подлинности прокси-сервера в Windows, начиная с версии .NET Framework 3.5, но не поддерживает другие протоколы проверки подлинности, такие как «Обычная проверка подлинности» или «Краткая проверка подлинности».
Если не используется проверка подлинности, мы можем настроить прокси с помощью элемента defaultProxy:
…
…
… />
Но если компьютер настроен на использование прокси-сервера, требующего проверки подлинности, при попытке обновления мы получим следующую ошибку, даже если укажем свои Credentials:
Удаленный сервер возвратил ошибку: (407) требуется проверка подлинности прокси.
Это происходит потому, что каждый раз, когда загружается файл с помощью класса SystemNetDownloader, учетные данные сбрасываются на данные по умолчанию.
Решаем эту проблему следующим образом:
public class CustomUserProxy : IWebProxy
{
private WebProxy _webProxy;
private CustomUserProxy(Uri uri)
{
_webProxy = new WebProxy(uri);
}
public ICredentials Credentials
{
get { return _webProxy.Credentials; }
set { }
}
public Uri GetProxy(Uri destination)
{
return _webProxy.GetProxy(destination);
}
public bool IsBypassed(Uri host)
{
return _webProxy.IsBypassed(host);
}
///
/// Альтернативный метод, который устанавливает Credentials
///
/// Учетные данные для аутентификации
private void SetCredentials(ICredentials credentials)
{
_webProxy.Credentials = credentials;
}
Uri uriProxy = new Uri("http://myproxy.ent:808");
CustomUserProxy customProxy = new CustomUserProxy(uriProxy);
customProxy.SetCredentials(new NetworkCredential("Login", "Password"));
WebRequest.DefaultWebProxy = customProxy;
Работает в проекте, который использует обновления ClickOnce и обращения к WCF-сервисам.
-
↑
—
↓ -
111
-
Добавить в избранное 1
карма
0,0