Динамически используя WebProxy со сценарием WPAD - PullRequest
6 голосов
/ 17 января 2012

Я пытаюсь вызвать веб-сервис. Мне нужно использовать прокси, который использует сценарий WPAD. URL-адрес этого сценария WPAD различен для разных развертываний приложения.

Несмотря на то, что IE имеет правильные настройки прокси-сервера, приложение работает как служба Windows, работающая под учетной записью локальной системы, поэтому приложение не знает настроек IE для этого пользователя Windows.

Помещаем в app.config следующее:

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true" >
        <proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/>
    </defaultProxy>
</system.net>

Но есть ограничение, которое не может быть настроено пользователем. Есть ли способ сделать это динамически из (C # -) кода? Я также подозреваю, что вышеизложенное изменит поведение веб-сервисов, которые не должны проходить через прокси (но я не проверял это).

В http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx я нашел полезный текст: «(Пример, демонстрирующий использование функции WPAD, см. В документации по классу IWebProxyScript.)», Но я не нашел пример: (.

Ответы [ 2 ]

1 голос
/ 24 января 2012

В этой статье о проекте кода показано, как использовать API-интерфейсы Windows для выполнения сценария PAC и возврата правильных данных прокси-сервера для данного URL: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy

Вы можете использовать функцию, чтобы узнать подробности прокси, а затем напрямую настроить прокси объектов веб-службы или изменить WebRequest.DefaultProxy.

0 голосов
/ 07 марта 2014

IWebProxyScript используется внутренне самой WebProxy.

Если вы инициализируете WebProxy с URL-адресом сценария WPAD, он разрешит правильный URL-адрес для запросов, которые ему передаются.Вы можете установить для этого WebProxy значение WebRequest, и оно будет автоматически обрабатывать установку правильного URL-адреса прокси-сервера для цели запроса.

WebRequest request = WebRequest.Create("http://targeturl");
request.Proxy = new WebProxy("http://url.to/wpad.dat");

Вы также можете получить URL-адрес прокси-сервера для данной цели следующим образом:

WebProxy proxy = new WebProxy("http://url.to/wpad.dat");    
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl"));

Это НЕ работает для сценариев PAC.

...