2013-01-02 10 views
0

L'équipe A crée WebServiceA. Il utilisera le type Personne. Lorsque la personne est enregistrée par appel dans WebServiceA, l'autre système doit également être averti (par appel à WebServiceB créé par l'équipe B en passant la personne enregistrée).Comment partager des types entre services Web

Ensuite, lorsque la personne est éditée dans le système B, les modifications doivent être migrées vers le système A (par appel à WebServiceA en passant la personne modifiée).

La question est de savoir comment rendre les deux WebServices utilisent le même type? Nous pourrions envoyer du XML en tant que chaînes, puis le sérialiser/désérialiser aux objets de chaque côté de WebService afin que nous n'ayons pas à travailler avec xml, mais je suis curieux de savoir si c'est plus facile.

Je voudrais avoir ceci:

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person) 
WebMethod - PersonModified(Person person) 

WebSericeB 
WebMethod - PersonRegistered(Person person) 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person) 

au lieu de cette

WebServiceA 
Webmethod - RegisterPerson(Person person) 
    calls WebServiceB.PersonRegistered(person.SerializeToXml()) 
WebMethod - PersonModified(string person) - deserialize to WebServiceA.Person 

WebSericeB 
WebMethod - PersonRegistered(string person) - deserialize to WebServiceB.Person 
WebMethod - ModifyPerson(Person person) 
    calls WebServiceA.PersonModified(person.SerializeToXml()) 

Nous utilisons ASP.NET WebService dans l'équipe A et l'équipe B en utilisant Java. Cela changerait-il quelque chose si les deux équipes utilisaient .NET?

Répondre

1

Si les deux équipes utilisaient .NET, vous pouvez définir vos objets de données dans un projet de bibliothèque de classes et les deux équipes partageront la même bibliothèque (DLL). C'est à peu près ce que Windows Communication Foundation fait en coulisses lorsque vous créez une référence à un service dans un projet .NET. Il est donc facile de passer des objets comme paramètres, comme dans votre premier exemple.

Puisque vous avez deux langues, vous avez vraiment besoin d'un terrain d'entente et c'est là que json ou xml entrent en place (ce qui est votre deuxième exemple). Vous pouvez ajouter une sorte de classe de conversion qui va capturer une chaîne, renvoyer votre objet et le passer en paramètre à vos méthodes, l'implémentation dépend du framework que vous utilisez (le printemps en fait un jeu d'enfant)

+0

Et si nous sommes en utilisant les services web et non les services wcf? Existe-t-il un moyen de partager des objets entre deux services Web écrits en .NET? Je pense que vous avez fait une petite erreur dans votre réponse. Je passe des objets dans le premier exemple pas dans la seconde. En deuxième je passe des cordes. –

+0

@Peri Vous pouvez toujours créer une classe proxy (en utilisant une "référence web"). Voir http://msdn.microsoft.com/en-us/library/d9w023sx(v=vs.90).aspx. Je crois que WCF est la méthode recommandée pour les services web (par la suite j'ai corrigé mes références à vos exemples). – Ulises

+0

Oui, je sais que je peux créer une classe proxy :) Mais lorsque vous ajoutez une référence Web alors que WebServiceB référence la même bibliothèque de classes que les types WebServiceA de cette bibliothèque de classes sont régénérés avec proxy et sont dans un espace de noms différent. Ainsi, si WebServiceB a la méthode PersonRegistered (personne ClassLibrary.Person) dans WebServiceA, elle sera visible en tant que PersonRegistered (personne WebService2.Person). –

Questions connexes