如何禁用WCF数据服务的身份验证方案

Jac*_*eja 7 wcf wcf-data-services

当我将WCF数据服务部署到生产主机时,我开始收到以下错误(或类似,具体取决于哪些身份验证方案处于活动状态):

IIS指定了身份验证方案"Basic,Anonymous",但绑定仅支持一种身份验证方案的规范.有效的身份验证方案是Digest,Negotiate,NTLM,Basic或Anonymous.更改IIS设置,以便仅使用单个身份验证方案.

显然,WCF数据服务(通常是WCF?)无法处理多次激活的身份验证方案.

好的,所以我知道我可以通过IIS控制面板在Web应用程序上禁用所有但一个身份验证方案....通过支持请求!!

有没有办法在web.config中的每个服务级别指定一个身份验证方案?

我认为这可能会像改变那样直接<system.serviceModel>但是......事实证明,WCF数据服务不会在Web配置中自行配置.如果你看一下DataService<>它没有实现的类,[ServiceContract]你就不能在<service><endpoint>...中引用它...我认为通过XML更改其配置需要它.

PS我们的主机使用的是II6,但IIS6和IIS7的两种解决方案都很受欢迎.

dmp*_*lla 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>
Run Code Online (Sandbox Code Playgroud)

在那之后,您可以使用标准WCF配置元素开始配置所有方式.

其次,要为IIS中的特定服务启用或禁用身份验证方法,您可以执行以下操作:

在IIS的管理单元中右键单击您的服务文件(即yourservice.svc),然后单击属性.进入属性后,转到文件安全性选项卡,然后选择身份验证和访问控制组框中的编辑按钮.之后就像在IIS中设置目录安全性一样.

根据任何故障排除的最后一个建议,重要的是启用wcf诊断,同时使用xml配置配置,使用WCF编写,数据服务日志记录是根据wcf丰富且非常丰富的信息.

您可以在WCF管理和诊断中找到更多相关信息

我希望我能够帮助你解决问题

让我知道事情是怎么回事.

问候

丹尼尔波特拉

更新:

你好Schneider

要在下面的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>
Run Code Online (Sandbox Code Playgroud)

有关其他类型的身份验证,请查看MSDN库以获取示例

安全的常见方案