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

101

Mon application doit parler à 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 à l'aide de l'assistant de référence de service. Mais cela ne semble pas fonctionner sans WSDL public.

Comment générer le code pour parler à ce service Web à l'aide de ce fichier WSDL?

Anne
la source

Réponses:

116

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]

Cela crachera un fichier, que vous copiez / déplacez et incluez dans votre projet. Ce fichier contient une classe qui est un proxy pour votre service, lancez une instance de cette classe, et il aura une propriété URL que vous pouvez définir à la volée, et un tas de méthodes que vous pouvez appeler. Il générera également des classes pour tous / tous les objets complexes transmis via l'interface de service.

Andrew M
la source
2
Merci! Et vous pouvez utiliser le paramètre / o pour le chemin du fichier exporté. par exemple> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp
2
et éventuellement ajouter manuellement un espace de noms, couvrant toutes les classes, pour éviter les conflits avec des fichiers similaires générés.
Blue Clouds
138

L'utilisation de WSDL.exe n'a pas fonctionné pour moi (m'a donné une erreur sur un type manquant), mais j'ai pu cliquer avec le bouton droit sur mon projet dans VS et sélectionner «Ajouter une référence de service». J'ai entré le chemin d'accès au fichier wsdl dans le champ Adresse et j'ai appuyé sur "Go". Cela semblait être en mesure de trouver tous les types appropriés et d'ajouter les classes directement à mon projet.

Jeffaudio
la source
3
Face au même scénario et votre suggestion m'a évité beaucoup de frustration et probablement quelques cheveux. Une représentation bien méritée vous a été donnée. (Comme résultat indirect, vous avez obtenu +100 sur tous les sites :))
Shadow Wizard is Ear For You
J'ai essayé ça, le fichier importe, mais je ne vois pas dans mon code les classes
guiomie
1
J'ai essayé cette méthode en utilisant MSVC 2015 mais elle a refusé de traiter le fichier wsdl en utilisant l'URL. J'ai donc utilisé la méthode décrite par Andrew M.
Hermann
1
J'ai essayé cela à partir d'un PC de développement qui n'a pas l'autorisation d'accéder au service Web. Bien que le fichier .wsdl soit en local, il a essayé de connecter le service lorsque j'ai appuyé sur "Go". Je n'ai donc pas pu ajouter de référence. Dans cette situation, je pense que la solution d'Andrew M. devrait être préférée. Cela a bien fonctionné.
gkonuralp
@jeffaudio im confronté à un problème similaire, je suis en mesure d'ajouter une référence de service pour le projet Web, mais en utilisant wsdl.exe, je ne parviens pas à générer un fichier proxy. toute suggestion ..???
prakash r le
15

Sur la note latérale: si vous avez tous les fichiers localement (non seulement le fichier wsdl mais également les fichiers xsd), vous pouvez appeler 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 "type manquant" lorsque le service n'est pas disponible en ligne.

Jarek Mazur
la source
3

Essayez l' outil de classe WSDL To Proxy fourni avec le SDK .NET Framework. Je ne l'ai jamais utilisé auparavant, mais il ressemble certainement à ce dont vous avez besoin.

Steve Danner
la source
3

Il existe un Microsoft Doc pour créer votre WCFproxy à partir de la ligne de commande.

Vous pouvez trouver votre copie locale de wsdl.exedans un emplacement similaire à celui-ci: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( En savoir plus ici )

En fin de compte, vous Commanddevriez ressembler à ceci:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl
Serj Sagan
la source
1

enregistrez le fichier sur votre disque, puis utilisez ce qui suit comme URL:

file://your_path/your_file.wsdl
Evan Camilleri
la source
C'est le seul qui a fonctionné pour moi car le fichier en question devait d'abord être téléchargé après l'authentification. Merci!
Kevin Radcliffe
-1

Étant donné que la véritable URL de liaison pour le 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 avec le bouton droit sur votre projet> Choisissez Ajouter une référence Web, une boîte de dialogue s'ouvre.

3) Dans la zone URL, copiez l'emplacement du fichier local au-dessus de C: \ Documents and Settings [utilisateur] \ Desktop \ Webservice1.asmx, cliquez sur Suivant

4) Maintenant, vous verrez les fonctions apparaître, 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 noms dans votre application, ne vous inquiétez pas que vous ayez utilisé un fichier local, car de toute façon la véritable URL du service se trouve dans le fichier à la section Liaison

Israël Margulies
la source
2
Cela a déjà été suggéré dans cette réponse existante pourquoi répéter?
Shadow Wizard est une oreille pour vous
Pourquoi asmx déposer alors que la question concerne wsdl?
Blue Clouds