分享
 
 
 

在ASP.NET Atlas中调用Web Service—批量调用以提高效率

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

作者:Dflying Chen (http://dflying.cnblog.som/)

对于Atlas程序,在某些情况下,我们需要在短时间内调用大量的Web Service,例如某个列表中用户快速的点击删除。这时网络带宽,稳定程度等等往往会造成较长时间的延迟。如果可以将这些调用包装成一个单一的请求,那么用户只需忍受一次网络延迟,即可得到处理的结果,也间接的提高了效率。似乎这并不是一个很容易实现的功能,但幸运的是,Atlas中内建了对批量调用Web Service的支持,您所需要的只是在程序中简单设置一下。

Atlas中每个Web Service的调用请求都有三个优先级:0:高,1:中,2:低,默认值为中。

在调用的时候您可以通过PRiority参数(请参考:在asp.net Atlas中调用Web Service——处理错误,超时以及响应用户的取消操作)指定本次调用的优先级。对于高优先级的调用,Atlas并不应用批量调用,每次都会立即发送该请求;对于中和低优先级的调用,Atlas会将一定时间(请参考下面WebRequestManager的介绍)内的调用包装成一个单独的请求一起发送,或是当待调用的请求达到指定数目(请参考下面WebRequestManager的介绍)时一起发送。其中如果待调用的请求太多,那么会从中挑选中优先级的请求首先调用。

启用Atlas内建的批量调用Web Service支持,您首先需要在web.config中注册服务器端处理批量调用的handler(默认的Atlas Web Site Template已经启用了这个handler):

<httpHandlers>

<add verb="*" path="atlasbatchcall.axd" type="Microsoft.Web.Services.MultiRequestHandler" validate="false"/>

</httpHandlers>

然后在页面的Atlas xml脚本中加入对WebRequestManager的显示声明并设定该页面允许对Web Service的批量调用: <script type="text/xml-script">

<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">

<components>

<webRequestManager batchSize="5" enableBatching="true" batchDelay="3000" />

</components>

</page>

</script>

这里您需要注意的是WebRequestManager的如下三个属性:

enableBatching:设定该页面是否允许批量调用,默认值为false。这里我们应该设置为true。

batchSize:设定一次批量调用中包含的请求的最大数量,默认值为5。当待调用的请求超过这个设定时,即使未达到batchDelay中的设定时限,也立刻发出该批量请求。

batchDelay:设定一次批量调用的等待时限。默认值为1000(毫秒)。当等待时限超过这个设定时,即使未达到batchSize中的请求数量,也立刻发出该批量请求。

如此设定后,页面中的每一个Web Service请求都会应用批量调用。所以,对于单独的一次调用,您应该将其优先级指定为高。

让我们来看一个实例,首先编写一个Web Service,其中有下述Web Method,两个参数分别代表该任务的顺序(这样我们可以分清任务执行的顺序)以及优先级:

[WebMethod]

public string DoTask(int taskID, int priority)

{

if (priority < 0 || priority > 2)

throw new Exception("priority can only be 0, 1 or 2!");

return string.Format("Task (ID: {0}, Priority: {1}) finished.", taskID, priority);

}

然后按照开头部分代码在web.config中启用批量调用,并在页面上添加WebRequestManager,不要忘了页面上还需要一个ScriptManager,引用上面定义的Web Service: <atlas:ScriptManager ID="scriptManager" runat="server">

<Services>

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

</Services>

</atlas:ScriptManager>

添加HTML标记。其中按钮用来引发批量调用,div用来显示调用结果:

<input id="invokeTasks" type="button" value="Invoke Task Calls" onclick="return invokeTasks_onclick()" />

<div id="result"/>

最后是javaScript脚本,调用Web Service:

function invokeTasks_onclick()

{

// clear the output

$('result').innerHTML = '';

DoTask(1, 2);

DoTask(1, 1);

DoTask(2, 0);

}

var taskID = 0;

function DoTask(times, priority)

{

for (var i = 0; i < times; ++i)

{

SampleService.DoTask(

taskID++,

priority,

{onMethodComplete: OnComplete, priority: priority }

);

}

}

function OnComplete(result)

{

$('result').innerHTML += result + "<br />";

}

注意到DoTask()方法接受两个参数:times用来指定调用次数,priority用来指定优先级,并且我们利用了一个全局的变量taskID用来维护一个自增的请求顺序。

在这个示例中,我们首先调用了一个低优先级的请求,然后一个中优先级的,最后两个高优先级的。

由于高优先级不参与批量调用,所以您最先看到的是它们的返回:

由于中低优先级的总数为2个,尚未达到5,所以在3000毫秒的延时过后才被发送:

您可以修改invokeTasks_onclick()方法中的调用顺序以及调用数目,分析批量调用的实现方式。

该示例程序可以在此下载:http://www.cnblogs.com/Files/dflying/BatchingCallsDemo.rar

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有