博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈WebService开发二(同步与异步调用)转
阅读量:5134 次
发布时间:2019-06-13

本文共 3043 字,大约阅读时间需要 10 分钟。

上文 <>已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重webservice的效率调用问题,所以,我回说说如何实现同步与异步调用 webservice,如果说得哪里不对或者不好的地方,欢迎大家评论指导。

首先,什么是同步,什么是异步呢?打个比方来说,小明和小 华,互相打架,小明打了小华3下之后,小华才能打回小明,这叫同步,如果,小华勇敢点,在小明打了第一下开始做出反击,也打回小明,这叫异步。 也就是说,只能等待另外一个作业进行完才能进行下一个操作的叫同步,在另外一个作业进行的同时也进行其他操作,叫异步。

先创建一个webservice

using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols; [WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。// [System.Web.Script.Services.ScriptService]public class GetWebService : System.Web.Services.WebService{     [WebMethod]    public string HelloWorld()    {        int res = 0;        for (long i = 0; i < 1000000000; i++)    //循环10亿次,目的是模仿大批量操作,这里至少需要数秒的操作以便看出异步的效果        {            res++;        }        return " Hello World";    } }

webservice创建好了,新建一个winform项目,引入webservice,我在引入webservice的时候,差点被坑爹了,原来。VS里是提供

Add Service References 和 Add Web References

这两种,其实就是年代遗留下来的问题。web引用是2.0版本的,而服务引用是3.5版本的,微软为了保持向前兼容的特性,也保留了这两种方法,分别可以看这里

项目右键 添加服务引用,如果你用的是VS2008,菜单可能是添加web引用。

如果是本地做学习测试之用的,浏览器浏览你创建的webservice,得到URL,如果是使用网络上的webservice,这里则输入给予的URL地址,点击前往即可,

再看看左下角的高级按钮吗?点击高级吧!!

把生成异步操作(必须勾上,不然没有异步方法)勾上,生成消息合同也需勾上,看到左下角的添加WEB引用了吗?这就是基于.NET Framework2.0 的。点击确定即可完成引入webservice。

两种不同版本的引入webservice也将造成代码的不同,所以,为了说明这个问题,我们也把2.0的引入方法也说明一下。

2.0的引入方法更加简洁,如果你在看浪曦的webservice视频教程,肯定很熟悉这个界面。我个人也是比较喜欢这种方法的。

编写代码

localhost.GetWebService webservice = new localhost.GetWebService(); //通过2.0的添加WEB引用需要这种方式new出webservice对象          ServiceReference1.GetWebServiceSoapClient getWebService = new ServiceReference1.GetWebServiceSoapClient(); //通过添加服务引用需要这种方式new出webservice对象     //同步调用webservice     private void btnSyn_Click(object sender, EventArgs e)     {         string res = webservice.HelloWorld();         this.textBox1.Text += "完成了";         this.textBox1.Text += res + System.Environment.NewLine;     }      //异步调用webservice     private void btnAsyn_Click(object sender, EventArgs e)     {         //给HelloWorld方法注册调用完成时执行的方法AsyncHelloWorldComplete         webservice.HelloWorldCompleted += new localhost.HelloWorldCompletedEventHandler(AsyncHelloWorldComplete);         //开始异步调用         webservice.HelloWorldAsync();         this.textBox1.Text += "完成了" + System.Environment.NewLine;     }      //完成webservice操作时会执行的方法     void AsyncHelloWorldComplete(object sender, localhost.HelloWorldCompletedEventArgs e)     {         string res = e.Result;         this.textBox1.Text += res + System.Environment.NewLine;     }

 代码说明:

1、HelloWorld方法:同步直接调用webservice的方法,返回结果时输出“成功了”加上返回的结果;

2、webservice.HelloWorldAsync() :开始异步调用webservice
3、HelloWorldCompleted是webservice为我们提供委托调用,意思是将操作完成时执行的操作给参数中的方法执行,本例给了AsyncHelloWorldComplete方法执行;

执行效果:运行本例程序,你会发现,同步调用方法中,“完成了”这句话会与执行结果“Hello World”一起输出,在webservice还没执行完成的时候,小华不会打小明;

而异步调用方法中,“完成了”这句话先是输出到文本框中,等了数秒之后,再显示“Hello World”。这就是同步与异步调用webservice的区别了

如果需要在WebForm中异步调用,需要在页面属性中设置可以异步:Async=”true”

 

 声明:此博客为DotNetGeek.cn的Copy ,原文链接 

转载于:https://www.cnblogs.com/herizai/p/7110003.html

你可能感兴趣的文章
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
php match_model的简单使用
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
STM32单片机使用注意事项
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>