Удаленный сервер возвратил ошибку: (407) Требуется проверка подлинности прокси - PullRequest
69 голосов
/ 06 апреля 2010

Я получаю эту ошибку при вызове веб-службы:

«Удаленный сервер возвратил ошибку: (407) Требуется проверка подлинности прокси».

Я понял общую идею и смог заставить работать код, добавив

myProxy.Credentials = NetworkCredential("user", "password", "domain");

или с помощью DefaultCredentials в коде. Моя проблема в том, что звонок на веб-сервис работает в производстве без этого.

Кажется, что существует не кодовое решение, включающее Machine.config, но что это? В настоящее время я не могу получить доступ к файлу machine.config рабочей коробки, чтобы увидеть, как это выглядит. Я попытался обновить свой machine.config следующим образом, но все равно получаю ошибку 407.

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
        <bypasslist>
            <clear />
        </bypasslist>
        <proxy proxyaddress="myproxy:9000"
               usesystemdefault="false"
               bypassonlocal="true"
               autoDetect="False" />
    </defaultProxy>
</system.net>

Ответы [ 6 ]

126 голосов
/ 28 сентября 2012

Просто добавьте это в конфиг

<system.net>
    <defaultProxy useDefaultCredentials="true" >
    </defaultProxy>
</system.net>
51 голосов
/ 20 августа 2012

В следующем коде нам не нужно жестко кодировать учетные данные.

service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
19 голосов
/ 14 сентября 2010

Обратитесь к эксперту по брандмауэру. Они открывают брандмауэр для серверов PROD, поэтому нет необходимости использовать прокси.

Спасибо, ваш совет помог мне решить мою проблему:

Пришлось установить учетные данные в двух местах, чтобы обойти ошибку 407:

HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");

и вуаля!

6 голосов
/ 06 апреля 2010

Возможно, машина или web.config в prod имеют настройки в конфигурации; вам, вероятно, не понадобится прокси-тег.

<system.net>
    <defaultProxy useDefaultCredentials="true" >
        <proxy usesystemdefault="False"
               proxyaddress="http://<ProxyLocation>:<port>"
               bypassonlocal="True"
               autoDetect="False" />
    </defaultProxy>
</system.net>
3 голосов
/ 08 июня 2012
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;

webRequest.Proxy = WebRequest.DefaultWebProxy;

webRequest.Credentials = new NetworkCredential("user", "password");

webRequest.Proxy.Credentials = new NetworkCredential("user", "password");

Успешно.

2 голосов
/ 05 декабря 2011

У меня была похожая проблема с прокси. В моем случае достаточно было добавить:

webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");
...