2017-05-03 4 views
0

J'ai un service WCF hébergé sur un serveur Windows avec IIS et est défini sur l'authentification Windows (les utilisateurs de l'entreprise doivent utiliser l'authentification de domaine pour se connecter à leur bureau). Je veux appeler ce service WCF d'un Linux (Ubuntu) avec Mono. Nous utilisons le protocole netTcp, mais cela peut changer. Je crée le service en tant que:À partir du service WCF d'appel Mono avec l'authentification Windows

var s = new WebTestService.TestServiceClient(); 
s.ClientCredentials.UserName.UserName = "mydomain\\myuser"; 
s.ClientCredentials.UserName.Password = "myPassword"; 

Mais cela ne permet toujours pas la communication.

Est-ce que quelqu'un a une idée où corriger cette erreur? Est-il possible de résoudre? Merci d'avance.

Exception non gérée: System.IO.IOException: impossible de lire des données à partir de la connexion de transport: Connexion réinitialisée par l'homologue. ---> System.Net.Sockets.SocketException: connexion réinitialisée par un homologue à System.Net.Sockets.Socket.Receive (System.Byte [] buffer, System.Int32 offset, System.Int32 size, System.Net .Sockets.SocketFlags socketFlags) [0x00052] dans: 0 à System.Net.Sockets.NetworkStream.Read (System.Byte [] tampon, System.Int32 offset, taille System.Int32) [0x000b4] dans : 0
--- Fin d'exception interne trace de pile --- au (wrapper géré à native) System.Object: __ icall_wrapper_mono_remoting_wrapper (IntPtr, IntPtr)
au (wrapper remoting-invocation) MonoTest.WebTestService.ITestService : GetI dentity() à MonoTest.WebTestService.TestServiceClient.GetIdentity() [0x00007] dans < 27f805f676fd42ad978ebb382e24c2d7>: 0 à MonoTest.Program.Main (System.String [] args) [0x00050] dans < 27f805f676fd42ad978ebb382e24c2d7>: 0 [ ERREUR] FATAL UNHANDLED EXCEPTION: System.IO.IOException: Impossible de lire les données de la connexion de transport : Connexion réinitialisée par un homologue. ---> System.Net.Sockets.SocketException: connexion réinitialisée par un homologue à System.Net.Sockets.Socket.Receive (System.Byte [] buffer, System.Int32 offset, System.Int32 size, System.Net .Sockets.SocketFlags socketFlags) [0x00052] dans: 0 à System.Net.Sockets.NetworkStream.Read (System.Byte [] tampon, System.Int32 offset, taille System.Int32) [0x000b4] dans : 0 --- Fin d'exception interne trace de pile --- au (wrapper géré à native) System.Object: __ icall_wrapper_mono_remoting_wrapper (IntPtr, IntPtr)
au (remoting-invocation wrapper) MonoTest.WebTestService.ITestService: getIdentity() à MonoTest.WebTes tService.TestServiceClient.GetIdentity() [0x00007] dans < 27f805f676fd42ad978ebb382e24c2d7>: 0 à MonoTest.Program.Main (System.String [] args) [0x00050] dans < 27f805f676fd42ad978ebb382e24c2d7>: 0

+0

Je pense qu'il y a d'autres problèmes en jeu ici. Pouvez-vous le faire fonctionner sans authentification d'abord, puis ajouter l'authentification une fois qu'il fonctionne? – Popo

+1

L'authentification anonyme fonctionne comme un charme. –

Répondre

1

J'utilise un nom d'utilisateur et mot de passe pour l'authentification windows dans un de mes services Web WCF, j'attribuer le nom d'utilisateur et mot de passe comme ceci:

s.ClientCredentials.Windows.ClientCredential.UserName = "mydomain\\myuser"; 
//in my case I don't use a domain though. 
s.ClientCredentials.Windows.ClientCredential.Password = "myPassword"; 
//I acutally use .SecurePassword and assign it SecureString 
+0

Je me demande quelle est la différence entre s.ClientCredentials.Windows.ClientCredential.UserName et s.ClientCredentials.UserName.UserName ... (et essayez de ne pas penser pourquoi est si drôle de nommer une propriété comme s.ClientCredentials.UserName.Password ...) –

+0

@ZoltanHernyak 'ClientCredentials.Windows.ClientCredential' est de type' NetworkCredential' et 'ClientCredentials.UserName' est de type' UserNamePasswordClientCredential' Je suis d'accord avec les noms très confus. J'espère que ma réponse sera utile. – Popo

0

j'ai pu le faire fonctionner sur Mono.

Le netTcpBinding ne fonctionnera pas (selon mon expérience) même avec l'authentification "anonyme".

Le wsHttpBinding ne fonctionnera pas (méthode ou opération non implémentée).

Seul le basicHttpBinding fonctionne. Il fonctionne avec TransportCredentialOnly et aussi Transport modes de sécurité, avec clientCredentialType Windows paramètre de transport. Dans ce cas, le client peut définir le nom d'utilisateur au format "domaine \ nom d'utilisateur" et le mot de passe.