制作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配置将使用“匿名”配置。 如果从元素中删除name =“BasicHttpEndpointBinding”,或者将该元素复制为没有name属性的新元素,它将成为WCF服务将使用的默认匿名绑定。 这在您需要服务以及使用可能不具有相同配置的WCF服务的情况下通常很有用 – 但至少您可以为没有特定配置集的服务设置默认配置。 默认/匿名概念也适用于元素。

           

另外,我可能会补充说,如果您的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时,我遇到了同样的问题。 我尝试了这里提到的所有答案,但总而言之,最终只有两件事情有所帮助。

  1. 更改“打开和关闭Windowsfunction”中的设置。

在此处输入图像描述

在本地IIS服务器中启用匿名身份validation和Windows身份validation。 在此处输入图像描述