2009-09-01 27 views
3

Je tente de créer un client minimal pour un service WCF, en utilisant WSHttpBinding avec SecurityMode: Message via une interface de canal direct.Client minimal prenant en charge la sécurité au niveau des messages sur l'interface de canal

Mon code actuel est très simple:

EndpointIdentity i = EndpointIdentity.CreateX509CertificateIdentity(clientCertificate); 
EndpointAddress a = new EndpointAddress(new Uri("http://myServerUrl"), i); 
WSHttpBinding b= new WSHttpBinding(SecurityMode.Message); 
ChannelFactory<IRequestChannel> channelFactory = new ChannelFactory<IRequestChannel>(b, a); 
channelFactory.Open(); 
IRequestChannel channel = channelFactory.CreateChannel(); 
channel.Open(); 
Message response = channel.Request(requestMessage); 

Le ClientCertificate se charge correctement. Cependant, par la suite, je ne sais pas si j'appelle chaque fonction correctement.

Le fait est: La dernière ligne de l'extrait de code jette un MessageSecurityException avec le contenu

client ne peut pas déterminer le nom principal de service en fonction de l'identité dans l'adresse cible « http://myServerUrl » dans le but de SspiNegotiation/Kerberos. L'identité de l'adresse cible doit être une identité UPN (comme acmedomain \ alice) ou une identité SPN (comme host/bobs-machine).

Quelle pourrait être la raison de ce problème?

Répondre

0

Le clientCredentialType par défaut semble être Windows et c'est pourquoi vous obtenez une erreur liée à Sspi/Kerberos. Vous devez spécifier "Certificate" comme type d'informations d'identification et également définir le certificat réel dans le conteneur d'informations d'identification client. Consultez la section Client de ce lien pour plus de détails:

http://msdn.microsoft.com/en-us/library/ms733098.aspx