官方QQ群:127876820【C#编程技术-全国站--未满人】

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

对于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)

posted @ 2010-09-27 20:31  碧海蓝天_C#  阅读(228)  评论(0编辑  收藏  举报
官方QQ群:127876820【C#编程技术-全国站--未满人】