107 votes

Créer un proxy de service web dans Visual Studio à partir d'un fichier WSDL

Mon application doit communiquer avec un service Web qui n'a pas de définition WSDL en ligne. Les développeurs m'ont cependant fourni un fichier WSDL.

Avec un WSDL public, Visual Studio peut générer ce code pour moi en utilisant l'assistant de référence de service. Mais cela ne semble pas fonctionner sans une WSDL publique.

Comment puis-je générer le code pour parler à ce service web en utilisant ce fichier WSDL ?

147voto

jeffaudio Points 1076

L'utilisation de WSDL.exe n'a pas fonctionné pour moi (j'ai reçu une erreur concernant un type manquant), mais j'ai pu faire un clic droit sur mon projet dans VS et sélectionner "Add Service Reference". J'ai entré le chemin d'accès au fichier wsdl dans le champ "Address" et j'ai cliqué sur "Go". Cela a semblé pouvoir trouver tous les types appropriés et a ajouté les classes directement à mon projet.

3 votes

J'ai été confronté au même scénario et votre suggestion m'a épargné beaucoup de frustration et probablement quelques cheveux. Une réputation bien méritée vous a été donnée. (Comme résultat indirect, vous avez obtenu +100 sur tous les sites :))

0 votes

J'ai essayé cela, le fichier importe, mais je ne vois pas dans mon code les classes

1 votes

J'ai essayé cette méthode en utilisant MSVC 2015 mais il a refusé de traiter le fichier wsdl en utilisant l'URL. J'ai donc utilisé la méthode décrite par Andrew M.

123voto

Andrew M Points 3067

Essayez d'utiliser WSDL.exe puis d'inclure le fichier généré (.cs) dans votre projet.

Lancez l'invite de commande Visual Studio (sous visual studio/tools dans le menu démarrer) puis tapez

>wsdl.exe [path To Your WSDL File]

Il en sortira un fichier, que vous copierez/déplacerez et inclurez dans votre projet. Ce fichier contient une classe qui est un proxy pour votre service, lancez une instance de cette classe, et elle aura une propriété URL que vous pouvez définir à la volée, et un tas de méthodes que vous pouvez appeler. Il va également générer des classes pour tous les objets complexes passés à travers l'interface du service.

3 votes

Merci ! Et vous pouvez utiliser le paramètre /o pour le chemin d'accès au fichier exporté. Par exemple >wsdl.exe exemple.com/service.wsdl /o : C:\Users\X\Desktop

2 votes

Et éventuellement ajouter manuellement un espace de nom, couvrant toutes les classes, pour éviter tout conflit avec les fichiers similaires générés.

16voto

Jarek Mazur Points 843

En passant, si vous avez tous des fichiers localement (non seulement le fichier wsdl mais aussi les fichiers xsd) vous pouvez invoquer wsdl.exe de cette manière :

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

De cette façon, wsdl.exe peut résoudre toutes les dépendances localement et générer correctement la classe proxy.

Peut-être que cela fera gagner du temps à quelqu'un - cela résout l'erreur "missing type" lorsque le service n'est pas disponible en ligne.

3voto

Steve Danner Points 11604

Essayez le Outil de classe WSDL To Proxy livré avec le SDK de .NET Framework. Je ne l'ai jamais utilisé auparavant, mais il semble que ce soit ce dont vous avez besoin.

-1voto

Israel Margulies Points 1713

Comme la véritable URL de liaison du service Web se trouve dans le fichier, vous pouvez effectuer ces étapes simples à partir de votre ordinateur local :

1) Enregistrez le fichier sur votre ordinateur local, par exemple :

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2) Dans Visual Studio, cliquez à droite sur votre projet > Choisissez Add Web Reference, une boîte de dialogue s'ouvre.

3) Dans la boîte URL, copiez l'emplacement du fichier local ci-dessus. C:\Documents et Paramètres [utilisateur] \Desktop\Webservice1.asmx Cliquez sur Suivant

4) Maintenant, vous verrez apparaître les fonctions, choisissez votre nom pour la référence, cliquez sur ajouter une référence.

5) Vous avez terminé ! Vous pouvez commencer à l'utiliser comme espace de nom dans votre application. Ne vous inquiétez pas d'avoir utilisé un fichier local, car de toute façon, la véritable URL du service est située dans le fichier à la section Binding.

2 votes

Cela a déjà été suggéré dans cette réponse existante pourquoi répéter ?

0 votes

Pourquoi un fichier asmx alors que la question porte sur le wsdl ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X