同步调用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同步调用、异步调用及WebService实现分布式部署

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

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

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

CXF异步WebService发布和调用

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

[.Net码农]C# WebService异步处理/异步调用详解

http://www.csframework.com/archive/5/arc-5-20110612-1593.htm C# WebService异步处理/异步调用详解...
  • CrackLibby
  • CrackLibby
  • 2016年02月25日 15:44
  • 2963

cxf webService异步调用模式

轮询方法(Polling approach) - 这种情况下调用远程方法,我们可以调用一个特殊的方法;该方法没有输出参数,但是返回一个 javax.xml.ws.Response 实例。可以轮询该 R...
  • xwnxwn
  • xwnxwn
  • 2016年03月16日 19:43
  • 1266

CXF简单示例(二)之异步调用

CXF异步调用
  • u013769320
  • u013769320
  • 2015年08月12日 23:11
  • 931

同步调用WebService和异步调用WebService

阅读目录   一:同步调用   二:异步调用   三:同步调用WebService   四:异步调用WebService   一:同步调用   一个同步操作会阻塞整个当前的进程,直到这个操...
  • Andeewu
  • Andeewu
  • 2013年11月16日 16:45
  • 604

同步调用WebService和异步调用WebService

转自红黑联盟,原址http://www.2cto.com/kf/201203/125603.html 阅读目录   一:同步调用   二:异步调用   三:同步调用WebS...
  • jingjingwin5
  • jingjingwin5
  • 2013年03月24日 03:17
  • 371

Ajax调用WebService(一)

原文出处:http://blog.csdn.net/vs_sundaylove/article/details/6586113 一些感悟:  最近工作一直都很忙。很久没有更新自己的博客了。...
  • chelen_jak
  • chelen_jak
  • 2016年07月16日 11:36
  • 1726

webservice--四种客户端调用方式

Webservice的四种客户端调用方式 公网服务地址: http://www.webxml.com.cn/zh_cn/index.aspx 一、生成客户端调用方式 1、Wsimpor...
  • CSDN_GIA
  • CSDN_GIA
  • 2017年02月04日 15:51
  • 16660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同步调用WebService和异步调用WebService
举报原因:
原因补充:

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