Я пытаюсь использовать веб-службу интрасети с WCF. Я добавил ссылку на службу через функцию Добавить ссылку на службу в VS2008. При этом у меня запросили сетевые учетные данные для доступа к предоставленной мной услуге, и была добавлена ссылка на службу.
Затем я написал некоторый код, который, как я ожидал, потерпит неудачу, поскольку он не передает учетные данные вместе с вызовом службы:
FooServiceClient proxy = new FooServiceClient();
bool isValid = proxy.ValidateBar(baz);
Когда я использую этот код, я получаю исключение:
HTTP-запрос не авторизован с помощью схемы аутентификации клиента 'Negotiate'.
Заголовок аутентификации, полученный от сервера, был 'Basic realm = "Kerberos" '.
Какую же ошибку я получаю при использовании любого из двух приведенных ниже примеров кода.
FooServiceClient proxy = new FooServiceClient();
proxy.ClientCredentials.UserName.UserName = "USERNAME";
proxy.ClientCredentials.UserName.Password = "PASSWORD";
bool isValid = proxy.ValidateBar(baz);
или
FooServiceClient proxy = new FooServiceClient();
NetworkCredential creds = new NetworkCredential("USERNAME", "PASSWORD");
proxy.ClientCredentials.Windows.AllowedImpersonationLevel =
TokenImpersonationLevel.Identification;
proxy.ClientCredentials.Windows.AllowNtlm = false;
proxy.ClientCredentials.Windows.ClientCredential = creds;
bool isValid = proxy.ValidateBar(baz);
Моя интуиция говорит мне, что у меня неправильно настроен режим безопасности. По словам менеджера сервера, конечная точка, к которой я пытаюсь привязаться, - это поиск базовых учетных данных Http через SSL. Что после прочтения о WCF-BasicHttp Transport Properties привело меня к мысли, что я должен использовать эту конфигурацию:
<security mode="Transport">
<transport clientCredentialType="Windows" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
К сожалению, я продолжал получать ту же ошибку.
Опять же, я уверен, что мои проблемы связаны с проблемой конфигурации с моей стороны, поскольку я ранее использовал эту услугу в других проектах с устаревшей Добавить веб-ссылку .