通常在WEB应用程序中不会考虑到这个需求。做智能客户端的时候,当用到WebService时,由于服务器处理速度、网络传输速度等各种原因会使一个WebService从请求开始到获得响应结果之间等待一段时间,这时候线程会处于阻塞状态,程序会等待请求结果导致客户端无法进行其他的动作或处理。这时候就需要异步的使用WebService。

最容易被想到的方法当然是建立一个新的线程来执行WebService的请求并获得结果,这样就可以不影响程序的主线程的工作,并且也非常容易实现,但是在一个复杂的应用程序中,用户也许会同时请求多个webservice,这时候就得创建并控制多个线程。多线程的控制虽然可以实现很好的应用程序,但难度是比较大的,而且很容易引起异常。

在.net的SDK中实际上就有关于异步调用webservice的介绍和示例。其主要的工作原理和流程如下:

方法一、

private void button_Click_(object sender, System.EventArgs e)
{       
     //为一个Webservice的代理类创建一个实例
     asy.asynchronism someWS = new asy.asynchronism();
     //创建一个异步回调对象,构造函数的参数为回调的方法,该回调的方法必须包含一个异步操作状态类型的参数
     System.AsyncCallback cb= new AsyncCallback(showmsg);
     //开始进行异步通信,通常定义一个IAsyncResult异步操作状态类型的变量来接收开始异步通信方法所返回的通信状态
     //通过这个操作状态的实例就可以掌握当前通信状态。
     //如:System.IAsyncResult ar = someWS.BeginHelloWorld(cb,someWS);
     someWS.BeginHelloWorld(cb,someWS);
     }
void showmsg(IAsyncResult ar)   //必须要有一个IAsyncResult类型的参数
{
     //定义一个代理类的类型的变量接收所在回调方法的参数的异步操作信息
     asy.asynchronism someWS=(asy.asynchronism)ar.AsyncState;
     //该代理类实例调用End</webmethod/>方法来获得WebService的结果
     MessageBox.Show(someWS.EndHelloWorld(ar));
             
}
方法二、
private void button_Click_(object sender, System.EventArgs e)
{
     //为一个Webservice的代理类创建一个实例
     asy.asynchronism someWS = new asy.asynchronism();
     System.IAsyncResult ar = someWS.BeginHelloWorld(null,null);
             
     ar.AsyncWaitHandle.WaitOne();
     MessageBox.Show(someWS.EndHelloWorld(ar));
}
方法一实现了请求和接收异步通信,运用起来比较灵活,工作的方法看起来也很像多线程的操作方式。
方法二虽然也实现了发送请求和接收结果异步通信,但是用在实际的程序中并没有达到所需要的效果。
详细的介绍请参看SDK中的描述

转载于:https://www.cnblogs.com/ZetaChow/archive/2006/07/10/2237422.html

使用WebService进行异步通信相关推荐

  1. 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

    总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到 ...

  2. java工程webservice的应用案例

    在java项目中使用webservice 今天学习webservice,主要参考了网络上的一些文章. 1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里. 2.关于demo的编写:个人认为这篇文章 ...

  3. 添加引用方式抛出和捕获干净的WebService异常

    转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...

  4. 调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...

    之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了.所以,现 ...

  5. 怎样提高WebService的性能

    服务器端WebService程序 using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System ...

  6. 電子商務新紀元-WebService With BizSnap

    電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Descript ...

  7. webservice 暴漏接口_webService接口是什么?

    展开全部 Web 是使应用62616964757a686964616fe59b9ee7ad9431333431366263程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软 ...

  8. linux进程间通信:POSIX 消息队列 ----异步通信

    在上一篇中linux进程间通信:POSIX 消息队列我们知道消息队列中在消息个数达到了队列所能承载的上限,就会发生消息的写阻塞. 阻塞式的通信影响系统效率,进程之间在通信收到阻塞时并不能去做其他事情, ...

  9. .NET调用JAVA的WebService方法

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...

最新文章

  1. Jquery封装(学习)01
  2. 李宏毅线性代数笔记1:系统
  3. C/Cpp / STL / vector 的 erase 会造成当前位置和之后的迭代器失效的疑问
  4. 会议论文_InVisor会议论文辅导发表
  5. JAVA笔记(十四)
  6. 春节期间小游戏同时在线人数最高达2800万人/小时
  7. html文本框连接数据库失败,html表单未连接到mysql数据库
  8. 零基础学python电子书-零基础学Python
  9. qt tcp不可以循环发送_不知道低温冷却液循环泵的冷却剂选择和更换条件?这这里可以找到答案...
  10. 如何获取一个需要登录页面的HTML代码
  11. qt的信号和槽通信机制(当多个窗口之间来回通信[父窗口和子窗口])
  12. 计算机导论课后总结-15周-计算机m1804方振杰
  13. 数据分析36计(27):分析师与用户研究员,玩转定量研究和定性研究,落地研究结论...
  14. 前缀树python实现
  15. 【每天更新】2022年最新WordPress主题下载(2022-5-12)
  16. Nb iot php_电信NBIoT物联网平台完整测试流程整理
  17. Microsoft Azure和WPF实现人脸检测
  18. Web scraper使用教程-进阶用法(二)-爬取二级页面内容
  19. LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)
  20. Win10无法彻底删除蓝牙设备,无线蓝牙鼠标连接后不能删除

热门文章

  1. 还款压力大要不要买房?
  2. 为什么有人说“穷人玩股票一般都会赔”?
  3. 如何应对倒戈的员工?
  4. 短视频的运营团队分为三种
  5. 现在很多富人有钱了,就喜欢去付费学习
  6. 如何评估数据适不适合放入Redis中?
  7. 如何对namedtuples列表进行排序
  8. 区块链优秀gitbook资料
  9. 5.4监听socket
  10. 码元、波特、速率、带宽