異步調用ASP.NET的Web服務

異步調用Web Service就是避免客戶端在調用耗時間的服務方法的時候出現假死狀態。那麼怎麼異步調用呢?

微軟的 System.ComponentModel.BackgroundWorker 類可以解決此類問題

(1)註冊bw.DoWork += new DoWorkEventHandler(bw_DoWork); 在 private void bw_DoWork(object sender, DoWorkEventArgs e)方法中調用Web服務;

(2)  註冊bw.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);在private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)方法中針對調用後的結果做調用結束後的操作。

(3)bw.RunWorkerAsync();語句是開始異步調用。

(1)和(2)中的調用結果通過e.Result傳遞。在bw_RunWorkerCompleted中將調用服務返回的結果e.Result進行AS映射回所需的類型。例如:ServiceReference1.MClass m = new ServiceReference1.MClass();
  m = e.Result as ServiceReference1.MClass;

還有一種方法是使用條件Web引用時候生成的客戶端代理類,注意是添加Web引用,不是添加服務引用,在VS2008後續版本中添加Web引用可以點擊添加服務引用的選項頁面的“高級”按鈕。如下圖:

 

 

   protected void Button1_Click(object sender, EventArgs e)
    {
        T_WebApplication.localhost.Service1 s = new T_WebApplication.localhost.Service1();
        s.GetClass1Completed += new T_WebApplication.localhost.GetClass1CompletedEventHandler(s_GetClass1Completed);
        s.GetClass1Async();
    }
    public void s_GetClass1Completed(object sender, T_WebApplication.localhost.GetClass1CompletedEventArgs e)
    {
        if (e.Error != null)
        {
            throw e.Error;
        }
        else
        {
            T_WebApplication.localhost.MClass m = e.Result as T_WebApplication.localhost.MClass;
            Response.Write(m.ID + m.Name);
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章