Mehrere WCF-Dienste verweisen auf dieselben Datenverträge
Baue ich ein set von WCF-Diensten, die gemeinsame Daten-Verträge (oder Entitäten, wenn Sie bevorzugen). Diese sind einfache Daten-Objekte übertragen sind verziert mit DataContract und DataMember-Attribute. Ich bin ausdrücklich unter Angabe der Namen und der namespace. - Der Versuch, die Prinzipien befolgen, die von IDesign Empfehlung von durchschnittlich 12 Mitglieder pro service-Vertrag, ich bin bricht mir das service-Projekt in mehrere services.
Meine Daten Verträge sind in einer separaten assembly, die ich zur Verfügung stellen kann, wenn unsere Kunden Sie sind mit .Net. Sie kann Ihnen sagen, Ihre service-Referenz, um die Wiederverwendung von Typen der referenzierten Assemblys. Allerdings, wenn Sie nicht verwenden .net und verwenden Sie 2-services, beide nutzen das gleiche Wesen ist, dann werden Sie, nehme ich an, bekommen eine mehrdeutige Referenz-Nachricht. Sehen kann ich dies in Visual Studio, wenn ich nicht auf den Daten-Vertrag dll.
Meine Frage ist nun, gibt es irgendetwas, was ich tun kann, in meine Dienste, oder Sie können in einem client-app zu bekommen, um mit zu qualifizieren, die die proxy-Daten ein Vertrag zustande gekommen ist?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schönen Artikel, der beschreibt, wie dieses Problem zu lösen.
Teilen DataContracts zwischen WCF-Dienste
InformationsquelleAutor der Antwort
Ich Neige auch zu halten alle meine Daten Verträge in einer assembly verwiesen wird, die von mehreren services und zahlreiche client-apps, die funktioniert Super, aber ich habe nie versucht, Sie nutzt den service außerhalb .NET.
Könnte es hilfreich sein, zu wissen, was Technologie, die Sie verwenden, verbrauchen die anderen Dienst als .NET? Was wirft die unklare Referenz-Nachricht?
InformationsquelleAutor der Antwort
Zufälligerweise habe ich mehrere Dienste, die Freigabe von Objekten auf mein Ende. Ich bin nicht sicher, warum Sie dieses problem. In meinem Fall, ich bin in der Lage, den Zugriff auf die Objekte in dieser Art und Weise. . . .
SERVICE1 client = new SERVICE1()
client.CommonLibrary.Adresse. . .
SERVICE2 client2 = new SERVICE2()
client2.CommonLibrary.Adresse . . . .
InformationsquelleAutor der Antwort
Es hängt davon ab, welche Werkzeuge Sie verwenden werden auf der client-Seite. Zum Beispiel, mit Axis2 für Java das wsdl2java Werkzeug, teilen können, die Typen mit der-u Schalter.
wie kann ich die proxy-Objekte über mehrere Axis2 web-service-clients?
InformationsquelleAutor der Antwort
Von meinem Verständnis und arbeiten mit WCF, entweder ein von der Daten-Vertrag verwendet, die von der client-app keine Rolle, solange der vollqualifizierte name ist der gleiche und hat die gleichen Daten Mitglieder. Intern erstellen Sie einfach das Objekt dynamisch und weisen Sie diese Daten Elementeigenschaft mit der öffentlichen setter.
Bessere Ansatz ist, ich denke, dass ist umgestalten von Daten-Vertrag, so dass Sie alle die Häufig über mehr als ein service in einer assembly und verweisen Sie daher Sie nicht haben, diese ambiguious oder Konflikte unabhängig davon, wie viele Dienste von der client-app.
InformationsquelleAutor der Antwort
Erstellen wir unsere service-Proxys, die nicht über die Visual Studio-Assistenten, sondern von benutzerdefinierten batch-Dateien aufrufen slsvcutil.exe (als wir mit Silverlight). Dort können Sie einen namespace-mapping mit den /n-parameter wie diese:
Also alle Daten, die Verträge, die den namespace
http://youruri.org/CustomerService/DataContracts
werden generiert, um die clr-CLR-namespace.Namespace.CustomerService in die proxy-Datei und so weiter. Gegeben, die Sie generiert haben, diesen proxy im Voraus, die in der gleichen proxy-Montage, schneiden Sie das gesamte namespace aus der zweiten Datei und alles funktioniert einwandfrei - wir schrieben ein kleines tool für den letzten Schritt. Alle anderen Vertrags-namespaces generiert wird, um die CLR.Namepsace.MyService namspace (siehe das Sternchen bedeutet catch all)Den Prozess ist etwas hazzle einrichten, weil Sie zur hand Handwerk die batch-Dateien, aber sobald das getan ist funktioniert es auch.
InformationsquelleAutor der Antwort