3 Stimmen

ASP.NET Web Service gibt IndexOutOfRangeException mit Argumenten zurück

Ich habe den folgenden Webdienst:

[ScriptService]
public class Handler : WebService {

    [WebMethod]
    public void method1() {

        string json = "{ \"success\": true }";

        System.Web.HttpContext.Current.Response.Write(json);

    }

    [WebMethod]
    public object method2(Dictionary<string, object> d) {

        Dictionary<string, object> response = new Dictionary<string, object>();

        response.Add("success", true);

        return response;

    }

}

Die erste Methode akzeptiert ein herkömmliches HTML-Formular und schreibt als Antwort einen JSON-String auf die Seite. Die zweite Methode akzeptiert einen über AJAX geposteten JSON-Wert und gibt ein serialisiertes Objekt zurück.

Beide Methoden funktionieren gut auf ihre eigenen, aber wenn zusammen in den gleichen Webdienst ich diesen Fehler beim Aufrufen von method1 erhalten:

System.IndexOutOfRangeException: Index was outside the bounds of the array.

Wenn ich die Argumente aus Methode2 entferne, funktionieren sie.

Kann mir jemand sagen, warum dies der Fall ist?

Edit :

Das Problem erstreckt sich auf den Argumenttyp von method2. Wenn ich es auf eine Zeichenfolge oder einfachen Datentyp ändern, funktioniert es gut. Wie Joel vorschlägt, ist es wahrscheinlich, weil Dictionaries nicht serialisiert werden können. Dies scheint nicht meine Anforderungen durch Ajax gesendet zu beeinflussen und bricht nur direkte Form Beiträge zu diesem Handler. Daher ist mein Workaround, die Form Post Handler in einer separaten Datei selbst zu setzen. Nicht ideal, aber funktioniert für meine Anwendung.

4voto

Joel Etherton Punkte 36629

Dictionaries sind nicht serialisierbar. Sie hinter einem Objekt zu verstecken, bringt Ihnen nichts. Sie müssen Ihr Wörterbuch zunächst in ein Array oder ein anderes serialisierbares Objekt umwandeln, bevor Sie es versenden.

Warum gibt es kein XML-serialisierbares Wörterbuch in .NET? http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx http://www.tanguay.info/web/index.php?pg=codeExamples&id=333

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X