2

我有一个托管在 Windows 服务中的 WCF 服务。该应用程序是一个 Intranet 应用程序,我以编程方式将服务和客户端上的绑定设置为:

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 注册或刷新 SPN 的内容,但我以前不需要这样做。为什么这将与其他配置一起使用,而不是上面的配置?

4

1 回答 1

0

尝试以具有本地管理员访问权限的帐户运行该服务 - 如果您无法以这么多的权限运行该服务,那么我相信您需要使用您所暗示的 setspn.exe。

于 2010-03-29T04:41:55.947 回答