[HINWEIS: Ich bin hier wirklich auf der Suche nach einigen guten Debugging-Techniken. Vielleicht einige Tricks oder Möglichkeiten zur Vereinfachung der Dinge, die ich nicht kenne].
Ich bin mit der Technik des Aufrufs [WebMethods] definiert in einer ASPX-Seite von JQuery wie erwähnt aquí y aquí . Dies scheint eine immer häufiger angewandte Methode zu sein.
Ich benutze es schon eine Weile und es funktioniert im Allgemeinen gut. Aber während der Entwicklung ist es ziemlich anfällig. Jeder falsche Parameter führt zu einer sehr vagen, unspezifischen Fehlermeldung. Zum Beispiel, wenn ich eine ziemlich komplexe Web-Methode als definiert haben:
[WebMethod]
public static string SaveComplexRecord(int recID, GeneralData general, SomeObject data, SomeOtherObject moreData)
{
//do a bunch of stuff with that data
}
Und GeneralData, SomeObject und SomeOtherObject haben alle eine Mischung aus verschiedenen Arten von Parametern (Strings, Ints, Bools, Datetimes.) Es ist sehr wahrscheinlich, vor allem während der anfänglichen Entwicklung, dass ich das JSON auf der Client-Seite falsch erstellen werde. Vielleicht werde ich dies tun:
var data = {
recID: curID,
general:
{
a: aValue,
b: bValue,
c: cValue
},
data:
{
d: dValue,
e: eValue,
f: fValue
},
moredata:
{
g: gValue,
h: hValue,
i: iValue
}
};
Dies führt zu einem Fehler, da der Name des dritten Parameters moreData und nicht moredata lautet. Und das ist nur ein Beispiel, es könnte noch hundert andere subtile Tippfehler geben.
Wenn ich diese Methode von C# aus aufrufen würde, würde der Compiler eine Fehlermeldung wie "No overloaded method of SaveComplexRecord takes three parameters." oder eine andere hilfreiche Meldung ausgeben, die Sie in die richtige Richtung weist.
Also... gibt es eine Möglichkeit, ASP.Net dazu zu bringen, hier bessere Fehlermeldungen zu produzieren?
Oder gibt es ein Dienstprogramm, das automatisch die JSON-Parameterstruktur eines [WebMethod]-Aufrufs erstellt? (genau wie man automatisch die WSDL eines Webdienstes abrufen kann)
...oder eine andere Technik, die ich vielleicht übersehen habe?
Und der Vollständigkeit halber hier ist, wie ich diese WebMethods von JQuery aus aufrufe:
var jsondata = $.toJSON(data);
$.ajax({
type: "POST",
url: "MyWebPage.aspx/SaveComplexRecord",
data: jsondata,
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function(xhr)
{
xhr.setRequestHeader("Content-type",
"application/json; charset=utf-8");
},
success: function(msg)
{
//do something on success
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert("ERROR status:" + textStatus + " error:" + errorThrown);
}
});