Comment utiliser un WSDL

126

J'ai besoin de consommer un service Web. Ils m'ont envoyé le fichier WSDL. Que dois-je faire pour l'ajouter à mon site Web et commencer à l'utiliser comme proxy. (Si je le mets sur un répertoire virtuel, il peut être découvert, mais cela m'accorde-t-il la connexion avec le vrai service Web?)

jmayor
la source
9
Eh bien, j'ai voté pour parce que c'est une question à laquelle je pense que d'autres utilisateurs ici auraient intérêt à voir une réponse. Je cherchais exactement ce problème et je suis heureux de l'avoir trouvé ici.
schizoid04

Réponses:

138

Je lancerais Visual Studio, créerais un projet Web (ou une application console - peu importe).

Pour .Net Standard:

  1. Je ferais un clic droit sur le projet et choisirais "Ajouter une référence de service" dans le menu contextuel Ajouter .
  2. Je cliquais sur Avancé, puis sur Ajouter une référence de service.
  3. J'obtiendrais le chemin complet du fichier du wsdl et le collerais dans la barre d'adresse. Puis tirez la flèche (bouton aller).
  4. S'il y a une erreur lors de la tentative de chargement du fichier, il doit y avoir une URL cassée et non résolue que le fichier doit résoudre comme indiqué ci-dessous: entrez la description de l'image ici Reportez - vous à cette réponse pour obtenir des informations sur la façon de résoudre: Stackoverflow réponse à: Impossible de créer une référence de service pour fichier wsdl

S'il n'y a pas d'erreur, vous devez simplement définir le NameSpace que vous souhaitez utiliser pour accéder au service et il sera généré pour vous.

Pour .Net Core

  1. Je ferais un clic droit sur le projet et choisirais Service connecté dans le menu contextuel Ajouter.
  2. Je sélectionnerais le fournisseur de référence de service Web Microsoft WCF dans la liste.
  3. Je voudrais appuyer sur parcourir et sélectionner le fichier wsdl tout de suite, définir l'espace de noms et je suis prêt à partir. Reportez-vous à l'URL du correctif d'erreur ci-dessus si vous rencontrez une erreur.

Toutes les méthodes ci-dessus généreront un client WCF simple et très basique que vous utiliserez. Vous devriez trouver une classe "YourservicenameClient" dans le code généré.

À des fins de référence, le fichier cs généré se trouve dans votre Obj / debug (ou release) / XsdGeneratedCode et vous pouvez toujours trouver les dll dans le dossier TempPE.

Les services créés doivent avoir des méthodes pour chacune des méthodes définies sur le contrat WSDL.

Instanciez le client et appelez les méthodes que vous souhaitez appeler - c'est tout ce qu'il y a!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Si vous devez spécifier l'URL distante (sans utiliser celle créée par défaut), vous pouvez facilement le faire dans le constructeur du client proxy:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

configNameest le nom du point de terminaison à utiliser (vous utiliserez tous les paramètres sauf l'URL), et le remoteURLest une chaîne représentant l'URL à laquelle se connecter (au lieu de celle contenue dans la configuration).

marc_s
la source
Cela fonctionne très bien. Une seule question, si j'ai le fichier wsdl sur ma machine, et j'ajoute la référence à ce fichier. Lors de l'exécution de l'URL qu'il atteint, c'est celui qui héberge le service Web, ou dois-je spécifier la liaison et le point final?
jmayor
1
Cela dépend de vous - par défaut, le code créé pour le proxy client aura l'URL contenue dans le WSDL - si vous devez accéder à une autre URL, vous devez la spécifier vous-même.
marc_s
Pourquoi est-ce si simple? N'y a-t-il pas un piège? : p Merci!
Odys
1
Comme réponse acceptée, il serait bon que vous mentionniez également comment utiliser un WSDL hébergé sur le Web à partir d'une URL.
Caltor
Je pense que je suis assez près de faire fonctionner cela. J'ai installé le service Web à l'aide de l'outil Ajouter une référence de service. Je suis capable d'instancier le client, mais j'échoue en appelant les méthodes. Le point final utilise une implémentation Java, et tout ce que je peux voir est le XML. La méthode que j'essaye d'appeler recherche un clientid et "quelque chose d'autre". Ce quelque chose d'autre est une classe. Ce qui est déroutant. Je peux mettre cela dans un post ci-dessous si cela peut aider, mais je suis déconcerté.
mappingman
45

En studio visuel.

  • Créez ou ouvrez un projet.
  • Cliquez avec le bouton droit sur le projet depuis l'explorateur de solutions.
  • Sélectionnez "Ajouter une référence de service"
  • Collez l'adresse avec WSDL que vous avez reçue.
  • Cliquez sur OK.

Si aucune erreur, vous devriez pouvoir voir la référence du service dans le navigateur d'objets et toutes les méthodes associées.

vidalsasoon
la source
9
<3 Visual Studio .. Oui, c'est vraiment aussi simple :)
cwap
3
L'OP n'a pas d'adresse mais un fichier.
Henk Holterman
1
Le fournisseur du service Web peut avoir désactivé WSDL (sécurité par obscurité), il n'y a donc pas d'URL où WSDL est accessible et l'ajout d'une référence Web dans VS ne fonctionnera pas. Cependant, le fournisseur veut que VOUS (je veux dire OP) sache tout ce que vous devez savoir sur le contrat de service, c'est pourquoi il a envoyé le fichier WSDL. Maintenant, l'OP doit générer le code proxy à partir de celui-ci, la question est de savoir comment.
azheglov
3
En tapant le chemin du fichier. Qu'est-ce qui vous fait penser que cela ne fonctionne pas?
John Saunders
1
Salut @vidalsasoon. Pourriez-vous expliquer brièvement comment utiliser ces classes que je vois dans mon explorateur de classes. ?
CalZone
16

Utilisez l' utilitaire WSDL.EXE pour générer un proxy de service Web à partir de WSDL.

Vous obtiendrez un long fichier source C # contenant une classe qui ressemble à ceci:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

Dans votre code consommateur de services Web côté client:

  1. instanciez MyService.
  2. définir sa propriété Url
  3. invoquer des méthodes Web
Azheglov
la source
5
Cela crée un Webservice ASMX "à l'ancienne" - ceux-ci sont obsolètes - on devrait utiliser WCF à la place de nos jours
marc_s
7

Si vous souhaitez ajouter une référence wsdl dans un projet .Net Core , il n'y a pas d'option «Ajouter une référence Web».

Pour ajouter la référence wsdl, accédez à l'Explorateur de solutions, cliquez avec le bouton droit sur l'élément de projet Références, puis cliquez sur l' option Ajouter un service connecté .

entrez la description de l'image ici

Cliquez ensuite sur «Référence du service Web Microsoft WCF»:

entrez la description de l'image ici

Entrez le chemin du fichier dans la zone de texte URI et importez le WSDL:

entrez la description de l'image ici

Il générera un client WCF simple et très basique et vous utiliserez quelque chose comme ceci:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
Nedzad G
la source
Cette extension ne m'apparaît pas.
Rafael Pizao