У меня есть служба WCF, обслуживаемая службой Windows. Клиентское приложение удастся, если я запишусь на клиентскую машину, используя те же учетные данные, что и служба, работающая под ней, но она не работает с исключением, если я вошел в систему с любой другой действительной учетной записью домена.
У меня есть две учетные записи, с которыми я тестирую: одна - обычная учетная запись пользователя, а другая - учетная запись администратора. Я пробовал все четыре комбинации, перечисленные ниже:
Server account
CLient RegUser AdminAcct
RegUser Succeeds Fails
AdminAcct Fails Succeeds
Как вы можете видеть, это не может быть проблемой администратора, поскольку система работает, когда клиент и сервер работают под учетной записью non-admin. В обоих случаях, когда он терпит неудачу, я получаю такое же исключение на клиенте, не указав ничего из журналов сервера:
"Не удалось выполнить вызов SSPI. см. внутреннее исключение"
Внутреннее исключение . Неправильное имя целевого принципа.
Я зарегистрировал учетные записи как SPN.
Проблема возникает только из моего клиентского приложения, но не тогда, когда я использую WCVFTestClient.exe
, который поставляется с Visual Studio.
Исключение, в журнале трассировки WCF,
"System.ServiceModel.Security.SecurityNegotiationException, System.ServiceModel, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089"
с сообщением:
"Ошибка аутентификации на удаленной стороне (поток может быть доступен для дополнительных попыток аутентификации).
След стека находится внизу: Что не так?
трассировка стека
System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeAcceptor.OnAcceptUpgrade(поток поток, SecurityMessageProperty & remoteSecurity) System.ServiceModel.Channels.StreamSecurityUpgradeAcceptorBase.AcceptUpgrade(Stream поток) System.ServiceModel.Channels.InitialServerConnectionReader.UpgradeConnection(IConnection соединение, StreamUpgradeAcceptor upgradeAcceptor, IDefaultCommunicationTimeouts defaultTimeouts) System.ServiceModel.Channels.ServerSessionPreambleConnectionReader.ServerFramingDuplexSessionChannel.OnOpen(TimeSpan тайм-аут) System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan тайм-аут) System.ServiceModel.Dispatcher.ChannelHandler.OpenAndEnsurePump() System.Runtime.ActionItem.DefaultActionItem.TraceAndInvoke() System.Runtime.ActionItem.CallbackHelper.InvokeWithoutContext(Объект государство) System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped * nativeOverlapped) System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 ошибка, UInt32 bytesRead, NativeOverlapped * nativeOverlapped) System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped * pOVERLAP)