【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)
由於asp2.0提供了非同步頁的支援使非同步呼叫WebService的效能有了真正的提升。
使用非同步頁,首先要設定Async="true",非同步頁是在Prerender和PrerenderComplete事件間加入Begin,end非同步方法實現的,Begin和End方法屬於不同的執行緒。
WS非同步頁的實現有兩種方式:
1、使用等待方法實現非同步
通用類,封裝了WS
2、事件驅動的非同步(2.0新增)
呼叫方法:
省去Account,Username屬性,用起來比較簡單
使用非同步頁,首先要設定Async="true",非同步頁是在Prerender和PrerenderComplete事件間加入Begin,end非同步方法實現的,Begin和End方法屬於不同的執行緒。
WS非同步頁的實現有兩種方式:
1、使用等待方法實現非同步
通用類,封裝了WS
/**////
/// 使用等待方法實現非同步
///
///
///
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);
}
/**////
/// 使用事件驅動的非同步
///
///
public void GetAccountCompleted(Object source, VB.GetAccountbyNameCompletedEventArgs e)
{
account = e.Result;
}
public void AsGetAccount(string username)
{
vb.GetAccountbyNameCompleted += new GetAccountbyNameCompletedEventHandler(GetAccountCompleted);
vb.GetAccountbyNameAsync(username)
}
呼叫方法/// 使用等待方法實現非同步
///
///
///
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);
}
/**////
/// 使用事件驅動的非同步
///
///
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{
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();
}
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完成時觸發,這種呼叫方式可以{
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();
}
省去Account,Username屬性,用起來比較簡單
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-332347/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 掌握C#中非同步魔法:同步方法如何優雅呼叫非同步方法C#非同步
- Spring 3中非同步方法呼叫Spring非同步
- python中非同步非阻塞如何實現Python非同步
- Node中非同步和同步的實現非同步
- CXF入門教程(5) -- webService非同步呼叫模式Web非同步模式
- 【dinghao】在Asp.net中呼叫非同步方法--使用訊號量ASP.NET非同步
- js中非同步處理JS非同步
- Python中非同步模式Python非同步模式
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- Android中非同步任務(AsyncTask)Android非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- RFC 同步非同步呼叫例項非同步
- OC 中非同步順序載入用法非同步
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- Silverlight中非同步呼叫WCF服務,傳入回撥函式非同步函式
- Dubbo原始碼分析(十)同步呼叫與非同步呼叫原始碼非同步
- 同步、非同步、阻塞、非阻塞的區別非同步
- RestCloud ETL WebService資料同步到本地RESTCloudWeb
- 非同步呼叫和同步呼叫 及 spring的@Async註解非同步Spring
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 分散式架構中非同步的使用場景分散式架構非同步
- .Net中非同步任務的取消和監控非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- Java 非同步呼叫方法Java非同步
- 在 Emacs 的 dired 和 tramp 中非同步執行 rsyncMac非同步
- vue中非同步函式async和await的用法Vue非同步函式AI