141 votes

Comment générer une référence de service avec un seul fichier wsdl physique ?

Je crée et consomme des services web depuis des années et j'ai toujours pu utiliser Visual Studio pour créer une référence de service à partir du client. J'ai un service tiers avec lequel je dois travailler et il refuse d'ouvrir sa sécurité pour que je puisse voir le wsdl et créer la référence du service. Il s'agit d'un service public et je ne vois pas l'utilité d'un tel niveau de sécurité, mais c'est ainsi.

Je sais que c'est une question de débutant et j'ai honte de la poser, mais comment puis-je créer les informations de référence de service équivalentes dans mon client lorsque tout ce que j'ai à ma disposition est une copie physique du wsdl que le client m'a envoyé par e-mail ? Les modifications du web.config, la couche objet sur les données SOAP, etc. Tout comme avec une référence de service automatisée, je veux juste ouvrir une connexion au service et commencer à l'utiliser avec les objets définis.

Le service tiers n'est pas WCF pour autant que je puisse dire, mais il est SOAP. J'utilise VS 2010. Merci d'avance, Ken

202voto

Ant Radha Points 276

C'est peut-être la méthode la plus simple

  • Faites un clic droit sur le projet et sélectionnez "Ajouter une référence de service...".
  • Dans la case Adresse :, entrez le chemin physique ( C:\test\project.... ) du wsdl téléchargé/modifié.
  • Hit Go

87voto

Lynn Crumbling Points 4264

Il y a deux façons de procéder. Vous pouvez soit utiliser l'IDE pour générer une WSDL, soit le faire via la ligne de commande.

1. Pour le créer via l'IDE :

Dans le volet de l'explorateur de solutions, cliquez à droite sur le projet auquel vous souhaitez ajouter le service :

enter image description here

Ensuite, vous pouvez entrer le chemin d'accès à votre service WSDL et cliquer sur "go" :

enter image description here

2. Pour le créer via la ligne de commande :

Ouvrez une invite de commande VS 2010 (Programmes -> Visual Studio 2010 -> Visual Studio Tools).
Alors exécutez :

WSDL /verbose C:\path\to\wsdl

WSDL.exe produira alors un fichier .cs pour votre consommation.

Si vous avez d'autres dépendances que vous avez reçues avec le fichier, comme les xsd, ajoutez-les à la liste des arguments :

WSDL /verbose C:\path\to\wsdl C:\path\to\some\xsd C:\path\to\some\xsd

Si vous avez besoin d'une sortie VB, utilisez /language:VB en plus de la /verbose .

3voto

mr R Points 727

Les prédécesseurs montrent comment importer à partir d'un fichier local mais il y a de faibles chances que votre WSDL ait un ou plusieurs XSD référencés et que vous receviez une erreur :

WSDL Reference Error

Vous devrez télécharger tous les fichiers XSD référencés, et les placer dans le même répertoire que le WSDL référencé. Ensuite vous devrez éditer manuellement le WSDL, et changer schemaLocation aux fichiers locaux téléchargés.

Avant

  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd0" namespace="http://tempuri.org/" />
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
    </xsd:schema>
  </wsdl:types>

Après

  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="tempuri.org.xsd" namespace="http://tempuri.org/" />
      <xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
      <xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
    </xsd:schema>
  </wsdl:types>

Attention, il est possible que les fichiers XSD téléchargés fassent également référence à des adresses web.

Comme ça :

Avant

<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="http://gate.somesite.local:8084/Shop/DaxService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />

Après

<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />

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