Мне предоставлен веб-сервис, написанный на Java, на который я не могу вносить никаких изменений. Для доступа к любому из методов требуется аутентификация пользователя с базовой аутентификацией. Предлагаемый способ взаимодействия с этой службой в .NET заключается в использовании Visual Studio 2005 с установленной WSE 3.0.
Это проблема, поскольку в проекте уже используется Visual Studio 2008 (с таргетингом на .NET 2.0). Я мог бы сделать это в VS2005, однако я не хочу привязывать проект к VS2005 или делать это, создавая сборку в VS2005 и в том числе в VS2008-решении (которое в основном связывает проект с 2005 в любом случае для любых будущих изменений сборки). Я думаю, что любой из этих вариантов усложнит работу для новых разработчиков, заставив их установить WSE 3.0 и не позволит проекту использовать 2008 и функции в .NET 3.5 в будущем... т.е. я действительно верю, что использование WCF это путь.
Я изучал использование WCF для этого, однако я не уверен, как заставить службу WCF понять, что ей необходимо отправлять заголовки проверки подлинности вместе с каждым запросом. У меня возникают ошибки 401, когда я пытаюсь сделать что-либо с помощью веб-службы.
Вот как выглядит мой код:
WebHttpBinding webBinding = new WebHttpBinding();
ChannelFactory<MyService> factory =
new ChannelFactory<MyService>(webBinding, new EndpointAddress("http://127.0.0.1:80/Service/Service/"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
factory.Credentials.UserName.UserName = "username";
factory.Credentials.UserName.Password = "password";
MyService proxy = factory.CreateChannel();
proxy.postSubmission(_postSubmission);
Это запустится и вызовет следующее исключение:
HTTP-запрос неавторизован с помощью схемы аутентификации клиента "Аноним". Заголовок аутентификации, полученный с сервера было "Основное царство = царство".
И это имеет внутреннее исключение:
Удаленный сервер возвратил ошибку: (401) Неавторизованный.
Любые мысли о том, что может вызвать эту проблему, будут с благодарностью.