您的位置:首页 > 其它

深入学习Web Service系列之异步开发模式

2005-12-11 23:44 483 查看
概述[/b]

在本篇随笔中,通过一些简单的示例来说一下Web Service中的异步调用模式。调用Web Service方法有两种方式,同步调用和异步调用。同步调用是程序继续执行前等候调用的完成,而异步调用在后台继续时,程序也继续执行,不必等待方法处理完成而直接返回。具体的调用流程见下图:

private void btn_AsyncClient_Click(object sender, System.EventArgs e)
7public void UpdateResult(object sender, EventArgs e)
7
11public void OnHelloComplete(IAsyncResult ar)
12
18private void btn_CallBack_Click(object sender, System.EventArgs e)
24 [System.Web.Services.Protocols.SoapDocumentMethod(OneWay=true)]
示例代码:

1private void btn_OneWay_Click(object sender, System.EventArgs e)
7
11private void btn_onewayGet_Click(object sender, System.EventArgs e)
17 public class MyReceiver: SoapReceiver
5private void button4_Click(object sender, System.EventArgs e)
7private ArrayList Listeners
2
9 [WebMethod]
10 public void AddListener(string listener)
11
23 [WebMethod]
24 public void FireEvent()
25 {
26 int i;
27
28 for(i = 0;i < this.Listeners.Count;i++)
29 {
30 SoapEnvelope envelope = new SoapEnvelope();
31
32 envelope.SetBodyObject("Hello World!");
33
34 envelope.Context.Addressing.Action = new Action((string)(this.Listeners[i]));
35
36 envelope.Context.Addressing.ReplyTo = new ReplyTo(new System.Uri((string)(this.Listeners[i])));
37
38 SoapSender peerProxy = new SoapSender(new System.Uri((string)(this.Listeners[i])));
39
40 peerProxy.Send(envelope);
41 }
42 }
服务端使用[/b]WSE [/b]自定义[/b]SoapMSMQ[/b]传输[/b][/b]

SoapMSMQ是一款开源软件,简化使用WSE进行MSMQ操作,下载地址:

http://www.codeproject.com/useritems/SoapMSMQ.asp

SoapMSMQ完全支持事务,具有如下特点:

l 在事务中,请求要被同步初始化

l 同步阶段排队请求,并且返回令牌

l 异步阶段处理各个事务

l 所有持有令牌的请求都保证会被处理,但可能会不成功

l 支持向客户端发送通知

对SoapMSMQ感兴趣的朋友可以下载下来后,做进一步的研究。

总结[/b][/b]

异步方法调用改善了客户端的响应和用户体验,增加了服务端的可扩展性。当方法需要耗费大量的时间时,可以采用异步方式调用,提供系统并发处理的能力。对于异步方式的开发,我们可以有如上所述的广泛选择。

示例程序界面:



下载地址:

http://files.cnblogs.com/Terrylee/AsyncDemo.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: