错误处理 •调用时可以提供一个额外的错误回调函数 •包括超时和服务器端抛出的异常 •超时只能设置在WebService级别 –或者设置在PageMethods对象上 –无法在每个MethodCall时指定 •Sys.Net.WebServiceError –timedout、message、exceptionType、stackTrace属性 ErrorHandling.asmx Code: <%@ WebService Language="C#" Class="ErrorHandling" %> using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Script.Services; using System.Threading; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class ErrorHandling : System.Web.Services.WebService { [WebMethod] public int GetDivision(int a, int b) { return a / b; } [WebMethod] public int Timeout() { Thread.Sleep(5000); return 0; } } 3_ErrorHandling.aspx Code: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="3_ErrorHandling.aspx.cs" Inherits="_3_ErrorHandling" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="ErrorHandling.asmx" /> </Services> </asp:ScriptManager> <input type="button" value="getDivision" οnclick="getDivision(5, 0)" /> <input type="button" value="timeout" οnclick="timeout()" /> <mce:script language="javascript" type="text/javascript"><!-- function getDivision(a, b) { ErrorHandling.GetDivision(a, b, null, failedCallback); } function timeout() { ErrorHandling.set_timeout(2000); ErrorHandling.Timeout(null, failedCallback); } function failedCallback(error) { var message = String.format( "Timeout: {0}/nMessage: {1}/nExceptionType: {2}/nStackTrace: {3}", error.get_timedOut(), error.get_message(), error.get_exceptionType(), error.get_stackTrace()); alert(message); } // --></mce:script> </form> </body> </html> 参考:ASP.NET AJAX深入浅出系列课程