2013-06-06 1 views
9

Я вызываю веб-сервис из приложения WinForms. Все работает нормально, когда прокси-сервер не используется, однако при использовании прокси-сервера приложение выходит из строя, а вместо ответа XML он ожидает запроса SOAP, он получает страницу с ошибкой HTML, в которой указано «Требуется аутентификация».Как я могу заставить WebClient (клиент webservice) автоматически использовать прокси-сервер по умолчанию?

Кажется, вы можете установить прокси-сервер вручную, как это:

WebClient client = new WebClient(); 
WebProxy wp = new WebProxy("proxy server url here"); 
client.Proxy = wp; 

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

На моей собственной машине, если я смоделирую это с помощью Fiddler (и включив опцию «Требовать аутентификацию прокси»), я получаю диалоговое окно с запросом учетных данных для входа, но это, похоже, не происходит на машинах моего клиента (которые используют настоящий аппаратный прокси - McAfee Web Gateway).

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

Update

Похоже, вы можете забрать прокси-сервер, используя следующий код, но это не вызывает диалоговое окно аутентификации появляться во всех ситуациях (работает на некоторых компьютерах, но не на других):

IWebProxy defaultProxy = WebRequest.DefaultWebProxy; 
if (defaultProxy != null) 
{ 
    defaultProxy.Credentials = CredentialCache.DefaultCredentials; 
    client.Proxy = defaultProxy; 
} 

Если код указан правильно, я не понимаю, почему некоторые пользователи не будут запрашивать их учетные данные. Должен ли я вводить свой собственный код для сбора учетных данных пользователя и отправки их на объект WebRequest?

+0

Вы смотрели на [WindowsIdentity.Impersonate Method] (http://msdn.microsoft.com/en-us/library/w070t6ka%28v=vs.100%29.aspx) ? –

+1

Не уверен, что это актуально, поскольку мое приложение уже работает как локальный пользователь, я думаю? – NickG

+0

Doh, мой плохой ... В последнее время я слишком много разбираюсь с SQL CLRSprocs ... «Когда все вы [используете] - это молот ...» –

ответ

0

Первая попытка использовать это:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy; 
if (proxy.Address.AbsoluteUri != string.Empty) 
{ 
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri); 
    client.Proxy = proxy; 
} 

, если это не работает, попробуйте:

WebProxy proxy = WebProxy.GetDefaultProxy() 
client.Proxy = proxy; 
+1

WebPRoxy.GetDefaultProxy устарел. –

16

Попробуйте добавить

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
    </system.net> 

в файл app.config

+0

Отлично, так сложно найти этот ответ на Google тоже .... – GONeale

+0

Не работает для меня. – NickG

+1

в web.config тоже помогает. должен быть помещен в Stanislav

3
using (WebClient webClient = new WebClient()) 
{ 

    webClient.UseDefaultCredentials = true; 
    webClient.Proxy = WebRequest.GetSystemWebProxy(); 
} 

это должно работать

+0

Не работает для меня, я все равно получаю «Требуется 407 аутентификация прокси» –

+0

См. https://stackoverflow.com/questions/299940/how-should-i-set-the-default- прокси в использовании-умолчанию-учетные –

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