Question

J'ai hérité d'un fichier WSDL pour un service Web sur un système auquel je n'ai pas accès pour le développement et les tests.

Je dois générer un service Web qui adhère à ce WSDL. Le wrapper est .NET, mais s'il existe un moyen facile de le faire avec une autre plate-forme, nous pourrons peut-être examiner cela. Le service Web de production est basé sur Java.

Quelle est la meilleure façon de s'y prendre?

Remarque: le fichier wsdl hérité ne semble pas être compatible avec wsdl.exe car il n'est pas conforme au profil de base WS-I v1.1. En particulier, le groupe qui l'a transmis a mentionné qu'il utilisait une autre norme que l'outil Microsoft ne prend pas en charge, mais ils n'ont pas clarifié les choses. L'erreur est liée à un champ "nom" obligatoire:

Error: Element Reference '{namespace}/:viewDocumentResponse' declared in
schema type '' from namespace ''
       - the required attribute 'name' is missing

Par souci de clarté, je comprends que je peux facilement créer une classe wrapper .NET à partir du fichier WSDL, mais ce n'est pas ce dont j'ai besoin. C'est comme ça:

Mise à jour: le service Web d'origine a été créé à l'aide d'Axis.

Schéma du système indiquant un service Web indisponible et un service Web fictif http: // paulw.us/blog/uploads/SO-WSDL-Question2.gif

Était-ce utile?

La solution

Nous utilisons cet contrat de services Web de à partir de Thinktecture se charge du développement de services Web en créant d’abord un schéma XSD, puis en générant des interfaces de service à l’aide de cet outil. Il peut être utile de générer des interfaces de service à partir de WSDL mais je n’ai pas encore essayé moi-même.

Autres conseils

Vous pouvez trouver utile l' utilitaire de ligne de commande wsdl.exe de .NET en utilisant l’option / serverInterface . Selon la documentation:

  

Génère des interfaces pour le côté serveur   implémentation d'un site Web ASP.NET   Un service. Une interface est générée pour   chaque liaison dans le (s) document (s) WSDL.   Le WSDL seul implémente le WSDL   contrat (classes qui implémentent le   l'interface ne doit inclure ni l'une ni l'autre   les suivantes sur les méthodes de classe:   Attributs de service Web ou   Les attributs de la sérialisation qui changent   le contrat WSDL). Forme courte est   '/ si'.

Oui, vous pouvez utiliser WSCF (comme indiqué ci-dessus) pour générer le code côté serveur. L’URL réelle peut ensuite être remplacée pour pointer sur l’URL de test que vous souhaitez utiliser.

Cependant, cela ne génère qu'un stub. Vous devez encore coder le réel, par exemple. La méthode GetCustomers () est quelque peu suspecte car vous n’avez aucune idée du fonctionnement de l’implémentation.

Vous pouvez ensuite vous en moquer ou créer un serveur Web ASP simple pour l'exécuter.

Essayez de simuler l'interface wrapper en utilisant RhinoMocks et StructureMap .

Je ne sais pas si cela vous aidera,

Ce que j'ai récemment fait est:

  • Générer un fichier .cs à l'aide de l'outil wsdl ou de visual studio
  • Je l'ai changé pour qu'il s'agisse d'une classe partielle
  • J'ai créé une autre classe partielle dans laquelle il ne fait qu'ajouter une ligne pour indiquer que la classe implémente IWhatEver
  • J'ai créé une interface identique à la classe de proxy générée (le proxy implémente donc l'interface complètement)

Ensuite, j’ai utilisé un framework Mocking (Moq) dans mon cas, pour simuler WebService, j’ai ensuite utilisé une injection de dépendance mans médiocre (passer le simulacre à un constructeur de la classe sous test) .. qui peut gérer une instance de IQue ce soit

Faites un essai ..

L’espoir que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top