12

我正在尝试访问 wcf 客户端。我知道人们现在正在从中获取信息,所以我知道它有效。我的问题是我似乎无法克服它。该服务是相互认证的服务。我在本地计算机上的个人商店中有适当的证书。即使这样,我也会遇到以下异常:

 A call to SSPI failed, see inner exception

深入研究异常,我看到了这一点:

Message : The target principal name is incorrect

我该如何解决这个问题?我是否需要模拟运行应用程序池的用户?我是否需要添加 Identity\ServicePrincipleName 或 Identity\UserPrincipleName?有没有人遇到过类似的问题?

4

4 回答 4

6

在此处查看我对类似问题的回答:netTCP binding Soap Security Negotiation Failed。本指南应适用于其他绑定,而不仅仅是 TCP。

于 2013-05-31T19:00:14.877 回答
1

为了其他人的未来参考,我遇到了这个问题,但现有的答案没有帮助。

我的问题是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>

为了纠正这个问题,我只是将 更改userPrincipalNamelocalhost,它是以前的:

<userPrincipalName value="localhost" />
于 2020-02-14T16:39:39.357 回答
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" />

这解决了我的问题

于 2017-02-15T17:41:18.963 回答
0

对我来说,当我在端点中指定服务器的用户名时,它就起作用了。不是客户的用户名。它是 UPN,而不是 SPN。

new EndpointAddress(
    new Uri("net.tcp://server:1234/MyWcf/svc"),
        EndpointIdentity.CreateUpnIdentity("username@domain.local"))

据我了解,客户端验证它正在与预期用户交谈。

于 2017-05-11T03:22:22.957 回答