У меня есть служба WCF, размещенная в службе Windows. Приложение представляет собой приложение для внутренней сети, и я программно установил привязки как для службы, так и для клиента следующим образом:
NetTcpBinding aBinding = new NetTcpBinding(SecurityMode.Transport);
aBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
aBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
У службы и клиента есть конечные точки, настроенные с именами SPN:
EndpointAddress = new EndpointAddress(uri, EndpointIdentity.CreateSpnIdentity("Service1"));
Насколько я знаю, я правильно настроил привязки - и я обычно могу нормально подключиться к сервису. Однако я столкнулся со случаем, когда на сервере под управлением Windows Server 2003 R2, x64, SP2 я сразу получаю следующее исключение, когда клиент пытается подключиться:
INNEREXCEPTION - Сообщение об исключении:
InvalidCredentialException: Либо целевое имя неверно, либо сервер отклонил учетные данные клиента.
Трассировка стека:
at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
at System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeInitiator.OnInitiateUpgrade(Stream stream, SecurityMessageProperty& remoteSecurity)
Я получаю исключение, когда пытаюсь подключиться к службе с другой машины в домене, но если я подключаюсь к службе на той же машине, на которой запущена служба, она работает нормально.
Сам хостинг работает как учетная запись пользователя домена, но я попытался запустить сервис как локальная система и сетевая служба безрезультатно. Я проверил локальные политики безопасности для сервера и ничего не обнаружил (т. Е. «Доступ к этому компьютеру из сети» включает «Все»).
Кто-нибудь имеет представление о том, что может решить эту проблему?
Мне интересно, нужно ли мне что-то делать в Active Directory в отношении SPN службы? Я читал об использовании setspn.exe для регистрации или обновления имен участников-служб, но мне не нужно было делать это раньше. Почему это работает с другими конфигурациями, но не с вышеуказанными?