Как добавить ссылку на службу в 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;
}