C# Fehler beim Aufruf einer SOAP-Methode

Karbe

Rear Admiral
Registriert
Feb. 2008
Beiträge
5.399
Ich hab einen SOAP-Webservice per WSDL eingebunden und erhalte beim Aufruf einer Methode folgenden Fehler [1]
Die Date-Properties werden von der Webservice-Referenz wie folgt initialisiert [2]

Jemand eine Idee?


[1]
Code:
Fehler beim Reflektieren von 'obj'.
System.InvalidOperationException: 'date' ist ein ungültiger Wert für die SoapElementAttribute.DataType-Eigenschaft. Die Eigenschaft darf nur für primitive Typen angegeben werden.
   bei System.Xml.Serialization.SoapReflectionImporter.ImportTypeMapping(TypeModel model, String dataType, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportAccessorMapping(MemberMapping accessor, FieldModel model, SoapAttributes a, String ns, XmlSchemaForm form, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportFieldMapping(FieldModel model, SoapAttributes a, String ns, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportStructLikeMapping(StructModel model, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportTypeMapping(TypeModel model, String dataType, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportAccessorMapping(MemberMapping accessor, FieldModel model, SoapAttributes a, String ns, XmlSchemaForm form, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers, XmlSchemaForm form, RecursionLimiter limiter)
   bei System.Xml.Serialization.SoapReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean writeAccessors, Boolean validateWrapperElement, RecursionLimiter limiter)

C#:
[System.Xml.Serialization.SoapElementAttribute(DataType="date", IsNullable=true)]
        public System.Nullable<System.DateTime> datum {
            get {
                return this.datumField;
            }
            set {
                this.datumField = value;
                this.RaisePropertyChanged("datum");
            }
        }
 
System.InvalidOperationException: 'date' ist ein ungültiger Wert für die SoapElementAttribute.DataType-Eigenschaft. Die Eigenschaft darf nur für primitive Typen angegeben werden.
Die Fehlermeldung sagt, dass die DataType-Eigenschaft von einem "primitiven" Datentypen stammen muss.

C#:
public System.Nullable<System.DateTime> datum {
Du verwendest einen Nullable DateTime. Nullable Struktur- bzw. Wertetypen sind keine "primitiven" Datentyp mehr...

Das dürfte der Fehler sein.

greetz
hroessler
 
Zuletzt bearbeitet von einem Moderator:
mist...
 
hroessler schrieb:
Du verwendest einen Nullable DateTime. Nullable Struktur- bzw. Wertetypen sind keine "primitiven" Datentyp mehr...
Die Property ist halt laut der WSDL-Definition nullable:
date datum (nillable = true, minoccurs = 1, maxoccurs = 1)
 
Ja, aber wie lässt sich nun deiner Meinung nach das Problem lösen?
 
Die technische Lösung ist ziemlich simpel: Verwende einen einfachen DateTime. Wenn jetzt der Webservice allerdings null zurückgeben kann, wird es während der Ausführung der Action knallen.

Fachlich wäre dann zu klären, ob es hier wirklich ein Nullable DateTime sein muss....

greetz
hroessler
 
Ich gehe davon aus der Code ist generiert oder? Dann muss Du den generierten Code anpassen, das hatte ich mit einer fehlerhaften WSDL auch schon mal. Unschön ist, dass jedes Mal, wenn Du den Code neu generieren lässt, die Stelle auch wieder anpassen musst...

Kenn mich mit der SOAP und WSDL Spezfikation nicht 100%ig aus, aber der Fehler sagt ja, "'date' ist ein ungültiger Wert für die SoapElementAttribute.DataType-Eigenschaft. Die Eigenschaft darf nur für primitive Typen angegeben werden."

Du müsstest mal nachlesen ob das stimmt, aber ich gehe davon aus, dann solltest Du evtl. mal den WSDL Hoster sagen, dass seine WSDL falsch ist.
 
Das scheint die Lösung zu sein und ja, bei jeder Aktualisierung der Definition wird die Referenz überschrieben.
Ärgerlich, aber handelbar.

Danke für die Hilfe!
 
Zurück
Oben