我查看了大量的SO文章,甚至是其他网站,但似乎无法使这项服务正常运行.我有一个我想要点击的SOAP服务,它的配置如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="PROVIDERSSoapBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://xxx.xx.xx.xxx:9011/provider/services/PROVIDERS"
binding="basicHttpBinding" bindingConfiguration="PROVIDERSSoapBinding"
contract="ServiceReference1.ProviderRemote" name="PROVIDERS" />
</client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
但是,从我的控制台应用程序中点击它时出现以下错误:
HTTP请求未经授权使用客户端身份验证方案'Ntlm'.从服务器收到的身份验证标头是"Negotiate,NTLM".
有人可以帮帮我吗?
您可以使用wftech消除客户端问题,这是一个旧工具,但我发现它在诊断身份验证问题时很有用.wfetch允许您指定NTLM,Negotiate和kerberos,这可能会帮助您更好地理解您的问题.当您尝试调用服务并且wfetch对WCF一无所知时,我建议将端点绑定(PROVIDERSSoapBinding)应用于serviceMetadata,然后您可以使用相同的安全设置对服务执行WSDL的HTTP GET.
您可以使用的另一个选项是强制服务器使用NTLM,您可以通过编辑元数据库(IIS 6)和删除Negotiate设置来执行此操作,有关详细信息,请访问http://support.microsoft.com/ kb/215383.
如果您使用的是IIS 7.x,那么方法略有不同,有关如何配置身份验证提供程序的详细信息,请访问http://www.iis.net/configreference/system.webserver/security/authentication/windowsauthentication.
我注意到你用xxx.xx.xx.xxx阻止了服务器地址,所以我猜这是一个IP地址而不是服务器名称,这可能会导致身份验证问题,所以如果可能的话尝试瞄准机器名称.
对不起,我没有给你答案,而是更接近问题的指示,但我希望它有所帮助.
我最后说我遇到了同样的问题而且我唯一的办法是使用Kerberos而不是NTLM,不要忘记如果你沿着这条路走下去,你需要为服务注册一个SPN.
如果您的客户端和服务都安装在同一台机器上,并且您遇到了正确(阅读:在其他地方尝试和测试过)客户端和服务配置的问题,那么这可能值得检查。
检查主机文件中的主机条目
%windir%/system32/drivers/etc/hosts
检查您是否正在使用主机名访问 Web 服务,并且该主机名是否已与上述主机文件中的 IP 地址相关联。如果是,NTLM/Windows 凭据将不会从客户端传递到服务,因为对该主机名的任何请求都将在机器级别再次路由。
尝试以下任一方法
编辑:不知何故,上述情况与负载平衡方案相关。但是,如果无法删除主机条目,则禁用机器上的环回检查会有所帮助。参考文章https://support.microsoft.com/en-us/kb/896861中的方法 2
| 归档时间: |
|
| 查看次数: |
121275 次 |
| 最近记录: |