Impossible d'appeler le service Web avec l'authentification de base à l'aide de WCF
J'ai reçu un service web écrite en Java, je ne suis pas en mesure de faire des changements. Il exige de l'utilisateur de s'authentifier avec l'authentification de base pour accéder à toutes les méthodes. La manière suggérée à interagir avec ce service .NET est à l'aide de Visual Studio 2005 avec WSE 3.0 est installé.
C'est un problème, puisque le projet est déjà à l'aide de Visual Studio 2008 (ciblage .NET 2.0). Je pourrais le faire dans VS2005, je ne veux cependant pas de lier le projet à VS2005, ou le faire par la création d'une assemblée dans VS2005 et notamment dans le VS2008 solution (qui, en gros, les liens de la projet à 2005, de toute façon pour toute modification future de l'assemblée). Je pense que l'une de ces options serait de rendre les choses compliquées pour les nouveaux développeurs en les forçant à installer WSE 3.0 et conserver le projet d'être en mesure d'utiliser 2008 et fonctionnalités .NET 3.5 dans l'avenir... c'est à dire, je crois vraiment en utilisant WCF est le chemin à parcourir.
J'ai été à la recherche en utilisant WCF pour ce faire, cependant je ne suis pas sûr de savoir comment obtenir le service WCF pour comprendre qu'il doit envoyer les en-têtes d'authentification avec chaque demande. Je reçois des erreurs 401 lorsque je tente de faire n'importe quoi avec le service web.
C'est ce que mon code ressemble à ceci:
WebHttpBinding webBinding = new WebHttpBinding();
ChannelFactory<MyService> factory =
new ChannelFactory<MyService>(webBinding, new EndpointAddress("http://127.0.0.1:80/Service/Service/"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
factory.Credentials.UserName.UserName = "username";
factory.Credentials.UserName.Password = "password";
MyService proxy = factory.CreateChannel();
proxy.postSubmission(_postSubmission);
Cela permettra de courir et lancer l'exception suivante:
La requête HTTP est autorisée avec le schéma d'authentification client "Anonyme". L'en-tête d'authentification reçues du serveur
a 'Basic realm=royaume'.
Et cela a un intérieur d'exception de:
Le serveur distant a retourné une erreur: (401 non autorisé.
Des pensées sur ce qui pourrait être à l'origine de ce problème serait grandement apprécié.
source d'informationauteur Rex Morgan | 2009-09-01
Vous devez vous connecter pour publier un commentaire.
Première question: est-ce un SOAP ou REST Java service que vous essayez d'appeler?
Aujourd'hui, avec la "webHttpBinding", vous êtes à l'aide d'un REPOS. Si le Java service est un service SOAP, alors vous aurez besoin de changer de liaison à "basicHttpBinding" à la place.
SI c'est un SAVON à base de services, vous devriez essayer ceci:
J'ai utilisé cela avec les différents services du site et il fonctionne la plupart du temps.
Si cela ne fonctionne pas, vous aurez à en savoir plus sur ce que Java webservice attend et comment envoyer que de l'information pertinente.
Marc
Tout d'abord, placez la ligne suivante dans votre application.config ou web.config. (pas besoin de changer ce que vous vous déplacez à travers les environnements):
Modifier le contrat attribut de l'espace de Noms.Nom de l'Interface en conséquence.
Remarque le mode de sécurité = TransportCredentialOnly
Maintenant de modifier par programmation le point de terminaison et de transmettre les informations d'identification, utilisez le code suivant:
Je vais l'ajouter à cela que basé sur un problème similaire, je vient de vivre. J'ai généré automatiquement le fichier config /proxy avec VS-mais la config qu'il a créé n'a pas fait de travail.
Bien qu'il avait mode de sécurité="Transport" est correctement réglé, il n'avait pas clientCredentialType="de Base" ensemble. J'ai ajouté à ma config et il ne fonctionne toujours pas. Ensuite, j'ai effectivement supprimé le message de sécurité que l'outil a créé depuis le service, je suis avec le protocole SSL + de Base uniquement:
Voila-il travaillé.
Je ne sais pas pourquoi cela a eu un effet en considérant l'élément n'a pas précisé le niveau de message de sécurité... mais il n'.