由于asp2.0提供了异步页的支持使异步调用webservice的性能有了真正的提升。
使用异步页,首先要设置async="true",异步页是在prerender和prerendercomplete事件间加入begin,end异步方法实现的,begin和end方法属于不同的线程。
ws异步页的实现有两种方式:
1、使用等待方法实现异步
通用类,封装了ws
/**//// <summary>
/// 使用等待方法实现异步
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private account account;
private string username;
public account account
{
get { return account; }
set { account = value; }
}
public string username
{
get { return username; }
set { username = value; }
}
public iasyncresult beginasyncgetaccount(object sender, eventargs e, asynccallback cb, object state)
{
return vb.begingetaccountbyname(username,cb,state);
}
public void endasyncgetaccount(iasyncresult ar)
{
account = vb.endgetaccountbyname(ar);
}
/**//// <summary>
/// 使用事件驱动的异步
/// </summary>
/// <param name="username"></param>
public void getaccountcompleted(object source, vb.getaccountbynamecompletedeventargs e)
{
account = e.result;
}
public void asgetaccount(string username)
{
vb.getaccountbynamecompleted += new getaccountbynamecompletedeventhandler(getaccountcompleted);
vb.getaccountbynameasync(username)
}调用方法
protected void page_load(object sender, eventargs e)
{
this.prerendercomplete += new eventhandler(page_prerendercomplete);
b.username = "dinghao";
addonprerendercompleteasync(b.beginasyncgetaccount, b.endasyncgetaccount);
}
protected void page_prerendercomplete(object sender, eventargs e)
{
//异步调用结束
vb.account a = b.account;
accountif ai = new accountif(a);
ais[0] = ai;
gridview1.datasource = ais;
gridview1.databind();
}由于addonprerendercompleteasync的两个委托都是void类型,所以在通用类中要加入有返回值的属性如:account供主调方法使用,另外委托中没有异步方法的参数信息,要加入参数的属性如:username
2、事件驱动的异步(2.0新增)
调用方法:
protected void page_load(object sender, eventargs e)
{
this.prerendercomplete += new eventhandler(page_prerendercomplete);
b.asgetaccount("dinghao");
}
protected void page_prerendercomplete(object sender, eventargs e)
{
//异步调用结束
vb.account a = b.account;
accountif ai = new accountif(a);
ais[0] = ai;
gridview1.datasource = ais;
gridview1.databind();
}这种调用方式,用的是*completed事件,在*async完成时触发,这种调用方式可以
省去account,username属性,用起来比较简单
http://bluewater.cnblogs.com/archive/2006/06/20/430758.html
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


