分享
 
 
 

在ASP.NET Atlas中调用Web Service—处理错误

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在本系列的上一篇(在ASP.NET Atlas中调用Web Service——介绍及简单应用)中,我们熟悉了Atlas中调用Web Service的最基础方法,但是在实际开发中,仅仅发出请求并等待返回结果是不够的,我们大都需要考虑对错误超时等的处理,也要允许用户取消操作。幸运的是,Atlas对Web Service中的Web Method的封装也充分考虑到了这些需求。

让我们举一个Web Method的例子来说明,例如,对于如下的Web Method:

public class ComplexWebService : System.Web.Services.WebService {

[WebMethod]

public string BadMethod(int delayTime, bool throwException)

{

// something something

}

}

Atlas产生的JavaScript mash up将会有如下的签名: ComplexWebService.BadMethod(

delayTime,

throwException,

onMethodComplete,

onMethodTimeout,

onMethodError,

onMethodAborted,

userContext,

timeoutInterval,

priority,

useGetMethod,

);

注意到Web Method中的两个参数按照顺序作为了JavaScript方法的前两个参数,接下来还有一些额外的参数:

onMethodComplete:指定当该方法顺利完成并返回时被触发的回调函数名,一般情况下您应该总是指定这个方法。

onMethodTimeout,:指定当该方法执行超时时被触发的函数名。

onMethodError:指定当该方法在执行中遇到异常时被触发的函数名。

onMethodAborted:制定当该方法执行期间被用户取消时被触发的函数名。

userContext:用户上下文对象,在上述四个函数中都可以访问到。

timeoutInterval:设定超时的时间限制,单位毫秒,默认值好像为90000。一般情况下不需要更改。

priority:设定该方法的执行优先级。该优先级将被用于批量AJAX操作(将在下一篇中提到)中。

useGetMethod:是否采用HTTP GET来发送请求,默认为false。

上述这八个属性的顺序必须按照指定的来。但有时候我们只需要指定顺序靠后的某个参数,就不得不同时书写前面的参数。为此,Atlas特意为我们提供了另一种调用方法,将上述八个参数以dictionary的形式传给该方法。例如当我们只需要onMethodComplete和timeoutInterval参数时,可以这样写:

ComplexWebService.BadMethod(

delayTime,

throwException,

{

onMethodComplete: completeHandler,

timeoutInterval: 10000

}

);

OK,让我们通过一个实例看看在一般情况下上述四种回调函数(onMethodComplete,onMethodTimeout,onMethodError和onMethodAborted)中的常见处理。

首先让我们完成开头部分的Web Service方法:

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class ComplexWebService : System.Web.Services.WebService {

[WebMethod]

public string BadMethod(int delayTime, bool throwException)

{

if (throwException)

{

throw new Exception("Sorry, I do not like to do this!");

}

System.Threading.Thread.Sleep(delayTime);

return "Done!";

}

}

可以看到该方法有两个参数:delayTime指定该方法的延时,throwException指定该方法是否掷出异常。通过控制这两个参数以及调用时的timeoutInterval参数,我们就可以模拟完成,超时以及异常的三种情况。

然后,在页面中加入ScriptManager并添加对这个Web Service的引用:

<atlas:ScriptManager ID="ScriptManager1" runat="server">

<Services>

<atlas:ServiceReference Path="ComplexWebService.asmx" />

</Services>

</atlas:ScriptManager>

在ASPX页面上添加四个按钮,用来触发下述四种情况: <div>

This is a BAD method, it can:<br />

<input id="btnWorkFine" type="button" value="work fine" onclick="return btnWorkFine_onclick()" />

<input id="btnTimeOut" type="button" value="timeout" onclick="return btnTimeOut_onclick()" />

<input id="btnThrowException" type="button" value="throw an exception" onclick="return btnThrowException_onclick()" />

<input id="btnCanceld" type="button" value="get canceled" onclick="return btnCanceld_onclick()" />

</div>

正常完成,我们指定服务器端没有延时也没有异常,并给出了一个合理的(10秒)的超时时间:

function btnWorkFine_onclick() {

ComplexWebService.BadMethod(

0,

false,

onBadMethodComplete,

onBadMethodTimeout,

onBadMethodError,

onBadMethodAborted,

"btnWorkFine_onclick",

10000

);

}

function onBadMethodComplete(result)

{

alert(result);

}

超时,指定服务器端延时3秒,但超时时间设置成为仅1秒:

function btnTimeOut_onclick() {

ComplexWebService.BadMethod(

3000,

false,

onBadMethodComplete,

onBadMethodTimeout,

onBadMethodError,

onBadMethodAborted,

"btnTimeOut_onclick",

1000

);

}

function onBadMethodTimeout(request, userContext)

{

var timeoutString = "The call to '" + userContext + "' failed due to time out!";

alert(timeoutString);

}

异常,制定服务器端掷出异常。注意回调函数中可以使用response参数得到详细的错误信息:

function btnThrowException_onclick() {

ComplexWebService.BadMethod(

0,

true,

onBadMethodComplete,

onBadMethodTimeout,

onBadMethodError,

onBadMethodAborted,

"btnThrowException_onclick",

10000

);

}

function onBadMethodError(result, response, userContext)

{

var errorString = "Test '" + userContext + "' failed!";

if (result == null) {

errorString += " Status code='" + response.get_statusCode() + "'";

}

else {

errorString +=

" Message='" + result.get_message() +

"'\r\nstackTrace = " + result.get_stackTrace();

}

alert(errorString);

}

用户取消,与正常完成类似,不过在发出请求后立刻使用request.abort()取消了操作:

function btnCanceld_onclick() {

var request = ComplexWebService.BadMethod(

2000,

false,

onBadMethodComplete,

onBadMethodTimeout,

onBadMethodError,

onBadMethodAborted,

"btnCanceld_onclick",

100

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有