Ich habe ein XBap-System, das als 3-Schicht-Anwendung konzipiert ist. Der XBap-Client konsumiert die Logik über einen WCF-Dienst mit netTcpBinding.
Um die Datenbindung zu vereinfachen und die in meine Geschäftsobjekte integrierte Datenvalidierung wieder verwenden zu können, habe ich mich dafür entschieden, die Geschäftsobjektbibliothek vom xBap-Client aus zu referenzieren, anstatt Proxies zu erzeugen.
Diese Objekte implementieren keine andere Logik als ihre eigene grundlegende Datenvalidierung. Die eigentliche Geschäftslogik ist in meinem WCF-Dienst implementiert.
Jetzt stehe ich vor einer großen Herausforderung. Ich muss die xBap zu Silverlight zu portieren, so dass ich meine Silverlight app. die gleiche Geschäftslogik (die auch von einer Winforms LOB-Anwendung verwendet wird) zu konsumieren müssen.
Einige Probleme, die auftreten:
1) Kann nicht auf die Business-Objekte-Bibliothek von der Silverlight-Client-Anwendung verweisen, weil es als eine reguläre DLL und nicht eine Silverlight kompiliert ist.
2) Ich kann es nicht als Silverlight-Bibliothek kompilieren, weil ich viele Funktionen verlieren würde und das ist offensichtlich sowieso keine gute Idee. Wenn in der Zukunft eine neue .net-Plattform entsteht, habe ich keine Garantien, dass die modifizierte (Silverlight) dll funktionieren wird.
Ich hatte etwas Hoffnung, als ich RIAServices entdeckte. Ich habe irgendwo gelesen, dass ich einen Dienst implementieren und jede Art von DAL verwenden kann. (Ich habe eine benutzerdefinierte), aber ich habe kein Beispiel gefunden, das zeigt, wie man RIAServices auf eine bestehende Geschäftsschicht setzt. Es ist erwähnenswert, dass wir LINQ nicht verwenden (und dies auch nicht planen). Jedes Beispiel, das ich gefunden habe, begann mit der Verwendung von RIAServices und dem Schreiben der Geschäftslogik von Grund auf mit LINQ.
RIAServices generiert datenbindungsfähigen Client-Code, aber ich habe das Gefühl, dass ich die gesamte Geschäftsschicht ändern müsste, und das wäre sehr teuer.
Die Lösung scheint also darin zu bestehen, weiterhin WCF zu verwenden, insbesondere jetzt, da Silverlight 3.0 eine neue Binärbindung unterstützt, und mit Proxies anstelle der eigentlichen Geschäftsobjekte zu arbeiten. Das Problem ist, dass diese Proxies keine Datenvalidierung, keine Benachrichtigung über Eigenschaftsänderungen und keine Änderungsverfolgung beinhalten, drei Aspekte, die meine Business Clasess ausführen.
RIAServices löst diese und andere Aspekte, aber es erfordert die Arbeit mit Silverlight-Projekten. WCF (SVCUtil.exe) generiert Proxys, aber sie sind nicht "vollständig" für unsere Bedürfnisse. Es scheint also, dass ich mein eigenes Dienstprogramm entwickeln muss, um diese Proxys zu generieren, wobei ein Geschäftsobjekt als Eingabe verwendet wird.
Bevor ich damit beginne, möchte ich wissen, ob jemand bereits mit diesem Problem konfrontiert war und es auf eine überzeugende und schmerzlose Weise lösen konnte.
Vielen Dank im Voraus,
Gonzalo