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.