在Web Service中的异步开发模式

议题
1.         异步服务概览
2.         客户端异步方法
-基于代理的开发模式
3.         异步服务器端行为
-Soap one-way方法
-WSE
-SoapMSMQ
 
异步方法概览
异步方法
     不必等方法处理完成而直接返回
     可以在服务器和客户端上实现
客户端异步方法
     完全在客户端实现
     通常在proxy或者plumbing层中实现
异步服务器端行为
     用于改善服务器扩展性
     作为同步方法的一部分实现
异步方法概览
动机
对于同步方法
     UI线程依赖于方法的实现
方法执行时间过长将导致UI无法及时与用户进行交互
     服务器线程受到其他服务器的支配
线程是稀缺资源
     在Windows客户端中,每一个进程都有单一的UI线程
     在服务器中,可扩展性依赖于线程的使用
对于异步方法
     在用户交互方面
提供良好的用户体验
及时交互响应
     在服务器
改善可扩展性
将服务器与通讯问题隔离
 
客户端异步方法
基于Proxy的方法
异步行为的最简单类型
缺省方式
     Visual Studio和WSDL.exe直接支持
     客户端代理包含异步方法
效果和影响
     改进UI响应度
     在服务器不需要实现异步操作
       对服务器透明
     客户端能够在任何时间选择阻塞
 
WSDL.EXE可以生成异步方法
     将方法放入调用队列就立即返回
     通过.NET异步编程模式
通过BeginInvoke/EndInvoke实现
     充分利用delegate和IASyncResult特性
Begin×××和End×××
Begin×××返回IASyncResult
客户端可以轮询、等待或者delegate方法
 
结束状态查询方法
     轮询ISAyncResult.IsComplete以判断处理是否结束
允许客户端继续其他工作
     使用IAsyncResult.AsyncWaitHandle
允许客户端使用Wait处理语义
     调用delegate方法
等待被运行时调用的delegate
     阻塞调用End方法
最简单模型
 
线程池
客户端线程池
     性能较IAsyncResult略高
     对于无响应的请求特别有用
     Dlegate能够被异步调用
WaitCallBack
QueueUserWorkItem
     支持delegate方法调用
     可以选择提供参数对象
 
服务器端异步方法
在服务器端实现异步方法
实现方式
     BeginInvoke/EndInvoke
     Soap one-way方法
     Web Service Enhance(WSE)
     MSMQ
 
One-Way
将单向消息发送到端点
     例如:不需要响应的请求
问题
     没有返回值
     无法断盘方法结束时间
对于结果需要显示的通知或者轮询
 
通知
从端点发送的单向消息
客户端通知策略
     客户端能够轮询完成状态
要求客户端提供相关令牌
注意可扩展性问题
     服务器能够通知客户端
WS-Eventing或者类时机制
广播通道
 
One-Way方法实现
使用[SoapDocumentMethod]定义One-way方法
     [SoapDocumentMethod(OneWay=true)]
     数据包反序列化后,服务器端方法立即返回
     客户端方法不会从调用的服务器端方法中收到返回值
One-way方法不适用于
     方法需要对结果轮询
其他方法更加适合
     方法需要同步
 
WSE
WSE支持面向消息的编程
     SoapSender和SoapReceiver基类
     支持发送和接收SoapEnvelopes
     更多的事务模型
通过SoapClient和SoapService提供
SoapSender和SoapReceiver
     客户端和服务器同时实现
     客户端使用SoapSender发送消息
可选择使用SoapReceiver接收消息
     服务器使用SoapReceiver接收消息
可选择使用SoapSender发送通知和回应
使用MSMQ
MSMQ用于消息传输
n         适用于Web Service
n         具有可靠的异步行为
- 要求能够在服务中提供可靠的队列
- 允许多监听者使用单一队列
n         支持事务
- 同时支持本地事务和企业事务
- SWC安装在Windows Server 2003和Windows XP SP2 中
 
Claim-Check模式
n         提供主要的异步解决方案
- 使用同步方法来接收请求
- 返回用于获得服务状态的令牌
- 绝大部分工作表现为异步
n         同步方法
- 检查输入参数和业务逻辑规则
- 事务记录请求
- 带有令牌的相关请求
n         异步部分
- 处理请求
- 发送请求通知
 
Claim-Check模式实现
Web Service和MSMQ能够进行整合
n         使用企业服务来协调事务
- 数据库记录请求
- MSMQ事务持久的向队列添加请求
n         异步方法使得事务变得复杂
- 没有可行的方法确定一个事务的边界
- 当请求删除队列时,需要保证事务性
n         下面是我们所不希望的
- 服务丢失请求
- 请求处于不一致状态
 
使用WSE进行MSMQ操作
SoapMSMQ
n         简化使用WSE进行MSMQ操作
n         开源软件
n         完全支持事务
- 要求下列Claim-Check模式
- 在事务中,请求要被同步初始化
- 同步阶段排队请求,并且返回令牌
- 异步阶段处理各个事务
- 所有持有令牌的请求都保证会被处理,但可能会不成功
- 支持向客户端发送通知
 
总结
n         异步方法能够
- 改善客户端响应
- 增加服务器端的扩展性
n         对于异步开发的广泛选择
- 客户端异步代理方法
- 使用Soap one-way方法
- WSE SoapSender和SoapReceiver
- WSE自定义SoapMSMQ传输
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值