2009-10-13 12 views
5

J'ai un service WCF qui peut fonctionner sous la forme d'une application console et d'un service Windows. J'ai récemment copié l'application de la console sur un serveur W2K3 avec les paramètres de sécurité suivants:Sécurité WCF dans un service 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> 

sécurité fonctionne très bien sans problème. J'ai exactement le même code, mais en cours d'exécution dans un service Windows et je reçois l'erreur suivante lorsque je tente d'appeler l'une des méthodes d'un client:

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." 

L'exception ne me dit rien. Je suppose qu'il a quelque chose à voir avec l'accès aux ressources système du service Windows. J'ai essayé de l'exécuter sous le même compte que l'application de console, mais pas de chance. Quelqu'un a-t-il une idée?

+0

Ouch cela m'a donné une tête endolorie ... – James

+0

Informations sur la sécurité est: \t \t \t \t \t \t \t \t Alphonso

Répondre

0

Vous utilisez un validateur utilisateur/nom personnalisé: le service Windows a-t-il accès à ce (s) fichier (s)?

Sous quel compte exécutez-vous le service NT?

Fonctionne-t-il avec toutes les sécurités désactivées? (Juste pour voir)

Marc

+0

message d'erreur de diagnostic = Le protocole de sécurité ne peut pas vérifier le message entrant. Rien d'autre. Je peux confirmer que le service fonctionne sans sécurité. J'ai essayé d'exécuter le service sous "Système local" et "Administrateur" Le validateur de nom personnalisé est en cours de validation par rapport à une section personnalisée dans app.config. – Alphonso

1

Ceci est une erreur qui a parfois rien à voir avec la sécurité.

Je vous recommande d'essayer d'abord de le faire fonctionner sans sécurité, juste avec la sécurité des messages, puis avec le transport et enfin avec TransportWithMessageCredential.

Aussi, si vous utilisez l'application de la console et l'application de service Windows sur la même machine assurez-vous d'arrêter l'application de la console avant de démarrer le service Windows, afin d'éviter un conflit de port

1

Activer le diagnostic sur le service . Cela devrait vous donner une assez bonne idée de savoir si le service reçoit même le message et où le service émet une exception.

1

Mise à jour - J'ai changé le customUserNamePasswordValidatorType de Custom à Windows. Cela a fonctionné correctement dans la console et le service Windows. Je peux seulement supposer que quelque chose dans le validateur personnalisé était à l'origine du problème.

Le validateur personnalisé a utilisé une section de configuration personnalisée dans App.config pour valider l'ID utilisateur et le mot de passe. J'aurais pensé que cela aurait fonctionné d'un service de fenêtres si.

Merci à tous ceux qui ont posté une réponse.

Questions connexes