浅谈WebService开发二(同步与异步调用)
上文 http://blog.csdn.net/wayne20018891/article/details/7578040 已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重webservice的效率调用问题,所以,我回说说如何实现同步与异步调用webservice,如果说得哪里不对或者不好的地方,欢迎大家评论指导。 首先,什么是同步,什么是异步呢?打个比方来说,小明和小华,互相打架,小明打了小华3下之后,小华才能打回小明,这叫同步,如果,小华勇敢点,在小明打了第一下开始做出反击,也打回小明,这叫异步。 也就是说,只能等待另外一个作业进行完才能进行下一个操作的叫同步,在另外一个作业进行的同时也进行其他操作,叫异步。 先创建一个webservice <%@ WebService Language="C#" Class="GetWebService" %>
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版本的,微软为了保持向前兼容的特性,也保留了这两种方法,分别可以看这里 添加web引用和添加服务引用有什么区别?Add Service References 和 Add Web References 有啥区别?项目右键 添加服务引用,如果你用的是VS2008,菜单可能是添加web引用。 如果是本地做学习测试之用的,浏览器浏览你创建的webservice,得到URL,如果是使用网络上的webservice,这里则输入给予的URL地址,点击前往即可, 再看看左下角的高级按钮吗?点击高级吧!! 两种不同版本的引入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; } 代码说明:
如果需要在WebForm中异步调用,需要在页面属性中设置可以异步:Async="true" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |