asp.net环境下Webservice服务的错误处理
在Asp.net Ajax技术中,我们在客户端往往用脚本调用WEB服务,当服务出现错误时(超时、除零),如何通知客户端,客户端又如何根据获取的信息提示用户?
方法其实很简单,我们直接看下面的代码。
1、新建一个服务:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService] //这里需要用到ScriptService方法,使得客户端可以用脚本访问此服务
public class ErrorHand : System.Web.Services.WebService
{
[WebMethod] //定义一个除法函数,注意b不能为0(当然我们演示的时候,输入的b肯定是0,目的就是看看出错到底怎么处理)
public int Division(int a,int b){ return a/b;}
}
2、在新建的一个aspx页面上进行如下操作:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>//这里注意,要添加一个web服务引用,这样就可以在页面中使用服务函数了。
<asp:ServiceReference Path="~/ErrorHand.asmx" />
</Services>
</asp:ScriptManager>
<input type="button" value="Click me" onclick="division(8,0)" /> //插入一个按钮,它触发division函数,下面我们看看脚本division函数如何调用服务端的Division服务函数。(8除以0)
<script type="text/javascript" language="javascript">//定义脚本
function division(a, b) { ErrorHand.Division(a, b, getSucceded, failed); } //看到ErrorHang了吧,就是我们定义的WEB服务类,包含有Division函数,就是我们第1步定义的服务函数。failed是出错是的回调函数,就是Division出错是要执行的函数。
function failed(error) //执行回调函数,error参数是执行Division函数出错时返回的WebServiceError对象
{
var message = String.format("TimeOut:{0}\nMessage:{1}\nExceptionType:{2}\nStackTrace:{3}", error.get_timedOut(), error.get_message(), error.get_exceptionType(), error.get_stackTrace()); //格式化显示出错信息,这里format方法大家应该比较熟悉,error对象内建的方法,大家通过英文也能读的懂,就不在这里赘述。
alert(message);//显示信息。
}
function getSucceded(result)
{ //如果正确时,显示从服务中调用的结果。
alert(result);
}
</script>
通过上面的简单示例,和大家探讨了在asp.net 客户端中调用web服务出错时的处理方法,希望对大家能有帮助。