2010-03-04 9 views
3

Lorsque j'exécute un service WCF sur ma machine de développement, cela fonctionne tant que le client est connecté au domaine.SecurityNegotiationException sur le client de domaine déconnecté

Lorsque la machine est déconnectée, je reçois l'exception suivante:

System.ServiceModel.Security.SecurityNegotiationException: Un appel à SSPI a échoué, sauf exception intérieure. System.Security.Authentication.AuthenticationException: Un appel à SSPI a échoué, voir l'exception interne. ---> System.ComponentModel.Win32Exception: Le système a détecté une tentative possible de compromettre la sécurité. S'il vous plaît assurez-vous que vous pouvez contacter le serveur que vous authentifié

Le service utilise la sécurité interne (<transport clientCredentialType="Windows" protectionLevel="None"/>) donc je ne peux pas tourner facilement hors tension.

Y at-il un moyen de contourner ce problème afin que je puisse tester le service lorsque je ne suis pas connecté?

Répondre

3

Probablement ne fonctionnera pas lorsqu'il n'est pas connecté au domaine.

La sécurité WCF par défaut pour plusieurs liaisons est "Windows", par ex. vos informations d'identification utilisateur en cours sont transmises au service WCF et le service tente ensuite de valider ces informations d'identification utilisateur sur le domaine Windows.

Si vous n'êtes pas connecté, cette vérification ne peut pas avoir lieu, donc le service WCF refusera l'appel. Fonctionne comme conçu, je dirais :-)

Peut-être que vous pourriez exposer un second point de terminaison pour votre service ("développement de développement local") qui ne nécessite pas l'authentification Windows? En dehors du domaine, connectez-vous simplement à ce point de terminaison non sécurisé afin de pouvoir au moins tester le service et son fonctionnement interne.

+0

Merci pour votre réponse même si j'espérais une solution de contournement simple :) – laktak

3

Pour contourner ce problème consiste à enlever la UserPrincipal de l'application client (en l'app.config)

<identity> 
    <userPrincipalName value="SOME-DOMAIN\SomeUser" /> 
</identity>