WCF – Windows身份validation – 安全设置需要匿名

我努力让WCF服务在我们的服务器上的IIS上运行。 部署后,我最终得到一个错误消息:

此服务的安全设置需要“匿名”身份validation,但不支持承载此服务的IIS应用程序。

我想使用Windows身份validation,因此我禁用了匿名访问。 还要注意,有aspNetCompatibilityEnabled(如果这有什么区别)。

这是我的web.config:

<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> <bindings> <webHttpBinding> <binding name="default"> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> </security> </binding> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="AspNetAjaxBehavior"> <enableWebScript /> <webHttp /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="defaultServiceBehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> <serviceDebug includeExceptionDetailInFaults="true" /> <serviceAuthorization principalPermissionMode="UseWindowsGroups" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior"> <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" contract="xxx.Web.Services.IRequestService" bindingConfiguration="default"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> </service> </services> </system.serviceModel> 

我search了所有在互联网上没有运气。 任何线索都不胜感激。

所以这似乎是很常见的问题。 重点是从你的绑定中删除mex:

 <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> 

另外你启用匿名访问在IIS和你的web.config你确保匿名访问被拒绝。

希望这会帮助别人的灵魂。 (我100%肯定我用mex去掉了。:-O)

你可以检查这一个 。 我设法使其按预期工作。

 <configuration> ... <system.serviceModel> ... <bindings> <basicHttpBinding> <binding> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" /> </security> </binding> </basicHttpBinding> </bindings> ... </system.serviceModel> ... </configuration> 

只是使用你的服务绑定mex太。

所以改变你的当前configuration:

 <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> 

 <endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint> 

这应该可以解决问题

匿名身份validation可以,并且在某些情况下必须为服务启用,但不是为站点启用。

因此,请检查您网站的“根”身份validation是否仅启用了Windows身份validation。 然后展开您的网站,select“服务”文件夹,并确保您的服务启用了Windows和匿名身份validation。

我有相同的工作环境,只有在这些环境中的差异是服务的身份validation。 问题在我的情况是没有引起被选中的提供商(Ntlm或Negotiate),但网站和服务的身份validation设置。

至less我有基本的MSSQL主数据服务网站及服务相同的错误消息,这是解决scheme。 在运行服务时,我确实得到了错误,但是网站几乎可以正常工作,MDS Explorer不起作用,因为服务的身份validation设置起初是错误的。 在创build新的MDS站点时,这种未命中configuration的原因可能是MDSconfigurationpipe理器中的一个错误?

所以在我的情况下,问题不是通过对web.config和ApplicationHost.config文件进行任何特殊编辑来解决的,我没有做任何编辑configuration文件。 只需为网站select正确的身份validation设置,并在IISpipe理器中进行服务即可。 我不确定在这里是这种情况,但也许值得去尝试一下?

它为我工作,当我删除'mex'端点,并设置clientCredentialType ='Ntlm'我在SharePoint托pipe我的WCF。

是的,它看起来像你需要完全删除mex端点。 设置

 <serviceMetadata httpGetEnabled="false"/> 

独自一人没有工作。 谢谢!

附加解决scheme

你只需要确保服务名称和合同是正确的。

希望它有助于某种方式。

看来这个MEX绑定问题已经在.NET 4.0中修复了。 更改我们的服务器的应用程序池.NET CLR版本从2.0到4.0解决了这个问题。