2009-07-09 2 views
3

Weiß jemand, wie ich Webdienste Antworten beheben kann? Wenn ich meine Soap-Nachricht von einem Web-Service-Aufruf zurückbekomme, erhalte ich den Fehler "Die Zeichenfolge ist kein gültiger AllXsd-Wert", sobald es sich um einen Werttyp wie eine Datetime pro Beispiel handelt.Consuming SOAP Web Service, Fehler beim Deserialisieren von Werttypen

Meine Proxy-Klassen werden aus Wsdl mit wsdl.exe generiert, die WSDL scheint gültig. Ich habe nichts in den Proxy-Klassen falsch gesehen (angegebene Werte werden generiert, Datetime ist Nullable).

Ich habe netmon versucht, die Seifenumschläge auf dem Draht zu sehen, aber alles scheint normal.

Können Sie sich andere Möglichkeiten zur Fehlerbehebung vorstellen? oder vielleicht ein Hinweis darauf, was hier vor sich geht?

+0

Bitte posten Sie die komplette Ausnahme. Fangen Sie die Ausnahme und posten Sie das Ergebnis von ex.ToString(). –

Antwort

1

Ok Ich habe herausgefunden, was das Problem war.

Es gibt 2 Möglichkeiten für ein Element in SOAP null zu sein:

Entweder mit dem gesamten Element fehlt Oder mit dem Argument xsi: nil = "true" und kein Wert

Sie es fixiert Ändern ihrer Nachricht mit der ersten Option. Seitdem kann ich ohne Probleme deserialisieren.

Vielen Dank für Ihre Antworten.

1

Haben Sie Unterlagen zum Webservice? Sie melden dieses Problem, wenn Sie datetime verwenden, überprüfen Sie, ob das Datum im richtigen Format ist date.ToString("yyyy-MM-dd"); oder was auch immer Ihr Dienst erwartet.

1

Versuchen Sie Web Service Studio und schlagen Sie Ihren Webservice mit diesem Tool, um zu sehen, ob es das gleiche Problem wie Ihr Client hat. Sie können einige Hinweise sammeln. Ist der Webdienst Ihr Code? Wenn ja, verwenden Sie asmx oder WCF? Verwenden Sie einen DataContract-Serializer oder XmlSerializer? Haben Sie versucht, Ihren Client-Proxy neu zu generieren?

0

Meine SOAP-Anfrage zurück BadRequest wegen dieser xsi:nil="true" Sache.
Was es fixiert war an die Spitze des SOAP-Umschlag hinzuzufügen:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

Zum Beispiel:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://www.blahblahblah.com/myobjectdefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

Ich weiß nicht, warum SoapUI nicht dieses Bit generiert haben, aber trotzdem es hat es für mich repariert.