Mehr Dynamik bei Webservice?
-
Moins
Ich habe eine Frage bzw. ein Verständnis Problem...
Ich habe ein WSDL und muss nun einen Server Programmieren welchem
diesem WSDL entspricht. Soweit so gut.Wie ich gelesen habe müsste ich Objekte (struct) erstellen, welche
den Strukturen des WSDL gleichkommen und diese als Parameter/Rückgabewert
setzen. z.B.:// ... cut ... // [WebMethod] public myObjReturnHelloWorld HelloWorld(myObjParamHelloWorld data) { // ... mache was du machen willst ... // }
Nun, Laut WSDL (xsd) wird das XML welches ich als Parameter bekommen sollte
hat aber auch Attribute, welche ich mit dieser Art nicht Abdecken kann.
Zumal widerstrebt es mir dynamisches XML in statische Strukturen abzubilden.Wie soll ich so etwas in einem Objekt Abbilden:
<testInfo> <gewicht me="kg">15</gewicht> <zeit me="az">34.5</zeit> <name>Haleon</name> </testInfo>
Wie ich an die Cdaten kommen verstehe ich ja noch, aber die Attribute gehen
verloren.Nach etwas suchen habe ich scheinbar die Lösung gefunden: xmlDocument.
Mein Test sieht etwa so aus:[WebMethod] public System.Xml.XmlDocument vergleicheZweige(System.Xml.XmlDocument xmlDaten) { System.Xml.XmlDocument xmlRet = new XmlDocument(); string name = (xmlDaten.GetElementById("name")).Value; string vorname = (xmlDaten.GetElementById("vorname")).Value; string result = "false"; if (name == vorname) { result = "true"; } xmlRet.LoadXml("<antwort>" + result + "</antwort>"); return xmlRet; }
Schon voller Vorfreude habe ich den Test generiert und gestartet, das Ergebnis war ernüchternd:
POST /Service1.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/vergleicheZweige" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <vergleicheZweige xmlns="http://tempuri.org/"> <xmlDaten>xml</xmlDaten> </vergleicheZweige> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <vergleicheZweigeResponse xmlns="http://tempuri.org/"> <vergleicheZweigeResult>xml</vergleicheZweigeResult> </vergleicheZweigeResponse> </soap:Body> </soap:Envelope>
Dementsprechend war auch das WSDL. Anstelle der XML struktur nahm er einfach
xmlDaten (Name des Parameters). Was aber nicht meiner Vorgabe (des Clients) entspricht. Somit würden wohl Server und Client aneinander vorbei reden.Ich könnte nun versuchen etwas zu basteln, da ich ja nun weiss das er
den Namen des Parameters verwendet. Wie kann man diese Automatismus abschalten?Wie löst man so etwas am besten? Könnte man nicht eine xsd Schema als Rückgabe
oder Parameter definieren?Gruss
Ghost