2013-03-29 4 views
2

Я знаю, что это было задано много раз. Я прочитал большинство всех сообщений здесь и на других сайтах, подобных этому.(407) Требуется прокси-аутентификация

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/2931d21c-9ca8-4256-b213-915fad4c941b/

С безрезультатно. Вот окружающая среда

Windows Server 2008 R2 64bit Visual Studio 2008 .Net Framework 3.5

Вот что я пытался

я имел прокси-аутентификацию при помощи кода

WebRequest req = WebRequest.Create(requestUri + data); 
req.Proxy = new System.Net.WebProxy(<ProxyURL>:<port>",true); 
req.Proxy.Credentials = CredentialCache.DefaultCredentials; 
WebResponse resp = req.GetResponse(); 

Этот работал, но, увидев, что это замедляет приложение, я узнал, что могу редактировать файл machine.config, который я сделал. Это сработало!

<system.net> 
     <defaultProxy 
     useDefaultCredentials="true"> 
     <proxy 
     proxyaddress="<proxyURL>:<port>" 
     bypassonlocal="True"/> 
    </defaultProxy> 
    </system.net> 

По крайней мере, на день или 2. Затем он начал сбой.

Затем я редактировал его к этому

<system.net> 
    <defaultProxy 
     useDefaultCredentials="true"> 
     <proxy usesystemdefault="True"/> 
     </defaultProxy> 
    </system.net> 

В моем понимании это будет использовать настройки IE для подключения к прокси-сервер, но по-прежнему не работает. Я также пробовал код tihs

WebProxy proxy = new WebProxy(<proxy>:<port>); 
CredentialCache myCache = new CredentialCache(); 
myCache.Add(new Uri(requestUri + data), "BASIC", new NetworkCredential(<username>,<password>)); 
proxy.Credentials = myCache; 
request.Proxy = proxy; 
request.Method = "GET"; 

И это не помогло.

Примечание: Я могу скопировать файл machine.config на свой компьютер (Win XP) и запустить там .exe (без прокси-кода), и он отлично работает.

Есть ли что-то другое, что мне нужно сделать с 64-разрядной ОС? Также я могу открыть IE8 на сервере и получить доступ к URI просто отлично. целью является предварительная аутентификация прокси-сервера без необходимости вводить пароль пользователя в коде.

+0

Пароль не должен содержать специальный символ ... попробовать !!! – 2013-12-25 10:22:44

ответ

3

HttpWebRequest в любом случае использует прокси-сервер Internet Settings (IE) по умолчанию, поэтому, если он отлично работает с Internet Explorer на сервере, он также должен быть в порядке от вашего кода (при условии, что он работает под той же учетной записью пользователя).

Я бы поставил machine.config как было.

Одна вещь, которую я бы проверил, будет в IIS, вы можете настроить поставщиков для апплета Windows Authentication. Это должно содержать список NTLM и Kerberos в качестве поставщиков в списке; Я бы переключил их и посмотрел, если это имеет значение (например, если NTLM находится в верхней части списка, переместите Kerberos в начало). Извините, я не могу дать вам точные инструкции, поскольку у меня нет IIS на этой машине.

Если вы все еще боретесь, я бы порекомендовал вам запустить Fiddler на сервере, чтобы захватить поток запросов и ответов для получения дополнительных сведений.

+0

Ничто не работает. Проверяемый IIS, проверка подлинности Windows использует протокол переговоров и NTLM, если это помогает любому – jlh3302

+1

Код не требуется, он использовал настройки IE. Моя работа не работала, потому что я пытался использовать Fiddler, и он изменил настройки прокси-сервера IE. В Fiddler я выбираю Rules/Automatically Authenticate и работает мой код. Как только я закрыл Fiddler, я проверил настройки прокси-сервера IE, чтобы убедиться, что они вернулись. Кажется, все работает. – jlh3302

5

@ Давид Мур прав. если IE работает нормально, когда вы просматриваете вручную, просто добавьте req.Proxy.Credentials = CredentialCache.DefaultCredentials;, и он будет работать нормально.

Heres модифицированный код, взятый из MSDN, который работает для меня.

using System; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string urlDemo = "http://en.wikipedia.org/wiki/Main_Page"; 
      // Create a request for the URL. 
      WebRequest request = WebRequest.Create(urlDemo); 
      // If required by the server, set the proxy credentials. 
      request.Proxy.Credentials = CredentialCache.DefaultCredentials; 
      // Get the response. 
      WebResponse response = request.GetResponse(); 
      // Display the status. 
      Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
      // Get the stream containing content returned by the server. 
      Stream dataStream = response.GetResponseStream(); 
      // Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 
      // Read the content. 
      string responseFromServer = reader.ReadToEnd(); 
      // Display the content. 
      Console.WriteLine(responseFromServer); 
      Console.ReadLine(); 
      // Clean up the streams and the response. 
      reader.Close(); 
      response.Close(); 

     } 
    } 
} 

надеюсь, что это помогает ;-)

+0

Хмм - этот код работает с WebRequest.Proxy и без него. Поэтому я не уверен, что демонстрируется. –

+0

Я получал 407, где я действительно не должен был получать его (или так я думал), но затем я добавил строку * req.Proxy.Credentials = CredentialCache.DefaultCredentials *, как вы предложили, и Bingo! Это исправило это. – Cyberherbalist

Смежные вопросы