2008-11-12 16 views
38

Estoy intentando acceder a mi servicio WCF en un servidor desde la aplicación de mi consola cliente para realizar pruebas. Estoy consiguiendo el error siguiente:Error de WCF: la persona que llama no fue autenticada por el servicio

The caller was not authenticated by the service

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



<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyTrakerService.MyTrakerServiceBehavior"> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

actualización Funciona si cambio de unirse a <endpoint "basicHttpBinding" ... /> (desde wsHttpBinding) en IIS 7.0 alojado, servidor de Windows 2008

+0

Edite su publicación y agregue las secciones relevantes de su archivo .config. – Will

+0

¿Cómo se aloja el servicio WCF que está intentando consumir? –

+0

Si está alojado en IIS, ¿en qué está configurada la seguridad del directorio? ¿Anónimo o Windows integrado? – kd7

Respuesta

4

¿Ha intentado utilizar 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.

+0

Esto funcionó para mí, muchas gracias. –

24

Si utiliza basicHttpBinding, configure la seguridad del extremo en "Ninguno" y transporte clientCredintialType a "Ninguno".

<bindings> 
    <basicHttpBinding> 
     <binding name="MyBasicHttpBinding"> 
      <security mode="None"> 
       <transport clientCredentialType="None" /> 
      </security> 
     </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="MyServiceBehavior" name="MyService"> 
     <endpoint 
      binding="basicHttpBinding" 
      bindingConfiguration="MyBasicHttpBinding" 
      name="basicEndPoint"  
      contract="IMyService" 
     /> 
</service> 

También, asegúrese de que el directorio de métodos de autenticación de IIS para habilitar el acceso anónimo

+0

He resuelto mi error seguido del código anterior. ¡¡Gracias!! –

+0

@KhumeshKumawat Puede crear y validar su propia respuesta si lo desea o simplemente validar una de las existentes (incluso si no es exactamente la que usted eligió). Su pregunta tiene más de 60 000 vistas, por lo que es importante. Merece una respuesta "oficial". – Askolein

21

lo tengo.

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

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

gracias

+4

Y es posible que también necesite el dominio (.ClientCredentials.Windows.ClientCredential.Domain) – Retne

+0

Tengo una situación extraña. Desde una máquina puedo llegar al servicio sin ClientCredential.Domain explícito y desde otro no funcionó sin el dominio –

1

conjunto el acceso anónimo en el directorio virtual de

escritura siguiente 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 que llame a su métodos de servicio web.

-1

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

+9

. Cuando alguien tiene un problema con su seguridad, no es muy constructivo responderlas con la pregunta "¿por qué tiene que usar seguridad?" ? " Este es un problema legítimo y, suponiendo que su aplicación requiera una configuración segura, necesitan una respuesta, no una pregunta estúpida. –

+0

No estoy de acuerdo: cuando comienza con cualquier tecnología en esta área y utiliza proyectos de muestra, es muy fácil terminar con una gran cantidad de elementos de seguridad habilitados por defecto que no siempre solicitó. – Andy

1

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

Al crear la unión, tanto en el cliente y el host, puede utilizar 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); 
1

nos encontramos con un problema raro en la carpeta en la WCF el servicio se hospedaba tenía algunos permisos que causaban el problema.

+2

¿Y cuál es el valor agregado de esta respuesta? – Askolein

0

si es necesario para especificar el dominio (que authecticates nombre de usuario y la contraseña que utiliza el cliente) en webconfig se puede poner esto en la sección system.serviceModel servicio de servicios:

<identity>   
<servicePrincipalName value="example.com" /> 
</identity> 

y en el cliente especifique el 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"; 
1

que fue capaz de resolver el problema compartida siguiendo los pasos siguientes:

  1. Ir a IIS ->Sitios ->su sitio ->
  2. panel Vista Características ->autenticación
  3. Establecer autenticación anónima a discapacitados
  4. Establecer de Windows Autenticación a habilitado

enter image description here

0

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.

Cuestiones relacionadas