Laden...

Webservice liefert Datum '0000-00-00'

Erstellt von HappyLil vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.821 Views
H
HappyLil Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren
Webservice liefert Datum '0000-00-00'

hallo
ich konsumiere einen Webservice in .net. Der Provider hat folgendes definiert:
Null-Datums-Felder werden als '0000-00-00' (yyyy-mm-dd) übermittelt.
Schön und gut. Das ganze knallt natürlich wenn .Net versucht das Datum zu parsen.

Kennt jemand einen Weg wie man das Antwort-XML VOR dem Deserialisieren modifizieren kann?

Hier noch das WSDL des entsprechenden Response:
<xsd:complexType name="LicenseData">
<xsd:sequence>
<xsd:element name="Type" type="xsd:string"/>
<xsd:element name="From" type="xsd:date"/>
<xsd:element name="To" type="xsd:date"/>
</xsd:sequence>
</xsd:complexType>

Im To steht meistens: '0000-00-00', da es ein NotNull Attribute ist versucht .net das Datum in ein DateTime zu parsen.

gruss lil

C
2.121 Beiträge seit 2010
vor 12 Jahren

Der beste Weg wäre, den Webservice zu korrigieren, damit der korrekte Daten liefert.
Wer parst dieses Datum auf deiner Seite? Kannst du das evtl. erst mal als String auslesen und dann selber in ein Datum umwandeln?
Oder passiert das alles bereits innerhalb deinem WCF?

H
HappyLil Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren
Hallo

... das parsed DateTime.parse. Das geschieht automatisch im xml-serializer irgendwo in den tiefen der generierten Reference.cs Klasse (Datei)
Der Aufruf geschieht im SoapHttpProtocol.invoke.

Aber ja, ich stimme mit dir überein, es gibt keinen monat 0 und auch keinen tag 0, ob es jemals ein jahr 0 gegeben hat weiss ich nicht 😃. insofern liefert der service müll.
cu

C
2.121 Beiträge seit 2010
vor 12 Jahren

Es handelt sich also nicht um einen WCF-Dienst?
Wie stehst du zu dem Provider, hast du darauf Einfluss? Dann würd ich eine Änderung versuchen. Immerhin gibts andere Wege um null zu übergeben. Und der beste Weg um etwas zu tun ist, nicht von Anfang an schon an allen Ecke zu pfuschen um irgendwelchen Murks zu überdecken.

Oder du suchst mal ob es Events gibt oder irgendeine Möglichkeit, wie du in die Rohdaten eingreifen kannst, bevor die an den Parser gehen. Allerdings dürfte das auch eher müßig sein, wenns überhaupt geht.

H
HappyLil Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren

... das mit dem Eingreifen hab ich auch mal versucht, aber abgebrochen weil es ZIEMLICH viele Eingriffe wären, mal ganz abgesehen davon dass ich noch keinen technischen weg gefunden habe.
nein, ist kein WCF Service. Kann .net überhaupt Nullable-DateTime empfangen und senden?
Mein Vorschlag an den Provider wäre, dass ich ihm beim Request mitteile wie er ein Null-DAtetime senden soll. ZB Null=1.1.01, bzw wie ich null-Datetime senden werde. Ich kann ja auch kein 0000-00-00 Datum erzeugen wenn ich mal null senden müsste.

C
2.121 Beiträge seit 2010
vor 12 Jahren

Wenn du dich mit dem Provider besprechen kannst wär das natürlich die beste Lösung.
Probiers, was bei Nullable rauskommt. Das wäre sicher der für dich schönste Weg.
Ansonsten einigt euch doch einfach auf einen String im bisherigen Format, der im null-Fall leer bleibt. Dann musst du halt beim Empfang eines Objekts erst mal was umstricken, aber es wäre keine "Misshandlung" eines speziellen Wertes.