浅谈WebService开发二(同步与异步调用)转
上文 <http://www.dotnetgeek.cn/xuexiwebservice1.html>已经跟大家说了,如果创建一个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 = ;
for (long i = ; i < ; i++) //循环10亿次,目的是模仿大批量操作,这里至少需要数秒的操作以便看出异步的效果
{
res++;
}
return " Hello World";
} }
webservice创建好了,新建一个winform项目,引入webservice,我在引入webservice的时候,差点被坑爹了,原来。VS里是提供
Add Service References 和 Add Web References
这两种,其实就是年代遗留下来的问题。web引用是2.0版本的,而服务引用是3.5版本的,微软为了保持向前兼容的特性,也保留了这两种方法,分别可以看这里
添加web引用和添加服务引用有什么区别?Add Service References 和 Add Web References 有啥区别?
项目右键 添加服务引用,如果你用的是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 ,原文链接 http://www.dotnetgeek.cn/xuexiwebservice1.html
浅谈WebService开发二(同步与异步调用)转的更多相关文章
- 浅谈WebService开发三(动态调用WebService)转
在前两讲里,我已经向大家演示了如何使用WebService.同步, 异步调用WebService,而在实际开发过程中,可能会有多个WebService接口供你选择,而在程序执行过程中才决定使用哪一个 ...
- 浅谈WebService开发(一)
一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使 用WebSer ...
- 浅谈Excel开发:六 Excel 异步自定义函数
上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...
- 浅谈WebService开发(一)转
一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使 用WebSer ...
- 浅谈Excel开发:十一 针对64位Excel的插件的开发和部署
自Office 2010版本开始有了32位和64位之分,对Excel来说,32位的Excel和64位的Excel在性能上的主要区别是64位的Excel能够处理2G及2G以上的大数据集. 随着64位操作 ...
- 浅谈Kotlin(二):基本类型、基本语法、代码风格
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
http://www.itnose.net/detail/6189456.html 浅谈WebService SOAP.Restful.HTTP(post/get)请求 2015-01-09 19:2 ...
- 浅谈Excel开发:一 Excel 开发概述
做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识.目前Office相关的开发资料是比较少 ...
随机推荐
- H5微信授权登录
这里介绍H5微信授权登录,采用了微信公众号授权原理,是oauth2的登录授权方式,简单的来讲,就是用户通过手机微信确认登录之后,微信方会返回一个授权码code给回第三方(接入方),这个授权码code一 ...
- bzoj5090 [Lydsy1711月赛]组题 分数规划
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5090 题解 令 \(s_i\) 表示 \(a_i\) 的前缀和. 那么平均难度系数就是 \[ ...
- Bugku 杂项 隐写
隐写 下载后打开压缩包发现是一张图片 用winhex打开 图中红色框内是PNG的PE头 在IHDR后面的八个字节(黄色框部分)为该图片的长度.宽度信息 将黄色框内最后一个字节由A4改为F4后另存为图片 ...
- 靠!老师居然叫我们去写博弈论!!!结果写了一个晚上的博弈论,简直要死QAQ。。。发发博客休息一下。。。TAT。。。
萌萌的糖果博弈 题目描述: 用糖果来引诱小朋友学习是最常用的手法,绵羊爸爸就是用糖果来引诱萌萌学习博弈的.他把糖果分成了两堆,一堆有A粒,另一堆有B粒.他让萌萌和他一起按照下面的规则取糖果:每次可以任 ...
- HDU 2037(贪心)
“今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了. ...
- luogu P1125 笨小猴 x
P1125 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设max ...
- Activiti7入门(五)
1 创建流程 首先选中存放图形的目录(本次我们选择 resources 下的 bpmn 目录),点击菜单: New-BpmnFile,如下图所示: 起完名字 holiday 后(默认扩展名为 bpmn ...
- php 处理错误和异常技巧
set_time_limit(0); ini_set('memory_limit','1024M'); function exception_handler($exception) { echo &q ...
- 【BZOJ1521】Est(单调队列优化DP)
题意:From https://www.cnblogs.com/CXCXCXC/p/4725249.html 思路:本身就两维状态了,把问题关键s[i][j]写成二维比一维好写多了 #include& ...
- Android使用命令行操作数据库
所有的应用程序本地文件都存放在/data/data/目录下 C:\Users\nicole>adb shell * daemon not running. starting it now on ...