Comment utiliser un fichier WSDL pour créer un service WCF (ne pas effectuer d'appel)

100

J'ai un ancien fichier WSDL et je souhaite créer un serveur basé sur ce fichier WSDL.

Le WSDL est généré à partir d'un ASMX (je suppose mais je ne suis pas sûr).

Comment puis-je atteindre cet objectif ?


question originale où l'OP pensait avoir besoin de créer un client basé sur le WSDL.

Raha
la source

Réponses:

112

À l'aide de svcutil, vous pouvez créer des interfaces et des classes (contrats de données) à partir du WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Cela créera un fichier appelé "your.cs" en C # (ou "your.vb" en VB.NET) qui contient tous les éléments nécessaires.

Maintenant, vous devez créer une classe "MyService" qui implémentera l'interface de service (IServiceInterface) - ou les différentes interfaces de service - et ceci est votre instance de serveur.

Désormais, une classe en elle-même n'aide pas encore vraiment - vous devrez héberger le service quelque part. Vous devez soit créer votre propre instance ServiceHost qui héberge le service, configurer les points de terminaison, etc., ou vous pouvez héberger votre service dans IIS.

marc_s
la source
J'ai essayé la même chose avec svcutil, mais je n'ai pas vraiment réussi avec les défauts. Avez-vous peut-être des suggestions pour mon problème: goo.gl/dlen
Juri
15
"svcutil your.wsdl your.xsd" est ce dont j'avais besoin pour que le mien fonctionne! Merci!
Tim Lewis
3
Consultez cette réponse SO pour des informations sur le téléchargement de wsdl et xsd dans un format que svcutil aimera. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Quand j'utilise ceci avec mon fichier WSDL, il semble renommer certains éléments d'une manière très étrange, de telle sorte que les requêtes venant de mon serveur ne seront même pas acceptées. Est-ce normal?
Arj
@Arjun: non - il semble que vous deviez rassembler tous les faits pertinents et poser une question sur Stackoverflow! :-)
marc_s
41

Il existe de bonnes ressources si vous savez quoi rechercher. Essayez «Contract First» et WCF. ou "WSDL First" et WCF.

Voici une sélection:

Cheeso
la source
3
À tous ceux qui suivent la présentation de base de l'article WSDL-First : prenez note du commentaire qui en parle ReplyAction="*". Il semble que vous deviez vous en débarrasser. Il y a une piste d'explications à partir de ce commentaire qui donne le raisonnement, mais je ne l'ai pas lu.
dan-gph
30

Utilisez svcutil.exe avec le /sccommutateur pour générer les contrats WCF. Cela créera un fichier de code que vous pourrez ajouter à votre projet. Il contiendra toutes les interfaces et tous les types de données dont vous avez besoin pour créer votre service. Modifiez l'emplacement de sortie à l'aide du /ocommutateur ou vous pouvez trouver le fichier dans le dossier où vous avez exécuté svcutil.exe. Le langage par défaut est C # mais je pense (je ne l'ai jamais essayé) que vous devriez pouvoir changer cela en utilisant /l:vb.

svcutil /sc "WSDL file path"

Si votre WSDL contient des fichiers XSD de prise en charge, transmettez-les en tant qu'arguments après le WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Ensuite, créez une nouvelle classe qui est votre service et implémentez l'interface de contrat que vous venez de créer.

Dennis Calla
la source
7

Vous pouvez utiliser svcutil.exe pour générer du code client. Cela inclurait la définition du contrat de service et tous les contrats de données et contrats de faute requis.

Ensuite, supprimez simplement le code client: les classes qui implémentent les contrats de service. Vous devrez ensuite les implémenter vous-même, à votre service.

John Saunders
la source
4

À l'aide de l'outil «Ajouter une référence de service» dans Visual Studio, vous pouvez insérer l'adresse comme suit:

fichier: ///chemin/to/wsdl/file.wsdl

Et il se chargera correctement.

Vagner Gon
la source