Как добавить ссылку на службу в visual studio 2008, аутентифицирующую защищенную паролем веб-службу

Я хочу ссылаться на веб-службу и требует аутентификации пользователя/пароля. В VS 2008, если я попытаюсь "добавить ссылку" или "добавить ссылку на службу", все, что я могу напечатать, это URL-адрес, и нет способа ввода моих учетных данных. Очевидно, если я попытаюсь загрузить ws, это покажет мне приятное сообщение:

Ошибка запроса с HTTP-статусом 403: Запрещено. Метаданные содержат ссылку, которая не может быть решена: HTTP-запрос неавторизован с помощью схемы проверки подлинности клиента "Аноним". Заголовок аутентификации, полученный с сервера, был "Basic realm =" weblogic ". Удаленный сервер возвратил ошибку: (401) Неавторизованный.

Итак, мой вопрос: возможно ли (используя VS 2008) добавить ссылку на защищенный веб-сервис? Как?

Ответы

Ответ 1

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

WebService.Service myService = new WebService.Service();
myService.Credentials = new System.Net.NetworkCredential("username", "password");
WebService.ResultType results = myService.MyMethodReturnsResultType();

Ответ 2

В зависимости от того, как служба аутентифицирована, вы можете быть sol.

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

В противном случае попробуйте использовать стандартный механизм:

http://username:[email protected]/service

Лучший выбор. Получите WSDL от своего поставщика и используйте wsdl.exe для создания вашего прокси.

Обновление в ответ на комментарий:

Да, насмешка службы для создания прокси-сервера - вполне разумный план. Если целевой сервис является службой ASP.net или только принимает и возвращает простые типы.

Конструктор веб-службы имеет перегрузку, которая принимает Uri, или вы можете просто изменить сгенерированный источник.

Если вы решите изменить сгенерированный источник, вы, вероятно, захотите просто извлечь прокси-класс и удалить ссылку webservice:

После создания прокси-сервера с помощью VS, если вы покажете все файлы и перейдете в ссылку WebService, вы найдете файл с именем Reference.cs. Это единственный файл, который вам нужен. Скопируйте содержимое в другой файл, а затем просто удалите ссылку веб-службы.

Если вы это сделаете, вы можете добавить логику аутентификации в прокси-сервер на этом этапе.

Но опять же, получение WSDL от поставщика - лучший выбор.

Удачи.

Ответ 3

Поздний ответ, но вы также можете заставить его работать, если вы открываете свой сайт в веб-браузере Visual Studio и входите в систему. Работает только в том случае, если ваша модель auth поддерживает файлы cookie.

Ответ 4

Если вы создаете код с помощью WSDL, вы можете переопределить метод GetWebRequest(), который позволит вам добавить заголовок авторизации

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    var req = base.GetWebRequest(uri);
    req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("username:password")));
    return req;
}