我有一个由 Windows 服务托管的WCF服务。如果我使用与运行服务相同的凭据登录客户端计算机,则客户端应用程序成功,但如果我使用任何其他有效域帐户登录,它会失败并出现异常。
我有两个正在测试的帐户,一个是普通用户帐户,另一个帐户是管理员帐户。我已经尝试了下面列出的所有四种组合:
Server account
CLient RegUser AdminAcct
RegUser Succeeds Fails
AdminAcct Fails Succeeds
如您所见,这不是管理员问题,因为当客户端和服务器都在非管理员帐户下运行时,系统可以正常工作。在这两种失败的情况下,我都会在客户端上遇到相同的异常,但没有任何迹象表明服务器日志中发生了任何事情:
“对 SSPI 的调用失败。请参阅内部异常”
内部异常是“目标原则名称不正确”。
我已将这些帐户注册为 SPN。
该问题仅在我的客户端应用程序中出现,但在我使用WCVFTestClient.exe
Visual Studio 附带的应用程序时不会出现。
WCF 跟踪日志中的异常是
“System.ServiceModel.Security.SecurityNegotiationException,System.ServiceModel,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”
留言:
“远程身份验证失败(流可能仍可用于其他身份验证尝试)。”
堆栈跟踪位于底部:出了什么问题?
堆栈跟踪
System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeAcceptor.OnAcceptUpgrade(Stream stream, SecurityMessageProperty&remoteSecurity) System.ServiceModel.Channels.StreamSecurityUpgradeAcceptorBase.AcceptUpgrade(Stream stream) System.ServiceModel.Channels.InitialServerConnectionReader.UpgradeConnection(IConnection connection, StreamUpgradeAcceptor upgradeAcceptor, IDefaultCommunicationTimeouts defaultTimeouts) System.ServiceModel.Channels.ServerSessionPreambleConnectionReader.ServerFramingDuplexSessionChannel.OnOpen(TimeSpan timeout) System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) 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 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped) System.Threading._IOCompletionCallback .PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)本机重叠* pOVERLAP)本机重叠* pOVERLAP)