Pergunta

Quando implantei meus serviços de dados da WCF para hospedagem de produção, comecei a obter o seguinte erro (ou similar, dependendo de quais esquemas de autenticação estão ativos):

Os esquemas de autenticação especificados pelo IIS 'básicos, anônimos', mas a ligação suporta apenas a especificação de exatamente um esquema de autenticação. Os esquemas de autenticação válidos são digeridos, negociam, NTLM, BASIC ou Anonymous. Altere as configurações do IIS para que apenas um único esquema de autenticação seja usado.

Aparentemente, o WCF Data Services (WCF em geral?) Não pode lidar com mais de uma vez o esquema de autenticação ativo.

Ok, então estou ciente de que posso desativar o esquema de autenticação de tudo, mas um no aplicativo da web via Painel de Controle do IIS ... por meio de uma solicitação de suporte !!

Existe uma maneira de especificar um único esquema de autenticação em um nível por serviço no web.config?

Eu pensei que isso poderia ser tão direto quanto fazer uma mudança para <system.serviceModel> Mas ... acontece que Os serviços de dados do WCF não se configuram na configuração da web. Se você olhar para o DataService<> classe não implementa um [ServiceContract] Portanto, você não pode se referir a ele no <service><endpoint>... que presumo que seria necessário para alterar sua configuração via XML.

PS Nosso host está usando o II6, mas ambas as soluções para iis6 e iis7 apreciaram.

Foi útil?

Solução

Em primeiro lugar, é possível configurar serviços de dados no arquivo de configuração da web. O contrato usado pelo DataService é chamado System.data.services.irequestHandler.

Aqui está o que você pode fazer no arquivo de configuração da web para configurá -lo.

Na etiqueta de serviço do sistema.Servicemodel elemento Adicione o

<service name="{you service type name including the namespace i.e. myapplication.myservice}">
    <endpoint address="" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler">
    </endpoint>
</service>

Depois de ter isso, você pode começar a configurar todas as maneiras de coisas usando os elementos de configuração do WCF padrão.

Em segundo lugar, para ativar ou desabilitar métodos de autenticação para um serviço específico no IIS, você pode fazer o seguinte:

No snap in para o IIS, clique com o botão direito do mouse em seu arquivo de serviço (ou seja, seu serviço.svc) e clique em Propriedades. Uma vez em propriedades, vá para a guia Segurança do arquivo e escolha o botão Editar na caixa do grupo de autenticação e controle de acesso. Depois disso, é como configurar a segurança do diretório no IIS.

Como uma última sugestão de acordo com qualquer problema, é importante permitir que o WCF Disgnósticos enquanto você o configura usando a configuração XML, sendo escrito no WCF, o registro do Serviço de Dados é de acordo com o WCF é rico e muito informativo.

Você pode descobrir mais sobre isso em Administração e diagnóstico do WCF

Espero ter sido capaz de ajudá -lo com seu problema

Deixe -me saber como as coisas vão.

Cumprimentos

Daniel Portella

ATUALIZAR:

Oi Schneider

Para especificar o esquema de autenticação no XML lido abaixo

Para a autenticação do Windows como exemplo

<?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>

Para outros tipos de autenticação, verifique a biblioteca MSDN para obter exemplos

Cenários comuns para segurança

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top