Instanzüberprüfungsfehler: '2' ist kein gültiger Wert für QueryType. (Internetservice)

8

Ich habe einen Web-Service, an dem ich eine Anrede übergebe

%Vor%

Wenn ich ein Objekt übergebe, das einen Parameter von QueryType enthält, bekomme ich den Fehler vom Webservice zurück:

  

'2' ist kein gültiger Wert für QueryType

wenn Sie aus der Deklaration der enum klar sehen können, dass es ist.

Ich kann die Werte der Enumeration nicht ändern, weil Legacy-Anwendungen die Werte verwenden, aber ich möchte keinen "Standard" -Wert einfügen, nur um den Index der Enumeration zu verschieben, damit er mit meinem Web-Service funktioniert. Es verhält sich so, als ob der Web-Service den Index der Werte und nicht die Werte selbst verwendet.

Hat jemand einen Vorschlag, was ich tun kann, damit es funktioniert, kann ich etwas in meiner WSDL ändern?

    
Anthony Shaw 15.09.2009, 20:31
quelle

3 Antworten

7

Ich gehe davon aus, dass Sie asmx Web Services für diese Antwort verwenden.

Ihre Vermutung ist richtig - der XML-Serializer verwendet die Enumerationsnamen in der WSDL und nicht den Wert.

Wenn Sie Ihre WSDL betrachten, sieht das etwa so aus:

%Vor%


Wenn Sie den Service aufrufen, erwartet er daher eine Zeichenfolge, die den Namen des Aufzählungselements angibt. Wenn Sie einen .NET-Proxy verwenden, wird diese Konvertierung normalerweise für Sie erledigt. Wenn ein Wert an den Service übergeben wird, der nicht in den Enumerationswert deserialisiert werden kann, erhalten Sie die Nachricht, die Sie sehen.

Um dies zu umgehen, können Sie sicherstellen, dass Sie den erwarteten Wert senden. Wenn dies für Sie nicht funktioniert, können Sie dem XML-Serializer mitteilen, welche Werte Sie verwenden möchten. Sie können dies mit dem XmlEnum-Attribut tun:

%Vor%


Dies erzeugt das folgende Schema-Fragment (aus der WSDL):

%Vor%


Wenn Sie dann den Wert "2" in den Service eingeben, sollte er korrekt deserialisiert werden, aber Sie verlieren die Bedeutung der Aufzählungswerte.

    
Randy Levy 18.09.2009, 05:52
quelle
2

Fügen Sie der QueryType-Definition das Attribut Flags() hinzu.

    
tmp 30.03.2010 17:09
quelle
0

Zu beachten ist, dass Sie Ihre Enum-Werte initialisieren und nicht davon ausgehen, dass das erste Element aus Ihrer Liste verwendet wird.

Beispielsweise wurde eine Enumeration definiert, die nicht mit dem int-Wert von 0 beginnt:

%Vor%

Wenn Sie Ihre Enum-Instanz deklarieren, sind Sie normalerweise versucht, dies zu tun:

%Vor%

Wenn an die Datenstruktur, die Sie über den Webservice zurücksenden, eine enum-Variable angehängt ist, erhalten Sie den Instanzfehler, wenn Sie von außerhalb des Webservice aufgerufen werden (wenn Sie jedoch die Datenklasse innerhalb des Webservice verwenden, haben Sie keine Fehler).

Punkt ist, nur sicher sein, dass Sie Ihre Enum-Instanz, die Sie im Webservice zurückgeben, ordnungsgemäß initialisiert haben.

    
user1207213 26.03.2013 02:37
quelle

Tags und Links