在主机上配置的身份验证方案('Anonymous')不允许在绑定'BasicHttpBinding'('Negotiate')上配置的身份验证方案。请确保将 SecurityMode 设置为 Transport 或 TransportCredentialOnly。此外,可以通过 IIS 管理工具、通过 ServiceHost.Authentication.AuthenticationSchemes 属性、在元素的应用程序配置文件中更改此应用程序的身份验证方案、通过更新绑定上的 ClientCredentialType 属性或通过调整来解决此问题HttpTransportBindingElement 上的 AuthenticationScheme 属性。
9 回答
当您没有在本地 IIS Web 服务器中安装身份验证模式时,可能会显示此错误。转到控制面板 -> 程序 -> 打开或关闭 Windows 功能
检查 Internet 信息服务 -> 万维网服务 -> 安全 -> 并启用基本、Windows、摘要式身份验证模式。打开 IIS 并导航到您的应用程序,然后转到身份验证部分并启用所需的身份验证模式。对我来说,身份验证模式在安装后或网络服务器重新启动后没有立即显示。重新启动机器会在 web 应用程序中显示它们。
这发生在我身上,因为该站点已为 Windows 身份验证配置了 WCF ...
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
但是 IIS 禁用了 Windows 身份验证并启用了匿名身份验证。修复是在 IIS 中启用 Windows 身份验证。
当这发生在我身上时,我发现在使用“发现”按钮添加服务引用时,Visual Studio 正在使用“默认网站”来托管我的服务。所以要修复,我必须启用我的服务在 IIS 的“默认网站”上使用的身份验证。由于我使用的是 Windows 身份验证,因此为 IIS 中的“默认网站”启用它,这似乎解决了我的问题。当然,如果您的服务使用其他类型的身份验证,您将必须启用正确的身份验证。
要配置身份验证,请打开 IIS。在“站点”下,选择“默认网站”,然后选择身份验证。
如果您尝试在 IIS 中为“基本身份验证”配置服务(即,它会提示输入用户名/密码),则应按如下方式设置安全传输设置:
对于基本HttpBinding
<security mode="Transport">
<transport clientCredentialType="Basic" />
<message clientCredentialType="UserName" />
</security>
对于 webHttpBinding
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
只是重新启动 IIS 解决了我的问题
就我而言,问题在于重构后的服务配置错误。如果服务标签中的 name 属性不指向现有的类,你可能会得到这个异常,这将完全误导你。
所以记住这个名字:
<service behaviorConfiguration="FooBehavior" name="Fully.Qualified.Name.Of.Class.Implementing.Service.Contract.Here">