【引自张逸的博客】WCF与Web Service不同的是,当我们定义了服务契约的操作时,不管是通过ChannelFactory创建服务代理对象,还是通过SvcUtil的默认方式生成服务代理对象,客户端在调用这些代理对象时,都无法直接实现异步方式的调用。例如,对于如下的服务操作定义:
|
这样的设计使得我们无法通过编程方式异步地调用服务的操作,除非我们在定义服务接口时,直接加入相关操作的异步方法。然而,这又直接导致了服务的设计与方法调用方式之间的耦合。一个好的框架设计要素在于,不管客户端的调用方式(同步或者异步),服务的设计与实现应该是一致的。对于服务的设计者而言,在设计之初,就不应该去考虑服务的调用者调用的方式。换言之,服务操作究竟是否采用异步方式,应该由客户端的调用者决定。因此,所有与异步调用相关的内容应该只与客户端相关。WCF遵循了这一规则。
在我编写的应用程序中,会暴露一个传送文档文件的服务操作。我并不知道也并不关心调用该操作的客户端是否采用异步方式。因此,如上所述的服务操作定义是完全正确的。
那么,客户端究竟应该如何执行异步调用呢?如果采用编程方式获得服务代理对象,这一问题会变得比较糟糕。因为我将服务契约的定义单独形成了一个程序集,并在客户端直接引用了它。然而,在这样的服务契约程序集中,是没有包含异步方法的定义的。因此,我需要修改在客户端的服务定义,增加操作的异步方法。这无疑为服务契约的重用带来障碍。至少,我们需要在客户端维持一份具有异步方法的服务契约。
所幸,在客户端决定采用异步方式调用我所设计的服务操作时,虽然需要修改客户端的服务契约接口,但并不会影响服务端的契约定义。因此,服务端的契约定义可以保持不变,而在客户端则修改接口定义如下:
|
调用方式如下:
|
| 共2页: 1 [2] 下一页 | ||
|
|
||||
| · 微软出价446亿美元收购.. · Windows Server 2008专.. · 隐私保护技术探讨 · 贝恩资本携手华为22亿.. · 802.11n:下一代的无线.. · 体验Visual Studio 200.. · 运营商封堵非法ADSL共享 · ADSL应用面面俱到 |
· 龙芯要做中国的“奔腾” · 华为七千人主动辞职规.. · 华为路由器配置 · 2007盘点专题:有多少.. · 双机热备技术 · 国际文档格式标准开战 · 微软Forefront企业安全.. · Sun以10亿美元并购开源.. |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · 路由器设置与口令恢复 · Linux 集群技术专题 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · 路由器设置与口令恢复 · Linux 集群技术专题 · VPN技术 · Linux 基础 |
|||