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

來源:互聯網
上載者:User
由於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屬性,用起來比較簡單

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.