异步通信

来源:互联网 发布:linux的ip地址配置 编辑:程序博客网 时间:2024/05/25 23:57

        .net framework使用IAsyncResult接口实例和事件两种异步操作的设计模式。ASP.NET的web服务同样支持这两种模式。

       使用wsdl.exe工具生成的web服务代理类,除了提供直接同步调用Web服务的方法之外,还包含了SOAP交换信息协议的方法。这些方法提供了和Web服务交换数据的两种机制。

       第一种是Begin/End机制。在使用wsdl.exe工具生成的、继承于SoapHttpClientProtocol类的类中,系统提供了两个使用异步调用Web服务的方法,即Begin<Web服务方法名称>和End<Web服务方法名称>。

       应用程序在使用该类调用web服务时,首先调用Begin<Web服务方法名称>方法,该方法返回一个表示异步操作状态的IAsyncResult接口实例。在使用WaitHandle类,或者使用回调函数,得到Web服务执行完成的通知后,应用程序调用End<Web服务方法名称>方法,结束应用程序对Web服务的调用,并从Web服务返回处理的结果。在等待Web服务响应期间,应用程序在当前线程上可以执行其他操作。

      使用WaitHandle类实例,实现Web服务基于Begin/End机制的异步通信时,Begin<Web服务方法名称>方法返回的IAsyncResult接口实例,包含了AsyncWaitHandle属性。该属性表示异步调用等待句柄的实例,提供了三种方法WaitOne、WaitAny、WaitAll来提供不同的等待方式,其中WaitOne等待当前Web服务调用线程处理完毕,WaitAny等待指定的Web服务调用数组的其中一个处理完毕,WaitAll等待指定Web服务调用数组的所有白处理完毕。

      使用回调函数来实现Web服务基于Begin/End机制的异步通信时,通过wsdl.exe生成类的实例中包含的<Web服务方法名称>Callback方法,应用程序创建一个AsyncCallback委托的实例,再通过对该实例IsCompleted属性的查询,决定是否继续回调。

       下面说明如何实现Begin/End机制异步通信的等待方法和回调方法,步骤如下。

 

 

原创粉丝点击