我正在尝试访问wcf客户端。我知道人们现在正在获取信息,所以我知道它有效。我的问题是我似乎无法超越它。该服务是一种相互认证的服务。我在我的本地机器上的个人商店中有相应的证书。即使这样,我也得到以下例外:
A call to SSPI failed, see inner exception
深入搜索异常,我看到了:
Message : The target principal name is incorrect
我该如何解决这个问题?我是否需要冒充应用程序池运行的用户?我是否需要添加Identity \ ServicePrincipleName或Identity \ UserPrincipleName?有没有人遇到类似的问题?
答案 0 :(得分:6)
请在此处查看我对类似问题的回答:netTCP binding Soap Security Negotiation Failed。本指南应适用于其他绑定,而不仅仅是TCP。
答案 1 :(得分:0)
我重新生成了客户端,并且output.config文件中的端点现在有<identity>
<userPrincipalName value="Serviecname@companyname.com" />
</identity>
在端点标记中。所以新的端点看起来像 -
<endpoint address="net.tcp://machinename:6001/ReferenceDataService" binding="netTcpBinding" bindingConfiguration="netTcpBindingConf" contract="IReferenceDataService" >
<identity>
<userPrincipalName value="Serviecname@companyname.com" />
这解决了我的问题
答案 2 :(得分:0)
对我来说,当我在端点中指定服务器的用户名时,它可以工作。不是客户的用户名。这是一个UPN,而不是SPN。
new EndpointAddress(
new Uri("net.tcp://server:1234/MyWcf/svc"),
EndpointIdentity.CreateUpnIdentity("username@domain.local"))
根据我的理解,客户端会验证它是否与预期用户交谈。
答案 3 :(得分:0)
为了以后为其他人参考,我遇到了这个问题,但是现有的答案无济于事。
我的问题是userPrincipalName
被用作服务参考。
我最近重新注册了服务引用以对其进行更新,但是它已用我的电子邮件地址覆盖了日志文件中的指定userPrincipalName
:
<endpoint address="net.pipe://localhost/XXXX"
binding="netNamedPipeBinding" bindingConfiguration="NetNamedPipeBinding_IXXX"
contract="XXXServiceReference.IXXX"
name="NetNamedPipeBinding_IXXXX">
<identity>
<userPrincipalName value="my@emailaddress.com" />
</identity>
</endpoint>
要解决此问题,我只是将userPrincipalName
更改为localhost
,将其更改为以前的版本:
<userPrincipalName value="localhost" />