当我将WCF数据服务部署到生产主机时,我开始收到以下错误(或类似取决于哪些身份验证方案处于活动状态):
IIS指定的身份验证方案 '基本,匿名',但具有约束力 仅支持准确的规范 一种认证方案。有效 身份验证方案是Digest, 谈判,NTLM,基本或匿名。 更改IIS设置,以便只有一个 使用单一认证方案。
显然,WCF数据服务(一般是WCF?)无法处理多次激活身份验证方案。
好的,所以我知道我可以通过IIS控制面板在Web应用程序上禁用一对一的身份验证方案....通过支持请求!!
有没有办法在web.config中的每个服务级别指定一个身份验证方案?
我认为这可能比对<system.serviceModel>
进行更改更直接但是......结果是 WCF数据服务未在Web配置中配置 即可。如果你查看DataService<>
类,它没有实现[ServiceContract]
因此你不能在<service><endpoint>
中引用它...我认为通过XML更改其配置需要它。
P.S。我们的主机使用的是II6,但这两种解决方案都适用于IIS6和IIS7赞赏。
答案 0 :(得分:16)
首先,可以在Web配置文件中配置数据服务。 DataService使用的合同称为System.Data.Services.IRequestHandler。
您可以在Web配置文件中执行以下操作来配置它。
在system.servicemodel元素的Service标记上添加
<service name="{you service type name including the namespace i.e. myapplication.myservice}">
<endpoint address="" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler">
</endpoint>
</service>
在那里,您可以使用标准WCF配置元素开始配置所有方式。
其次,要为IIS中的特定服务启用或禁用身份验证方法,您可以执行以下操作:
在IIS的管理单元中右键单击您的服务文件(即yourservice.svc),然后单击属性。 进入属性后,转到文件安全性选项卡,然后选择身份验证和访问控制组框中的编辑按钮。之后就像在IIS中设置目录安全性一样。
根据任何故障排除的最后一个建议,重要的是在使用xml配置配置时启用wcf诊断,在WCF中编写,数据服务日志记录是根据wcf丰富且非常丰富的信息。
您可以在WCF Administration and Diagnostics
上找到更多相关信息我希望我能帮助你解决问题
让我知道情况如何。
此致
Daniel Portella
更新:
施耐德先生
在下面的xml中指定身份验证方案
以Windows身份验证为例
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="MyBindingName" >
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="{you service type name including the namespace i.e. myapplication.myservice}">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="MyBindingName" contract="System.Data.Services.IRequestHandler">
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
对于其他类型的身份验证,请查看MSDN库以获取示例