动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP.NET技巧 ]的信息



本月文章推荐
.微软发布了ASP.NET MVC源代码.
.Web服务数据库访问中间件的实现.
.解决ASPX网页另类load两次.
.虚拟主机上asp.net运行权限不足问.
.创建ASP.NET程序时候发生错误"HT.
.用代码画折线图/柱形图/条形图.
.用ASP.NET实现简单的文字水印.
.对"ASP.NET的错误类型及错误处理.
.在Java和.NET平台的加密术比较.
.AspNetForums的数据层概述.
.ASP.NET Forums 页面模型分析.
.httpRuntime 一点经验.
.aspx网页以HTML形式存储的几个方.
.编写高性能Web应用程序的10个入门.
.正则表达式提取数字.
.ASP.NET实现下载功能的中文文件名.
.ASP.NET Web Page应用深入探讨.
.如何让.Net控件在设计时Initiali.
.ASP.Net防止刷新自动触发事件的解.
.ASP.NET 揭秘 ASP.NET页面的结构 .

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

发表日期:2006-5-23 |


作者: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

上一篇:解决错误:sql_variant is incompatible with xml (ASP.NET 2.0 / XML数据类型 ) 人气:5260
下一篇:asp.net 水晶报表-主从表关联问题 人气:7175
浏览全部ASP.NET的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-26 极速网店系统 2008 Beta
2008-7-26 PBDigg v2.0 Build 20080719
2008-7-26 FCKeditor v2.6.3 Beta
2008-7-26 diggcms内容管理系统 v3.0 build
2008-7-26 Health Care System 健康服务系统
2008-7-26 PJBlog3 v2.8.4.136
2008-7-26 美女艺术图库 无图版
2008-7-26 md5在线加密工具 v1.0
2008-7-26 极端JDCMS v1.0.1
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵