制作Wcf服务IntegratedWindowsAuthentication
当我在IIS中设置Windows身份validation启用和匿名禁用时,我收到以下错误。
主机上配置的身份validation方案(’IntegratedWindowsAuthentication’)不允许在绑定’BasicHttpBinding’(’Anonymous’)上配置的身份validation方案。 请确保将SecurityMode设置为Transport或TransportCredentialOnly。 此外,可以通过IIS管理工具,通过ServiceHost.Authentication.AuthenticationSchemes属性,在元素的应用程序配置文件中更改此应用程序的身份validation方案,通过更新绑定上的ClientCredentialType属性,或通过调整HttpTransportBindingElement上的AuthenticationScheme属性。
我的Wcf服务的web.config如下……
请指教..
在.Net 4.0+中,如果未在
另外,我可能会补充说,如果您的WCF服务需要身份validation,这意味着您需要使用真实用户帐户使用服务,或者您需要授予DOMAIN \ CLIENTCOMPUTERNAME $帐户访问服务的权限 – 因此,也许适合许多人的解决方案可能是改变配置,而不是允许匿名访问(我的回答中没有讨论)。 不过,我确实有时会选择使用Windows(Kerberos)身份validation来保护我的WCF服务。
添加这个对我有用。
从.NET 4.0更新到.NET 4.5.2时出现此错误。 我更改了clientCredentialType
至
但是,设置clientCredentialType =“Windows”同样有效。
它解决了我的问题。
像其他答案一样,我需要将Web.config中的绑定更新为:
但我还需要更新绑定的实例化:
var binding = new BasicHttpBinding { MaxReceivedMessageSize = 1000000, ReaderQuotas = { MaxDepth = 200 } }; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
我添加了一个webHttpBinding并指向我的端点,安全设置需要工作。 没有它我的端点使用默认的WCF配置绑定:
我不完全确定原因,但是当我将’Factory’属性添加到我的.SVC文件(您需要将其显式拖动到Visual Studio)时,一切正常 – 无需更改Web.config中的默认设置!
我添加了Factory =“System.ServiceModel.Activation.WebServiceHostFactory”,所以我的.SVC文件来自:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceNameSpace.ServiceName" CodeBehind="ServiceName.svc.cs" %>
对此:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceNameSpace.ServiceName" CodeBehind="ServiceName.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
唯一的副作用似乎是当您在浏览器中单击.SVC文件时,您会收到“未找到端点”错误,但无论如何,当您正确调用它时,该服务正常工作。 如前所述,我使用.NET 4.6( 简化WCF配置 )的默认Web.config,因此我可能需要添加端点详细信息以便再次使用。
在使用现有的WCF Web URL时,我遇到了同样的问题。 我尝试了这里提到的所有答案,但总而言之,最终只有两件事情有所帮助。
- 更改“打开和关闭Windowsfunction”中的设置。
在本地IIS服务器中启用匿名身份validation和Windows身份validation。