2009-06-03 13 views
2

Je sais qu'il y a eu des questions similaires sur ce sujet mais je n'étais pas complètement sûr qu'ils résolvaient le même problème. Donc juste pour être clair ...Exposer des objets métier existants dans WCF

J'ai une bibliothèque de classes existante qui a des espaces de noms pour les types, la logique métier et l'accès aux données. Les classes dans les espaces de noms logiques et d'accès aux données sont statiques et ont des méthodes crud de base pour remplir les instances de type avec des instances de données ou de prise qui sont déjà complètes et insèrent ou mettent à jour dans la base de données.

Maintenant, en plus des applications existantes qui font directement référence à cette bibliothèque, je veux également créer un service WCF afin que d'autres applications puissent consommer les objets et les méthodes de cette façon. Chaque turborescence WCF que je vois crée les objets de domaine dans le projet de service - mais je ne veux pas que mes objets soient définis à deux endroits. Donc, je pensais pouvoir référencer la sérialisation dans ma bibliothèque de classes existante et marquer les classes de types comme [DataContract] et les propriétés comme [DataMember]. Ensuite, dans le projet WCF, créez les interfaces [ServiceContract] avec les méthodes [OperationContract] pour faire correspondre les classes et méthodes de logique statique de la bibliothèque existante que je souhaite exposer. Puis, à partir du projet WCF, référencez la bibliothèque de classes existante et implémentez les interfaces WCF en y incluant des méthodes qui appellent les méthodes logiques de bibliothèque existantes qui renvoient les types de bibliothèque existants.

Est-ce un bon motif?

Répondre

5

Cela semble bien, mais la sérialisation de mise à niveau a tendance à être plus difficile qu'il n'y paraît au premier abord. Je suggère que vous construisiez des contrats de données légers dans une couche de service et que vous construisiez ensuite un petit niveau qui se situe entre votre couche de service et la couche de gestion pour traduire les contrats de données en objets métier et vice versa.

1

En supposant que votre objet métier peut être sérialisé (avec l'attribut Serializable), une approche pourrait être la création d'objet DataContainer, qui sera votre contrat de données. Cet objet sera utilisé dans vos méthodes CRUD.

Par exemple l'interface pourrait être mise à jour (DataContainer obj) Insérer (DataContainer obj)

etc.

Ensuite, vous utilisez sérialisation binaire pour emballer votre objet dans un tableau d'octets et transmettre cette chemin à travers la WCF. De l'autre côté, vous les désérialisez en utilisant à nouveau BinarySerialization. Vous devez juste vous assurer que les deux côtés (client et serveur) ont une version valide de l'assembly avec vos types d'objets métier.

+0

Merci Max. En fait, je ne l'ai pas mentionné, mais l'une des choses que j'essaie de faire n'est pas d'expédier la bibliothèque aux consommateurs du service. –

Questions connexes