使用来自ASP.net的WCF调用异步,但不是异步行为

时间:2009-10-02 17:21:19

标签: asp.net wcf

我已经实现了一些WCF代码,它返回来自WCF调用的数据,它可以工作,但行为同步。

    IAsyncResult BeginGetAsyncData(object src, EventArgs args, AsyncCallback cb, object state)
    {
        _client = new ServiceReference1.Service1Client();

        return _client.BeginGetPermissionsByStaffID("xxx", cb, state);
    }

    void EndGetAsyncData(IAsyncResult ar)
    {
        //ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        ServiceReference1.tblUser_Permission[] permissions = _client.EndGetPermissionsByStaffID(ar);

        System.Threading.Thread.Sleep(2000);

        dgResults.DataSource = permissions;
        dgResults.DataBind(); 
    }


    protected void Button1_Click(object sender, EventArgs e)
    {
        PageAsyncTask task = new PageAsyncTask(BeginGetAsyncData, EndGetAsyncData, null, null);

        Page.RegisterAsyncTask(task);

        txtOut.Text = "Waiting...";
    }

我看到的是暂停两秒钟,然后出现“等待”消息。我没有明确地生成一个新线程,但据我所知,当我将WCF服务定义为asyncronous时,这不是必需的。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

PageAsyncTask在页面生命周期中与其他进程异步执行。

在所有这些异步任务完成之后,实际的页面才会传送到浏览器......那时用户将看到对其按钮文本的更改。