Требуется 407 прокси-аутентификация - PullRequest
3 голосов
/ 06 октября 2009

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

WebRequest req = WebRequest.Create("External server url");
req.Proxy = new System.Net.WebProxy("proxyUrl:8080", true);
req.Proxy.Credentials = CredentialCache.DefaultCredentials;
WebResponse resp = req.GetResponse();
StreamReader textReader = new StreamReader(resp.GetResponseStream());
XmlTextReader xmlReader = new XmlTextReader(textReader);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlReader);

Этот код отлично работает на моем ПК для разработки (Windows XP с .Net 3.5)

Но когда я внедряю этот код в IIS (как в Windows XP, так и в Windows Server 2003), появляется следующая ошибка

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

Иногда это дает мне

"Удаленный сервер возвратил ошибку: (502) Bad Gateway."

Следующий код взят из моего web.config

<system.net>
    <defaultProxy>
      <proxy  usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" />
    </defaultProxy>
  </system.net> 

Пожалуйста, помогите мне?

[Изменить] Даже когда я запускаю веб-сайт для ПК разработчика, но через IIS выдает ошибку «Удаленный сервер возвратил ошибку: (407) Требуется проверка подлинности прокси».

Но когда я запускаю веб-сайт с сервера Microsoft Devlopment, он работает нормально

Ответы [ 7 ]

7 голосов
/ 16 февраля 2011

@ Мохит Агарвал

Большое спасибо за предложение добавить 'useDefaultCredentials = "true"', вы звезда!

Я пытался заставить библиотеку .NET для примера exe API данных Google работать в течение нескольких недель безуспешно. Добавление вашего предложения устранило мою проблему, и теперь я получаю соединение вместо 407 Proxy Authentication Required.

speadsheet.exe.config содержимое должно быть:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy usesystemdefault="true"/>
    </defaultProxy>
  </system.net>
</configuration>

В моем случае НЕ как Google предлагает:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.net>
  <defaultProxy>
   <proxy usesystemdefault="true"/>
  </defaultProxy>
 </system.net>
</configuration>

http://code.google.com/p/google-gdata/wiki/WebProxySetup

1 голос
/ 08 января 2014

Попробуйте, если хотите указать данные прокси

<?xml version="1.0" encoding="utf-8" ?>
     <configuration>
          <system.net>
              <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy proxyaddress="http://<ProxyServer>:<port>" 
                       usesystemdefault="False" 
                       bypassonlocal="True" 
                       autoDetect="False" />
              </defaultProxy>
          </system.net>
</configuration>

Ура! * * 1004

1 голос
/ 18 июля 2013

Для кого-то, кто узнает об этом через Google, может быть полезно использовать его в приложениях .NET, которые еще не могут иметь свой собственный файл AppName.exe.config (или вы можете изменить его, если так). Мы используем NextGen EPM (медицинское планирование / выставление счетов), и их система обработки кредитных карт все время застревает на нашем прокси-сервере, поскольку она не передает учетные данные. Я создал файл EXEName.config (в данном случае NextGenEPM.exe.config), содержащий приведенный выше фрагмент:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy usesystemdefault="true"/>
    </defaultProxy>
  </system.net>
</configuration>

Успех! Это позволило мне решить проблему, не занимаясь прокси на нашем прокси-сервере, который непреклонно настроен на требование аутентификации, и мы не хотели бы идти на компромисс.

1 голос
/ 26 марта 2013

Под корневым <configuration> элементом в app.config или Web.config:

<system.net>
  <defaultProxy useDefaultCredentials="true">
    <proxy usesystemdefault="True"/>
  </defaultProxy>
</system.net>
1 голос
/ 06 октября 2009

Вероятно, это связано с тем, что учетная запись, под которой работает IIS, не имеет соответствующих разрешений для доступа через прокси-сервер аутентификации.

Когда вы запускаете его на своем компьютере для разработки, вы запускаете его в качестве входа в систему, который, как я предполагаю, имеет разрешения для прохождения через прокси. При работе внутри IIS он работает не так, как вы, и поэтому, вероятно, не может пройти через прокси.

Вы можете либо дать пользователям IIS разрешения для доступа через прокси-сервер (что вряд ли будет работать в доменной среде, поскольку пользователь IIS будет локальным пользователем компьютера), либо настроить приложение для запуска в качестве сетевого пользователя. с разрешениями, чтобы пройти через прокси.

Это можно сделать, запустив IIS для работы в качестве пользователя домена (я бы не рекомендовал этот подход), или настроив приложение для запуска в качестве пользователя домена с помощью web.config (см. this статья для получения дополнительной информации о том, как это сделать).

1 голос
/ 06 октября 2009

Работает ли это при изменении фрагмента в файле web.config на:

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy  usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" />
    </defaultProxy>
</system.net>
0 голосов
/ 13 августа 2013

Мы долго боролись с этой проблемой и обновили наш app.config, чтобы использовать учетные данные по умолчанию, как указано в ответах выше. Однако, это все еще не работало! Вслед за большой болью мы обнаружили, что наш app.config не включался автоматически в наше приложение «клик один раз». Простая ошибка вызвала крайнюю головокружение !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...