2011-07-12 4 views
2

J'utilise un client de service WCF généré par slsvcutil à partir de la version 4 du toolkit Silverlight. J'ai également essayé la version 3 avec les mêmes problèmes. Lorsque j'utilise une instance client exécutée sur http sans informations d'identification utilisateur, elle s'exécute sans problème. Mais je dois passer à https pour les serveurs productifs et envoyer les informations d'identification de l'utilisateur qui sont codées en dur pour mon application. J'utilise le code suivant pour que:Utilisation du service WCF dans MonoTouch avec authentification

 var binding = new BasicHttpBinding (BasicHttpSecurityMode.TransportCredentialOnly);   
     var endpoint = new EndpointAddress (AppSettings.FlareEndPoint); 
     _service = new TopicAnalystAPIClient(binding, endpoint); 
     _service.ClientCredentials.UserName.UserName = "xxx"; 
     _service.ClientCredentials.UserName.Password = "xxx"; 

Quand j'appelle une méthode sur ce service à l'adresse http sans authentification cela fonctionne. Lorsque j'utilise ce code contre http/https avec les informations d'identification, j'obtiens «Une erreur s'est produite lors du traitement de la requête Web: Code d'état 401 (non autorisé): exception« non autorisée ». J'ai vérifié que les informations d'identification sont correctes, je suis en mesure d'ouvrir la référence de service dans mon navigateur. J'ai également essayé plusieurs combinaisons de valeurs http/https et SecurityMode. Je l'ai également essayé sur quatre serveurs différents avec toujours le même résultat.

Quel peut être le problème?

+0

Voir ma question qui est liée: http://stackoverflow.com/questions/6667030/make-this-wcf-client-code-work-on-mono-and-monotouch- sur-le-mac – Krumelur

Répondre

1

Un grand nombre de permutations sont possibles. BasicHttpSecurityMode.TransportCredentialOnly devrait être utilisable sans SSL [1] en utilisant HTTP lui-même. Cela signifie que le serveur enverra une (ou plusieurs) méthode (s) d'authentification au client (par exemple, basic, digest, ntlm) et Mono (y compris MonoTouch) devrait fournir le support pour la plupart d'entre eux.

Il est possible que l'éditeur de liens (s'il est utilisé) en supprime un. Dans ce cas, vous pouvez essayer de créer et de tester sans lier (ou passer l'édition de System.Net.dll).

Il est également possible que la méthode d'authentification sur laquelle le service insiste n'est pas prise en charge. Vous pouvez trouver celui qui est utilisé en exécutant une trace réseau (par exemple wireshark) ou, peut-être, il apparaîtra plus en détails dans le journal du serveur (avec l'erreur 401).

[1] http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpsecuritymode%28v=vs.95%29.aspx

Questions connexes