同步调用WebService和异步调用WebService

转载 2012年03月31日 09:56:23
一:同步调用

  一个同步操作会阻塞整个当前的进程,直到这个操作完成才能执行下一段代码

  

  二:异步调用

  不会阻塞启动操作的调用线程,调用程序必须通过轮流检测,或者等待完成信号来发现调用的完成

  

  三:同步调用WebService

  同步调用WebService就是我们平常的调用的写法

  1:AsynCall.asmx的AsynCall.cs代码

  /// <summary>
      /// 根据学生姓名得到该学生的成绩
     /// </summary>
     /// <param name="strName">学生姓名</param>
     /// <param name="intDelaySecond">延迟的秒数</param>
     /// <returns>成绩</returns>
     [WebMethod]
     public int GetGrade(string strName, int intDelaySecond)
     {
         if (intDelaySecond > 0)
         {
             Thread.Sleep(intDelaySecond * 1000);
         }
         int intGrade = 0;
         switch (strName)
         {
             case "张三":
                intGrade = 90;
                break;
             case "李四":
                intGrade = 80;
                break;
             case "王五":
                intGrade = 70;
                break;
             case "贾六":
                intGrade = 60;
                break;
         }
         return intGrade;
     }

  2:Program.cs

   AsynCall.AsynCall service = new AsynCall.AsynCall();
       Console.WriteLine("请输入要查询成绩的学生的姓名:");
       string strName = Console.ReadLine();
       Console.WriteLine("请输入要延迟的秒数:");
       int intSecond = int.Parse(Console.ReadLine());
       #region 同步调用开始
       Console.WriteLine("同步调用开始");
       Console.WriteLine("同步调用结果为:" + service.GetGrade(strName, intSecond));
       Console.WriteLine("同步调用结束");

   Console.ReadLine();
       #endregion

   我们输入30秒看看运行效果

  

  因为我们输入的是30秒,所以我们要等到30秒后才能输出“同步调用结果为:90”和“同步调用结束”这句话

  

  四:异步调用WebService

  . .NET Framework为异步化的编程模型提供了必要的服务

  . 决定特定的调用是否应该异步处理是由客户端也就是调用者决定,我们看到WebService本身并没有发生变化,发生变化的是客户端,是调用端

  . 不需要进行额外的编程

  . 代理类提供了WebService的方法名+Async()作为异步调用WebService的方法名

  . 异步调用的实质是调用者线程和被调用者线程并行执行的过程

   #region 异步调用
       Console.WriteLine("异步调用开始");

   //'+='表示事件的预定,'new AsynCall.GetGradeCompletedEventHandler(service_Completed)'表示利用编写的事件处理程序生成一个委托实例,'service.GetGradeCompleted'表示添加什么到产生事件对象的事件列表当中去,合起来解释就是把这个委托实例添加到产生事件对象的事件列表当中去,这个过程叫做订阅事件,委托就是代理,我们可以这样理解,委托就是把一个事件处理函数和一个事件关联起来
       service.GetGradeCompleted += new AsynCall.GetGradeCompletedEventHandler(service_Completed);
       //开始异步调用
       service.GetGradeAsync(strName, intSecond);
       Console.WriteLine("当前进程没有被阻塞");
       for (int i = 0; i < 3; i++)
       {
             Console.WriteLine(i);
       }
       Console.ReadLine();
        #endregion

     private static void service_Completed(object sender, AsynCall.GetGradeCompletedEventArgs e)
        {
            Console.WriteLine("异步调用结果为:" + e.Result);
            Console.WriteLine("异步调用结束");
        }

  我们同样输入30秒看看运行效果

  

  因为我们输入的还是30秒,所以我们要等到30秒后才能输出“异步调用结果为:90”这句话,这是谁也改变不了的,但是和同步调用不同之处在于,“当前进程没有被阻塞”和for循环立即就输出了,所以证明你在延迟30秒的时候,我继续执行我下面的代码,你延迟你的我不管,我不等你,等你到猴年马月了,我继续做我的事情

 

   

相关文章推荐

浅谈WebService开发二(同步与异步调用)

上文 http://blog.csdn.net/wayne20018891/article/details/7578040 已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重we...

IOS 调用WebService(同步和异步)

因为公司的服务全都是webservice,每次总要花费大量时间在调试服务上面,干脆就写了一个解析wsdl的项目,希望将来能用上吧。还未经过烘焙,有问题,还请高手点播点播。 下面,我拿天气服务的w...

android 异步封装调用Webservice

  • 2017年04月18日 14:43
  • 1.14MB
  • 下载

WebService同步调用、异步调用及WebService实现分布式部署

最近因工作上的原因需要用到webservice,于是学习走起。 1.首先在我们的webservice方法 返回结果前让线程休眠两秒。 2.在要调用的页面需要在页面声明里面添加属...
  • lmnotlm
  • lmnotlm
  • 2013年04月11日 17:36
  • 857

八、 异步调用WebService

异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的...

CXF入门教程(5) -- webService异步调用模式

除了教程(3)中介绍的常见的同步调用模式,CXF还支持如下两种形式的异步调用模式: 轮询方法(Polling approach) - 这种情况下调用远程方法,我们可以调用一个特殊的方...

CXF异步WebService发布和调用

最近工作需要接触CXF异步webservice的发布和调用,在网上Google并捣鼓了好一阵子,总算成功了。毕竟这方面的资料比较少,自己总结一下写下这篇博文。本文将描述如何利用CXF来发布和调用异步的...

Axis2(8):异步调用WebService

在前面几篇文章中都是使用同步方式来调用WebService。也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止。使用同步方法来调用WebService虽...

Axis Web Service开发之旅 (十) --异步调用WebService

在前面几篇文章中都是使用同步方式来调用WebService。也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止。使用同步方法来调用WebService虽...

异步调用Webservice

异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同步调用WebService和异步调用WebService
举报原因:
原因补充:

(最多只允许输入30个字)