Beispiel Validierungs-Fehler: Wert '2' ist kein Gültiger Wert für Abfragetypen. (web-service)
Ich habe ein web-service, leite ich eine enum -
public enum QueryType {
Inquiry = 1
Maintainence = 2
}
Wenn ich ein Objekt übergeben, die einen Parameter hat, der QueryType auf es, bekomme ich die Fehlermeldung zurück, die vom web-service sagen:
'2' ist kein Gültiger Wert für QueryType
wenn Sie deutlich sehen können, aus der Deklaration der enum, dass es ist.
Kann ich nicht ändern Sie die Werte der enum-weil legacy-Anwendungen verwenden die Werte, aber ich würde lieber nicht haben, um setzen Sie einen "default" Wert, nur um die push-index der Enumeration zu machen, damit es funktioniert mit meiner web-service. Es wirkt wie der web-service wird über den index der Werte anstatt der Werte selbst.
Hat jemand einen Vorschlag was ich machen kann, damit es funktioniert, ist es etwas, was ich ändern kann, in meiner WSDL?
- Sind Sie sicher, dass die Binär-Dateien in das web-service up-to-date? Ich habe gesehen, Sachen wie diese, wenn ich kompilieren eine Bibliothek Projekt-und vergessen Sie das kopieren der DLL in den web-service-Ordner.
- Nein, ich bin mir nicht sicher, aber ich weiß, die Signatur, dass enum nicht geändert hat. Könnte das noch dieses Problem verursachen? Ich werde versuchen, aktualisieren Sie die web-service mit dem aktuellsten DLL und sehen, ob das einen Unterschied macht. Danke Paul!
- Paul, leider hat das nicht funktioniert. Es ist wirklich scheint, wie es versucht, den index null der enum-statt von Wert
- Gibt es eine andere Abfragetypen enum irgendwo? In der MSDN-Hilfe sagt, es ist ein in Microsoft.SharePoint.Dsp.
- Ich bin mir nicht sicher. Was ich am Ende dabei für den Zwischenbericht, bis ich mehr Zeit haben zu spielen mit ihm, wirft es ' s-Wert zu einem int und vorbei an der int auf den Dienst und dann die Revision zurück, wie den QueryType auf die web-service-Seite. Scheint zu funktionieren gut so
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie sind mit asmx-Webdiensten für diese Antwort.
Deine Vermutung ist richtig-die XML-Serializer verwendet die Aufzählung der Namen in der WSDL-und nicht der Wert.
Wenn Sie sich Ihre WSDL-es wird in etwa so Aussehen:
Also, beim aufrufen des service-es erwartet einen string, der den Namen der enumeration Mitglied. Wenn Sie verwenden ein .NET-proxy, der diese Umwandlung ist in der Regel für Sie verarbeitet. Wenn ein Wert übergeben wird, der Dienst, der kann nicht deserialisiert werden, in den enum-Wert, erhalten Sie die Nachricht, die Sie sehen.
Um dies zu umgehen, können Sie sicherstellen, dass Sie senden den erwarteten Wert oder, wenn das nicht für Sie arbeiten, können Sie sagen, die XML-Serialisierung, welche Werte Sie verwenden möchten. Sie können dies tun, mit der XmlEnum Attribut:
Dies erzeugt die folgende schema-fragment (aus dem WSDL):
Dann, wenn Sie übergeben den Wert "2" in den Dienst, dann sollte es korrekt deserialisiert werden, aber Sie verlieren die Bedeutung der enumeration-Werte.
Versuchen Sie, die
Flags()
Attribut der QueryType definition.Etwas zu prüfen ist, um sicherzustellen, dass Sie initialisieren Sie Ihre enum-Werte und nicht davon ausgehen, das erste Element aus der Liste verwendet werden.
Beispielsweise, dass ein enum definiert, die nicht an der int-Wert von 0 wie diese:
Normalerweise, wenn Sie erklären, Ihre enum-Instanz, die Sie könnten versucht sein, dies zu tun:
Wenn die Daten-Struktur, die Sie zurück durch das webservice wurde eine enum-variable angehängt erhalten Sie die Instanz Fehler bei Aufruf von außerhalb der webservice - (aber wenn Sie das dataclass innerhalb der webservice-Sie haben keine Fehler).
Punkt ist, nur sicher sein, dass Sie ordnungsgemäß initialisiert Ihre enum-Instanz, dass Sie die Rückkehr in den webservice.