Ich entwickle einen Java-Webservice, der von .Net-Clients genutzt wird. Der Dienst macht eine Methode verfügbar, die ein Objekt als Argument akzeptiert, dieses Objekt hat ein Feld vom Typ List, die Zeilenklasse hat auch ein Feld vom Typ List.
Wenn nun ein Java-Client diesen Dienst nutzt, sieht er die Typen korrekt als Liste. Wenn jedoch ein .Net-Client den Dienst konsumiert, erwarte ich einen Array mit Arrays vom Typ Value (zB Value [] []) der Liste.
Die Versionskompatibilität wurde auf ".Net 3.5 / METRO 1.3" eingestellt.
Weiß jemand, wie ich das mit .Net- und Java-Clients so machen kann, dass sie List statt Value [] [] akzeptieren?
Reduzierte Versionen des Web-Service sind:
Service:
%Vor%Datenanforderung:
%Vor%Zeileninfo:
%Vor%Wert:
%Vor%Auf meinem .Net-Client sieht ich beim Erstellen des Anfrageobjekts das Zeilenfeld von FeeDataRequest als Wert [] [] anstelle von Liste.
Die Servicereferenz in .Net wurde so konfiguriert, dass der Sammlertyp System.Collections.Generic.List lautet.
Irgendeine Idee, wie man .Net sieht, sieht das richtig?
Können Sie die WSDL des Web-Service posten?
Standardmäßig wird das List-Objekt beim Generieren der WSDL in ein Array konvertiert. Von der WSDL versucht .NET, die Objekttypen zu erstellen.
Auch wenn Ihre RowInfo-Klasse nur eine Sammlung von Value-Objekten enthält, ist es nicht einfach, die Auflistung von Value-Objekten in der DataRequest-Methode zu verwenden, statt die RowInfo-Objekte zu sammeln
Ich würde empfehlen, zuerst WSDL zu machen und die Clients und Schnittstellen von dort zu erstellen. Führen Sie dann die Zuordnung zu den Objekten durch, mit denen Sie in der Serviceimplementierung arbeiten müssen.
Dein Schema wäre etwas wie
%Vor%Gefolgt von der RowInfo mit dem gleichen Muster, das wir für Zeilen hatten. Das ist minOccurs="0" und maxOccurs="unbounded". Dadurch wird der Clientgenerator eine Liste erstellen.
%Vor%Der letzte Typ, den Sie haben, ist Value.
%Vor%Schließlich benötigen Sie ein containing-Element.
%Vor%Natürlich ist das obige nur paraphrasierend, Sie müssen immer noch die Namensplätze und so einfügen.
Eines der Probleme mit neuen Web-Service-Entwicklern (ich selbst eingeschlossen) ist, dass wir denken, dass es einfach eine gute Idee ist, nur den Web-Service zu codieren und Code-Generierung zu machen. Leider, nachdem ich damit herumgespielt habe, denke ich, dass, wenn Sie jemanden haben, der weiß, wie man WSDL und XML-Schema schreibt, Sie besser interoperieren und den Wert von Web-Services ernten könnten.
Insbesondere der XML-Schemateil. Ich bin von der Schule, dass der hybride Ansatz (Code zuerst WSDL, aber Vertrag zuerst Schema) wahrscheinlich der beste Ansatz ist, weil Sie sich nicht damit beschäftigen müssen, den Bindungscode selbst zu wiederholen. Jedoch werden die Fähigkeiten, die notwendig sind, um es zu verstehen, schwieriger.
Tags und Links java .net c# web-services