Error de WCF: el servicio no autenticó a la persona que llama

Estoy intentando acceder a mi servicio WCF en un servidor desde la aplicación de mi consola cliente para realizar pruebas. Estoy teniendo el siguiente error:

La persona que llama no fue autenticada por el servicio

Estoy usando wsHttpBinding . No estoy seguro de qué tipo de autenticación espera el servicio?

           

Actualizar Funciona si cambio mi enlace a (desde wsHttpBinding) en el servidor IIS 7.0 alojado, Windows 2008

Si usa basicHttpBinding, configure la seguridad del punto final en “Ninguno” y transporte clientCredintialType a “Ninguno”.

              

Además, asegúrese de que el directorio Authentication Methods in IIS habilite el acceso anónimo

Entiendo.

Si desea usar wshttpbinding, debe agregar las credenciales de Windows como se muestra a continuación.

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

Gracias

¿Has probado el uso de basicHttpBinding en lugar de wsHttpBinding? Si no necesita ninguna autenticación y las implementaciones de Ws- * no son necesarias, probablemente sea mejor con el simple basicHttpBinding. WsHttpBinding implementa WS-Security para seguridad y autenticación de mensajes.

establecer el acceso anónimo en su directorio virtual

escriba las siguientes credenciales a su servicio

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

después de eso, llama a los métodos de tu servicio web.

Si está utilizando un sitio alojado como yo, la forma de evitar este problema (como se describe arriba) es estipular en el lado del host y del cliente que el modo de seguridad wsHttpBinding = NINGUNO.

Al crear el enlace, tanto en el cliente como en el host, puede usar este código:

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

o

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

Nos encontramos con un problema extraño en el que la carpeta donde se hospedaba el servicio WCF tenía algunos permisos que causaban el problema.

Pude resolver el problema compartido siguiendo los pasos a continuación:

  1. Vaya a IIS -> Sitios -> Su sitio ->
  2. Características Panel de Vista -> Autenticación
  3. Establecer la autenticación anónima a deshabilitada
  4. Establecer Autenticación de Windows para Habilitar

enter image description here

si es necesario para especificar el dominio (que autentica el nombre de usuario y la contraseña que usa el cliente) en webconfig, puede ponerlo en la sección del servicio de servicios system.serviceModel:

    

y en el cliente especifique dominio y nombre de usuario y contraseña:

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

Esto puede deberse a que el cliente se encuentra en un dominio diferente al del servidor.

Me encontré con esto cuando probaba una de mis aplicaciones desde mi PC (cliente) a mi servidor de pruebas (en la nube) y la solución más simple que podía pensar era configurar un vpn.

También tuve el mismo problema en wsHtppBinding . Y solo tuve que agregar el modo de security apunta a none , eso resolvió mi problema y no es necesario cambiar a basicHttpBinding . Marque Aquí y compruebe cómo deshabilitar la seguridad de WCF. Verifique el siguiente cambio de configuración para referencia:

         

¿Por qué no puede simplemente eliminar la configuración de seguridad para wsHttpBinding (“ninguno” en lugar de “mensaje” o “transporte”)?