2009-06-03 5 views
2

Ich weiß, dass es ähnliche Fragen zu diesem Thema gab, aber ich war mir nicht ganz sicher, ob sie das gleiche Problem gelöst haben. Also nur um klar zu sein ...Verfügbar machen von vorhandenen Geschäftsobjekten in WCF

Ich habe eine vorhandene Klassenbibliothek, die Namespaces für Typen, Geschäftslogik und Datenzugriff hat. Die Klassen in den Namespaces für logische und Datenzugriffe sind statisch und verfügen über grundlegende crud-Methoden, um die Typinstanzen mit Daten zu füllen, oder um Typinstanzen zu übernehmen, die bereits voll sind und Einfügungen oder Aktualisierungen in der Datenbank vornehmen.

Nun möchte ich zusätzlich zu den vorhandenen Anwendungen, die direkt auf diese Bibliothek verweisen, auch einen WCF-Dienst erstellen, damit andere Anwendungen die Objekte und Methoden auf diese Weise verwenden können.

Jede WCF turorial, die ich sehe, erstellt die Domänenobjekte im Service-Projekt - aber ich möchte nicht meine Objekte an zwei Orten definiert.

Also dachte ich, ich könnte Serialisierung in meiner vorhandenen Klassenbibliothek verweisen und die Typklassen als [DataContract] und die Eigenschaften als [DataMember] markieren. Erstellen Sie dann im WCF-Projekt die [ServiceContract] -Schnittstellen mit den [OperationContract] -Methoden, um die statischen Logikklassen und -methoden aus der vorhandenen Bibliothek, die ich darstellen möchte, abzugleichen. Wenden Sie sich dann aus dem WCF-Projekt an die vorhandene Klassenbibliothek, und implementieren Sie die WCF-Schnittstellen, indem Sie Methoden verwenden, die die vorhandenen Bibliothekslogikmethoden aufrufen, die die vorhandenen Bibliothekstypen zurückgeben.

Ist das ein gutes Muster?

Antwort

5

Es klingt gut, aber die Nachrüstung Serialisierung neigt dazu, mehr Probleme als es zunächst scheint. Ich würde vorschlagen, dass Sie einige einfache Datenverträge in eine Serviceebene erstellen und dann eine kleine Ebene erstellen, die sich zwischen Ihrer Serviceebene und der Businessebene befindet, um die Datenverträge in Geschäftsobjekte zu übersetzen und umgekehrt.

1

Unter der Annahme, dass Ihr Business-Objekt serialisiert werden kann (Attribut Serializable haben), könnte ein Ansatz das DataContainer-Objekt erstellen, das Ihren Datenvertrag darstellt. Dieses Objekt wird in Ihren CRUD-Methoden verwendet.

Zum Beispiel Ihre Schnittstelle Update (Datacontainer obj) Insert (Datacontainer obj)

usw.

Dann würden Sie Binary Serialisierung Ihr Objekt in ein Array von Bytes verwenden könnte und es auf diese passieren zu packen Weg durch WCF. Auf der anderen Seite würden Sie sie wieder mit Hilfe von BinarySerialization deserialisieren. Sie müssen nur sicherstellen, dass beide Seiten (Client und Server) eine gültige Version der Assembly mit Ihren Business-Objekttypen haben.

+0

Dank max. Eigentlich habe ich es nicht erwähnt, aber eines der Dinge, die ich versuche zu tun, ist nicht die Bibliothek an die Verbraucher des Dienstes zu liefern. –

Verwandte Themen