我正努力让我们的服务器上的IIS上运行WCF服务。部署后,我最终收到一条错误消息:
此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用。
我想使用Windows身份验证,因此我禁用了匿名访问。另请注意,有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>
我在互联网上搜索没有运气。任何线索都非常感谢。
答案 0 :(得分:42)
所以这似乎是很常见的问题。重点是从绑定中删除mex:
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
或者,您可以在IIS和web.config中启用匿名访问,确保匿名访问被拒绝。
希望这会有助于其他一些灵魂。 (我100%肯定我尝试用mex删除。: - O)
答案 1 :(得分:14)
您可以查看此one。 我设法让它按预期工作。
<configuration>
...
<system.serviceModel>
...
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
...
</system.serviceModel>
...
</configuration>
答案 2 :(得分:11)
也可以将你的服务绑定用于mex。
所以改变你当前的配置:
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
到
<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>
那应该解决问题
答案 3 :(得分:2)
匿名身份验证可以,在某些情况下必须为服务启用,但不能为站点启用。
因此,请检查您网站的“root”身份验证是否仅启用了Windows身份验证。然后展开您的站点,选择“服务”文件夹并确保您的服务启用了Windows和匿名身份验证。
我有相同的工作环境,只有这些环境的差异才是服务的身份验证。在我的情况下问题不是选择提供商(Ntlm或Negotiate),而是网站和服务的身份验证设置。
至少我与基本的MSSQL Master Data Services网站有相同的错误信息&amp;服务,这是解决方案。我在运行该服务时确实收到了错误但该网站工作正常,MDS Explorer无法正常工作,因为服务的身份验证设置最初是错误的。在创建新的MDS站点时,这种错误配置的原因可能是MDS配置管理器中的错误?
所以在我的情况下,通过对web.config和ApplicationHost.config文件进行任何特殊编辑都无法解决问题,我没有对配置文件进行任何编辑。刚刚为IIS管理器中的网站及其服务选择了正确的身份验证设置。我不确定这里的情况如何,但也许值得一试?
答案 4 :(得分:1)
当我删除'mex'端点并设置clientCredentialType ='Ntlm'时,它对我有用 我在SharePoint中托管我的WCF。
答案 5 :(得分:0)
是的,您似乎需要完全删除mex端点。设置
<serviceMetadata httpGetEnabled="false"/>
单独没有用。谢谢!
答案 6 :(得分:0)
其他解决方案:
您只需确保服务名称和合同正确无误。
希望它在某种程度上有所帮助。
答案 7 :(得分:0)
看来这个MEX绑定问题已在.NET 4.0中得到修复。将我们服务器的应用程序池.NET CLR版本从2.0更改为4.0可以解决问题。