我刚刚花了 2 天时间调试以下错误,所以我很难分享我的发现。
场景是这样的:我有一个托管在 IIS7 上的 WCF 服务。该服务使用 basicHttpBinding,并将安全模式设置为 TransportCredentialOnly。该网站已启用匿名身份验证和 Windows 身份验证。网站的应用程序池在域帐户下运行,该帐户在网站的物理文件夹中拥有所有可能的权限。从 Internet Explorer 浏览服务的 .svc 是有效的,但是当我们尝试从客户端调用服务方法时,我们收到一个错误:"HTTP 请求未经授权,客户端身份验证方案协商"。此外,IIS 日志显示每次调用该方法时都会出现 401.5 错误,对于此安全设置来说,这是正常的,但后面应该跟着 200,这里的情况并非如此。
最后,我们通过检查默认网站上的身份验证设置设法解决了这个问题。Windows身份验证在那里被禁用。我们启用了它,服务开始工作。您可能会认为,网站设置会覆盖这一点,但事实并非如此。因此,请避免整天进行电击,并检查此设置。
干杯!
这是您需要在所有图层上匹配设置的问题:
- 客户端上的应用程序配置 。
- IIS 设置
- 应用池标识
- svc 文件上的 NTFS 权限
- 服务器上的 Web.Config
所有这些都需要匹配才能正常工作。