Da ich nur PHP-webspace habe, bin ich grad dabei in Silverlight einen PHP-WSDL-webservice zu konsumieren.
Allerdings kann man auf die Datentypen natürlich kein foreach anwenden, da er kein GetEnumerator hat. Gibt es eine Möglichkeit ihm das beizubringen, oder muss ich da einen Count dranbasteln zum manuellen iterieren?
Grüße,
Chris
"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)
Hallo UNeverNo,
ich bin was Webservices angeht nicht gerade der Profi hab mir aber letztes Semester ein Fach 'Verteilte Systeme' angehört.
WSDL ist doch nur doch nur die Sprache zur Beschreibung des Webservices, also dessen Schnittstellen. Die Daten selbst werden doch wieder anders übertragen, bpsw. im SOAP-Format.
Und wenn du da auf der Webservice-Seite ein Array reingibst, sollte auf der Silverlight-Client-Seite auch ein Array rauskommen, das natürlich auch IEnumerable implementiert.
Oder was hast du genau vor?
Grüße
Hallo UNeverNo,
ich hab in meinem Projekt WCF als Webservice verwendet.
Im ASPX Projekt und WPF Projekt konnte ich dann den Webservice einfach als Service Reference hinzufügen.
Dort kann man dann auswählen was für einen Datentyp man haben will.
D.h. in XML wird einfach eine Aufzählung von den Elementen gemacht.
Was das am Server für ein Listen-Typ war ist dabei egal.
Beim Client wird das ohnehin wieder in den festgelegten Typ gemappt.
Also kurz gesagt kann man da auswählen ob er eine List<T>, Array, usw. verwenden soll.
In Silverlight sollte das Ganze gleich bleiben (auch wenn SL manche Übertragungs-protokolle nicht unterstützt).
Gruß
Michael
Man kann sich auch mit dem wsdl Tool von VS aus der wsdl Datei C# Klassen erzeugen lassen, dann braucht man nur noch diese verwenden 😃
Bietet sogar die Möglichkeit des PropertyChanged.
Der Aufruf:
wsdl.exe [URL]http://192.168.12.34/myAPI/myAPI.wsdl[/URL] /parameters:wsdl.xml
Die wsdl.xml wie ich sie immer verwende:
<wsdlParameters xmlns="http://microsoft.com/webReference/">
<webReferenceOptions>
<codeGenerationOptions>properties enableDataBinding</codeGenerationOptions>
</webReferenceOptions>
</wsdlParameters>
Die Klassen kann man dann Instantiieren und benutzen, und der tatsächliche Aufruf des WebService ist dann weg gekapselt in diesen Klassen 😃