【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)

iDotNetSpace發表於2008-06-05
由於asp2.0提供了非同步頁的支援使非同步呼叫WebService的效能有了真正的提升。
使用非同步頁,首先要設定Async="true",非同步頁是在Prerender和PrerenderComplete事件間加入Begin,end非同步方法實現的,Begin和End方法屬於不同的執行緒。
WS非同步頁的實現有兩種方式:
1、使用等待方法實現非同步
通用類,封裝了WS
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)/// 
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 使用等待方法實現非同步
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        private Account account;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
private string username;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
public Account Account
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
get return account; }
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
set { account = value; }
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
public string Username
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
get return username; }
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
set { username = value; }
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
public IAsyncResult BeginAsyncGetAccount(object sender, EventArgs e, AsyncCallback cb, object state)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)           
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
return vb.BeginGetAccountbyName(username,cb,state);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
public void EndAsyncGetAccount(IAsyncResult ar)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            account 
= vb.EndGetAccountbyName(ar);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)          
/// 
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 使用事件驅動的非同步
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
/// 

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        public void GetAccountCompleted(Object source, VB.GetAccountbyNameCompletedEventArgs e)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            account 
= e.Result;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
public void AsGetAccount(string username)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)                      vb.GetAccountbyNameCompleted 
+= new GetAccountbyNameCompletedEventHandler(GetAccountCompleted);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            vb.GetAccountbyNameAsync(username)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)            
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        }
呼叫方法
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁) protected void Page_Load(object sender, EventArgs e)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        b.Username 
= "dinghao";
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)       
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        AddOnPreRenderCompleteAsync(b.BeginAsyncGetAccount, b.EndAsyncGetAccount);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
protected void Page_PreRenderComplete(object sender, EventArgs e)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
//非同步呼叫結束
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)
        VB.Account a = b.Account;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        AccountIf ai 
= new AccountIf(a);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        ais[
0= ai;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        GridView1.DataSource 
= ais;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        GridView1.DataBind();
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    }
由於AddOnPreRenderCompleteAsync的兩個委託都是Void型別,所以在通用類中要加入有返回值的屬性如:Account供主調方法使用,另外委託中沒有非同步方法的引數資訊,要加入引數的屬性如:Username
2、事件驅動的非同步(2.0新增)
呼叫方法:
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)protected void Page_Load(object sender, EventArgs e)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        b.AsGetAccount(
"dinghao");
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)     
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    }

【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
protected void Page_PreRenderComplete(object sender, EventArgs e)
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    
{
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        
//非同步呼叫結束
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)
        VB.Account a = b.Account;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        AccountIf ai 
= new AccountIf(a);
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        ais[
0= ai;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        GridView1.DataSource 
= ais;
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)        GridView1.DataBind();
【dinghao】asp.net2.0中非同步呼叫WebService(非同步頁)    }
這種呼叫方式,用的是*Completed事件,在*Async完成時觸發,這種呼叫方式可以
省去Account,Username屬性,用起來比較簡單

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-332347/,如需轉載,請註明出處,否則將追究法律責任。

相關文章