Erro do WCF: o chamador não foi autenticado pelo serviço

Eu estou tentando acessar meu serviço WCF em um servidor do meu aplicativo de console do cliente para testes. Eu estou recebendo o seguinte erro:

O chamador não foi autenticado pelo serviço

Eu estou usando o wsHttpBinding . Não tenho certeza de que tipo de autenticação o serviço está esperando?

           

Atualização Funciona se eu alterar minha binding para (de wsHttpBinding) no servidor IIS 7.0 hospedado no Windows

Se você usar basicHttpBinding, configure a segurança do terminal como “None” e transporte clientCredintialType para “None”.

              

Além disso, verifique se o diretório Métodos de autenticação no IIS para ativar o access anônimo

Entendi.

Se você quiser usar wshttpbinding, você precisa adicionar credenciais do Windows como abaixo.

 svc.ClientCredentials.Windows.ClientCredential.UserName = "abc"; svc.ClientCredentials.Windows.ClientCredential.Password = "xxx"; 

obrigado

Você já tentou usar basicHttpBinding em vez de wsHttpBinding? Se não precisar de nenhuma autenticação e as implementações Ws- * não forem necessárias, você provavelmente ficará melhor com o basicHttpBinding antigo. O WsHttpBinding implementa o WS-Security para segurança e autenticação de mensagens.

definir access anônimo em seu diretório virtual

escreva as credenciais a seguir para o seu serviço

 ADTService.ServiceClient adtService = new ADTService.ServiceClient(); adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname"; adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword"; adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname"; 

Depois disso, você chama seus methods de serviço da Web.

Se você estiver usando um site auto hospedado como eu, a maneira de evitar esse problema (conforme descrito acima) é estipular no host e no lado do cliente que o modo de segurança wsHttpBinding = NONE.

Ao criar a binding, tanto no cliente quanto no host, você pode usar este código:

  Dim binding as System.ServiceModel.WSHttpBinding binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None) 

ou

  System.ServiceModel.WSHttpBinding binding binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None); 

Nós nos deparamos com um problema estranho em que a pasta onde o serviço WCF estava sendo hospedado tinha algumas permissions que estavam causando o problema.

Consegui resolver o problema compartilhado seguindo as etapas abaixo:

  1. Vá para IIS -> Sites -> Seu Site ->
  2. Painel de Visualização de Recursos -> Autenticação
  3. Definir autenticação anônima para desativado
  4. Definir a autenticação do Windows para habilitado

insira a descrição da imagem aqui

se necessário para especificar o domínio (que autentica o nome de usuário e a senha que o cliente usa) no webconfig, você pode colocar isso na seção de serviço de serviços system.serviceModel:

    

e no cliente, especifique domínio e nome de usuário e senha:

  client.ClientCredentials.Windows.ClientCredential.Domain = "example.com"; client.ClientCredentials.Windows.ClientCredential.UserName = "UserName "; client.ClientCredentials.Windows.ClientCredential.Password = "Password"; 

Isso pode ser causado se o cliente estiver em um domínio diferente do servidor.

Eu encontrei isso ao testar um dos meus aplicativos do meu PC (cliente) para o meu servidor de teste (nuvem) e a solução mais simples que eu poderia pensar era a configuração de uma VPN.

Eu também tive o mesmo problema no wsHtppBinding . E eu só tinha que adicionar o modo de security apontando para none , que resolveu o meu problema e não há necessidade de mudar para basicHttpBinding . Marque Aqui e verifique como desabilitar a segurança do WCF. Verifique a alteração de configuração abaixo para referência:

         

Por que você não pode simplesmente remover a configuração de segurança completamente para wsHttpBinding (“none” em vez de “message” ou “transport”)?