Création d’un service Web et d’un client avec des types partagés

J’ai créé deux fichiers WSDL avec des types partagés importés du fichier de schéma xsd.

Après cela, j’ai créé des services Web à l’aide de l’interface générée par l’outil wsdl.exe avec le paramètre / serverInterface.

Premier service Web, utilisez la méthode Web «RegisterData» pour mettre en attente un object complexe à traiter, par le système «A». À la suite de cette méthode est retourné Boolean (avec nous dire que l’object a été enregistré avec succès).

Deuxième service Web, utilisez la méthode Web «UpdateData» pour mettre à jour certaines données du système «B» sur la base du même object, avec une modification en cours sur le système «A».

Ainsi, dans le système «A», je dois créer un client pour le deuxième service Web, où je vais appeler la méthode «UpdateData» avec cet argument us complexe modifié.

Mais lorsque je crée ce client dans Visual Studio (en ajoutant une référence Web ou une référence de service), je dois créer un espace de noms pour le client. Et puis, lorsque j’essaie d’appeler «UpdateData», l’agent a un espace de noms différent pour ce même object, reçu de la première méthode de service Web «RegisterData».

Je souhaite créer le premier service Web et le deuxième client de service Web, où je peux utiliser ce même object type entre eux.

Merci beaucoup pour l’aide.

Je ne crois pas que cela soit possible avec les services Web ASMX.

La WCF soutient cependant cela.


Liens WCF:

  • Centre de développement WCF
  • Guide du débutant de Windows Communication Foundation
  • Comment: configurer un service pour réutiliser des types existants

En fait, je pense avoir mal interprété votre question. Je pensais que vous essayiez de partager les mêmes types entre le client et le serveur. ASMX ne peut pas faire cela. Cependant, il semble que vous tentiez de partager les mêmes types entre deux mandataires clients. Vous pouvez le faire facilement à l’aide de l’outil WSDL.EXE.

Prenons un schéma, DataTypes.xsd, et deux fichiers WSDL l’important, ServiceA.wsdl et ServiceB.wsdl. Pour créer les interfaces de serveur, utilisez:

wsdl / serverInterface /n:SharedTypes.Servers /out:Services.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

Cela créera des interfaces que vous pourrez implémenter pour créer vos services. Ces interfaces utiliseront un ensemble de classes créé à partir de DataTypes.xsd. Pour créer les classes proxy, utilisez simplement:

wsdl /n:SharedTypes.Proxies /out:Proxies.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

Notez que vous n’avez pas besoin du commutateur /sharedTypes . Cela a un but différent. Il sert à combiner des types de services externes lorsque vous devez télécharger le WSDL et tout XSD à partir du service.

J’ai essayé ceci en utilisant un exemple comme le vôtre, ServiceA postant un message dans une queue et un client prenant ce message et l’envoyant à ServiceB. Ça marche plutôt bien.

Je conviens qu’il n’est pas possible de faire cela via la fonctionnalité VS Web Reference. Pour répondre à vos besoins, vous pouvez utiliser l’utilitaire wsdl.exe avec le commutateur / sharetypes.

Pour plus d’informations, voir Outil de langage de description de services Web (Wsdl.exe).