Web Service + proxy NTLM + Windows Application = error 407
От: ada_corpit  
Дата: 18.03.09 09:53
Оценка:
Замучил гугл и поиск rsdn — предлагаемые решения не работают.

Что есть:
1. Корпоративный прокси squid, NTLM-аутентификация.
2. Удалённый веб-сервис (С#).
3. Приложение (Windows Application, С#), вызывающее метод веб-сервиса.

Что происходит:
При попытке вызова метода сервиса из приложения вылетает ошибка (407) Proxy Authentication Required.

При этом:
IE ходит нормально, после вводя логина и пароля.
WebReference был сделан ещё в те времена, когда прокси не требовал аутентификации, сейчас Студия WebReference делать не хочет.

Делаю так:

My_WebService myWS = new My_WebService();
myWS.Url = "https://.../MyWebService.asmx";
// ЧТОБЫ ПОДДЕРЖАТЬ ЦЕЛОСТНОСТЬ ВЕБ-СЕССИИ.
CookieContainer cookieContainer = new CookieContainer();
myWS.CookieContainer = _cookieContainer;
// Достаём из локального хранилища сертификат и тянем его в прокси-класс.
myWS.ClientCertificates.Add(GetCertificateBySerialNumber(serial_num));

// Ходим через корпоративный прокси.
myWS.Proxy = WebRequest.DefaultWebProxy;
myWS.UseDefaultCredentials = true;

// Пробовал и так:
//myWS.Credentials = CredentialCache.DefaultCredentials;
//myWS.Proxy.Credentials = CredentialCache.DefaultCredentials;

// Дёргаем метод веб-сервиса.
String s = myWS.TestProxy(); // На этой строке вылетает ошибка 407.
MessageBox.Show(s);


Спасите помогите! Я слово волшебное знаю — пожалуйста.
Re: Web Service + proxy NTLM + Windows Application = error 4
От: alandor  
Дата: 04.08.09 05:45
Оценка:
Здравствуйте, ada_corpit, Вы писали:

_>Замучил гугл и поиск rsdn — предлагаемые решения не работают.


_>Что есть:

_>1. Корпоративный прокси squid, NTLM-аутентификация.
_>2. Удалённый веб-сервис (С#).
_>3. Приложение (Windows Application, С#), вызывающее метод веб-сервиса.

_>Что происходит:

_>При попытке вызова метода сервиса из приложения вылетает ошибка (407) Proxy Authentication Required.

_>При этом:

_>IE ходит нормально, после вводя логина и пароля.
_>WebReference был сделан ещё в те времена, когда прокси не требовал аутентификации, сейчас Студия WebReference делать не хочет.

_>Делаю так:


_>
_>My_WebService myWS = new My_WebService();
_>myWS.Url = "https://.../MyWebService.asmx";
_>// ЧТОБЫ ПОДДЕРЖАТЬ ЦЕЛОСТНОСТЬ ВЕБ-СЕССИИ.
_>CookieContainer cookieContainer = new CookieContainer();
_>myWS.CookieContainer = _cookieContainer;
_>// Достаём из локального хранилища сертификат и тянем его в прокси-класс.
_>myWS.ClientCertificates.Add(GetCertificateBySerialNumber(serial_num));

_>// Ходим через корпоративный прокси.
_>myWS.Proxy = WebRequest.DefaultWebProxy;
_>myWS.UseDefaultCredentials = true;

_>// Пробовал и так:
_>//myWS.Credentials = CredentialCache.DefaultCredentials;
_>//myWS.Proxy.Credentials = CredentialCache.DefaultCredentials;

_>// Дёргаем метод веб-сервиса.
_>String s = myWS.TestProxy(); // На этой строке вылетает ошибка 407.
_>MessageBox.Show(s);
_>


_>Спасите помогите! Я слово волшебное знаю — пожалуйста.


//вариант №1
My_WebService myWS = new My_WebService();
// определяем настройки прокси-сервер по умолчанию
myWS.Proxy = WebRequest.DefaultWebProxy;
//устанавливаем сетевые учетные данные текущего пользователя или приложения
myWS.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;


//вариант №2
WebProxy myWP = new WebProxy("<IP прокси>:<порт>", false);
myWP.Credentials = new NetworkCredential("логин", "пароль", "домен");
myWS.Proxy = myWP;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.