Wcf 主机上配置的身份验证方案(';匿名';)不允许绑定上配置的身份验证方案;基本TPBinding';(';协商';)。

Wcf 主机上配置的身份验证方案(';匿名';)不允许绑定上配置的身份验证方案;基本TPBinding';(';协商';)。,wcf,wcf-security,basichttpbinding,transport-security,Wcf,Wcf Security,Basichttpbinding,Transport Security,在主机(“匿名”)上配置的身份验证方案不允许在绑定“BasicHttpBinding”(“协商”)上配置的身份验证方案。请确保SecurityMode设置为Transport或TransportCredentialOnly。此外,通过IIS管理工具,通过元素的应用程序配置文件中的ServiceHost.authentication.AuthenticationSchemes属性,通过更新绑定上的ClientCredentialType属性,更改此应用程序的身份验证方案,可以解决此问题,或者通过调

在主机(“匿名”)上配置的身份验证方案不允许在绑定“BasicHttpBinding”(“协商”)上配置的身份验证方案。请确保SecurityMode设置为Transport或TransportCredentialOnly。此外,通过IIS管理工具,通过元素的应用程序配置文件中的ServiceHost.authentication.AuthenticationSchemes属性,通过更新绑定上的ClientCredentialType属性,更改此应用程序的身份验证方案,可以解决此问题,或者通过调整HttpTransportBindingElement上的AuthenticationScheme属性

当本地IIS Web服务器中未安装身份验证模式时,可能会显示此错误。转到控制面板->程序->打开或关闭Windows功能

检查Internet信息服务->世界宽带服务->安全-> 并启用基本、Windows、摘要身份验证模式。打开IIS并导航到应用程序,然后转到“身份验证”部分并启用所需的身份验证模式。
对我来说,身份验证模式并没有在安装后或Web服务器重新启动后立即显示。重新启动计算机会在Web应用程序中显示它们。

当我遇到这种情况时,我发现当使用“发现”按钮添加服务引用时,Visual Studio正在使用“默认网站”托管我的服务。因此,为了修复此问题,我必须启用我的服务在IIS中的“默认网站”上使用的身份验证。因为我使用的是Windows身份验证,所以在IIS中为“默认网站”启用了它,这似乎解决了我的问题。当然,如果您的服务正在使用其他类型的身份验证,则必须启用正确的身份验证


要配置身份验证,请打开IIS。在“站点”下,选择“默认网站”,然后选择身份验证。

如果在Visual Studio中调试时遇到此问题,请选择项目并在属性中更改身份验证


如有必要-安装功能,打开IIS管理器,打开服务器功能:

打开“身份验证”功能:

启用/禁用所需的:


我通过向IIS身份验证提供程序添加协商解决了此问题:

在我的例子中,问题在于重构后的服务配置不好。 如果service标记中的name属性未指向现有类,则可能会出现此异常,这将完全误导您

所以记住这个名字:

<service behaviorConfiguration="FooBehavior" name="Fully.Qualified.Name.Of.Class.Implementing.Service.Contract.Here"> 


仅重新启动IIS修复了我的问题

如果您试图在IIS中配置“基本身份验证”服务(即,它会提示输入用户名/密码),则安全传输设置应设置如下:

用于basicHttpBinding

<security mode="Transport">
  <transport clientCredentialType="Basic" />
  <message clientCredentialType="UserName" />
</security>
<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

用于webHttpBinding

<security mode="Transport">
  <transport clientCredentialType="Basic" />
  <message clientCredentialType="UserName" />
</security>
<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

这对我来说是发生的,因为该站点为Windows身份验证配置了WCF

<security mode="Transport">
    <transport clientCredentialType="Windows" />
</security>


但是,IIS禁用了Windows身份验证并启用了匿名身份验证。修复方法是在IIS中启用Windows身份验证。

我在使用IIS Express调试项目时遇到类似问题。通过“属性”窗口启用匿名身份验证可以解决IIS Express用户的问题。请确认csproj中的字段,因为我发现该值与我在VS2017中看到的值不匹配。这正是我要查找的。谢谢注意-仅在Windows功能打开或关闭>IIS下启用Windows身份验证不起作用。您需要启用基本、摘要和Windows身份验证。