.NET2.0中,Winform程序如何异步调用Web Service呢?[Demo下载]——与.net1.1环境下比较

最近在MSDN上看到一个在.NET1.1中Winform程序异步调用WebService的例子
我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单。

首先,.net1.1中调用的WebService的详细说明,可以上MSDN WebCasts 下载一个视频讲座和Demo代码。
或者也可以参见TerryLee的Blog :http://www.cnblogs.com/Terrylee/archive/2005/12/05/290845.html

文中详细说明了在Service被引用之后的一个类文件Reference.cs中,会有“Begin<WebServiceMethodName>和End<WebServiceMethodName>”("<"、">"中的内容是web service中调用的方法)。

这样可以在客户端(和服务器端)都可以通过proxy、回调等方法,实现异步调用Web Service。

但是,.Net 2.0中的类文件Reference.cs,本身就运用了proxy、回调等方法,这样,在客户端就可以这样实现了:
        private localhost.Service service = new AsyncClient.localhost.Service();

        private void btnSet_Click(object sender, EventArgs e)
        {
            service.HelloCompleted += new AsyncClient.localhost.HelloCompletedEventHandler(AsyncCall_ClientProxy);
            service.HelloAsync(this.txtName.Text);
        }
        private void AsyncCall_ClientProxy(object sender, AsyncClient.localhost.HelloCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                this.txtResult.Text = e.Result;
            }
            else
            {
               this.txtResult.Text = e.Error.Message;
            }
        }
因为,我们可以看到,在Reference.cs中有这样的几个方法:
/// <remarks/>
        public void HelloAsync(string strName) {
            this.HelloAsync(strName, null);
        }
       
        /// <remarks/>
        public void HelloAsync(string strName, object userState) {
            if ((this.HelloOperationCompleted == null)) {
                this.HelloOperationCompleted = new System.Threading.SendOrPostCallback(this.OnHelloOperationCompleted);
            }
            this.InvokeAsync("Hello", new object[] {strName}, this.HelloOperationCompleted, userState);
        }
       
        private void OnHelloOperationCompleted(object arg) {
            if ((this.HelloCompleted != null)) {
                System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
                this.HelloCompleted(this, new HelloCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
            }
        }

Demo下载:https://files.cnblogs.com/lxinxuan/AsyncWebService.rar
[WSE3.0实现的部分还没有增加]

注:部分代码来自网上。

posted @ 2007-01-19 15:24  Kevin Lin  阅读(2035)  评论(0编辑  收藏  举报