2009-10-13 16 views
5

Tengo un servicio WCF que se puede ejecutar como una aplicación de consola y un servicio de Windows. He copiado recientemente a la aplicación de consola a un servidor W2K3 con los siguientes parámetros de seguridad:WCF Seguridad en un servicio de Windows

<wsHttpBinding> 
<binding name="ServiceBinding_Security" transactionFlow="true" > 
    <security mode="TransportWithMessageCredential" > 
    <message clientCredentialType="UserName" /> 
    </security>   
</binding>    
</wsHttpBinding> 

<serviceCredentials> 
<userNameAuthentication userNamePasswordValidationMode="Custom" 
    customUserNamePasswordValidatorType="Common.CustomUserNameValidator, Common" /> 
</serviceCredentials> 

Security funciona bien y sin problemas. Tengo exactamente el mismo código, pero se ejecuta en un servicio de Windows y me sale el siguiente error cuando trato de llamar a cualquiera de los métodos de un cliente:

System.ServiceModel.Security.MessageSecurityException was unhandled 
Message="An unsecured or incorrectly secured fault was received from 
     the other party. See the inner FaultException for the fault code and detail." 
    Source="mscorlib" 
    StackTrace: 
    Server stack trace: 
     at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) 
     ...... 
    (lots of stacktrace info - not very useful) 

    InnerException: System.ServiceModel.FaultException 
     Message="An error occurred when verifying security for the message." 

La excepción me dice nada. Supongo que tiene algo que ver con el acceso a los recursos del sistema del Servicio de Windows. Intenté ejecutarlo con la misma cuenta que la aplicación de la consola, pero no tuve suerte. ¿Alguien tiene alguna idea?

+0

Ouch esto me dio un dolor de cabeza ... – James

+0

Info de seguridad es: \t \t \t \t \t \t \t \t Alphonso

Respuesta

0

Está utilizando un validador de usuario/nombre personalizado: ¿el servicio de Windows tiene acceso a ese (s) archivo (s)?

¿En qué cuenta está ejecutando el servicio NT?

¿Funciona con toda la seguridad apagada? (Sólo para ver)

Marc

+0

mensaje de error de diagnóstico = El protocolo de seguridad no puede verificar el mensaje entrante. Nada más. Puedo confirmar que el servicio funciona sin seguridad. He intentado ejecutar el servicio en "Sistema local" y "Administrador" El Validador de nombre personalizado está validando una sección personalizada en el app.config. – Alphonso

1

Este es un error que a veces no tiene nada que ver con la seguridad.

Le recomiendo que intente primero hacer que funcione sin seguridad, luego solo con la seguridad del mensaje, luego con el transporte y finalmente con TransportWithMessageCredential.

Además, si se está ejecutando la aplicación de consola y la aplicación de servicio de Windows en la misma máquina, asegúrese de detener la aplicación de consola antes de iniciar el servicio de Windows, con el fin de evitar un conflicto de puertos

1

Habilitar diagnósticos en el servicio . Eso debería darle una idea bastante buena de si el servicio está recibiendo el mensaje y si el servicio arroja una excepción.

1

Actualización - Cambié customUserNamePasswordValidatorType de Custom a Windows. Esto funcionó bien tanto en la consola como en el servicio de Windows. Solo puedo suponer que algo en el Validador personalizado estaba causando el problema.

El validador personalizado usó una sección de configuración personalizada en App.config para validar el ID de usuario y la Contraseña. Aunque hubiera pensado que esto hubiera funcionado desde un servicio de Windows.

Gracias a todos los que han publicado una respuesta.

Cuestiones relacionadas