•调用时可以提供一个额外的错误回调函数
•包括超时和服务器端抛出的异常
•超时只能设置在WebService级别
–或者设置在PageMethods对象上
–无法在每个MethodCall时指定
•Sys.Net.WebServiceError
–timedout、message、exceptionType、stackTrace属性
aspx
<
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 " onclick = " getDivision(5, 0) " />
< input type = " button " value = " timeout " onclick = " timeout() " />
< 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);
}
</ script >
</ form >
< asp:ScriptManager ID = " ScriptManager1 " runat = " server " >
< Services >
< asp:ServiceReference Path = " ErrorHandling.asmx " />
</ Services >
</ asp:ScriptManager >
< input type = " button " value = " getDivision " onclick = " getDivision(5, 0) " />
< input type = " button " value = " timeout " onclick = " timeout() " />
< 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);
}
</ script >
</ form >
cs
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
{
}
ErrorHandling.asmx
<%
@ 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 ;
}
}
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 ;
}
}