《WCF教程11》.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《WCF教程11》.doc

[原创]我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯 在一个基于面向服务的分布式环境中,借助一个标准的、平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互。这个交互的过程实际上就是Message Exchange的过程。WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: Request/Reply,Request/Forget(One-way)和Duplex。通过采用Duplex MEP,我们可以实现在Service端Callback Client的操作。虽然WCF为我们实现底层的通信细节,使得我们把精力转移到业务逻辑的实现,进行Transport无关的编程,但是对底层Transport的理解有利于我们根据所处的具体环境选择一个合适的Transport。说到Transport, WCF 经常使用的是以下4个:Http,TCP,Named Pipe,MSMQ。由于不同协议自身的差异,他们对具体MEP的支持方式也会不同,我们今天就来谈谈Http和TCP对Duplex的支持。 一、Sample 为了使大家对在WCF如何实现双向通信(Bidirectional Communication)有一个直观的理解,我们先来看一个简单的Sample。我们照例采用下面的4层结构和Calculator的例子: 1.Contract:Artech.DuplexWCF.Contract. ICalculator using?System; using?System.Collections.Generic; using?System.Text; using?System.ServiceModel; namespace?Artech.DuplexWCF.Contract { ????[ServiceContract(CallbackContract?=?typeof(ICallback))] ????public?interface?ICalculator ????{ ????????[OperationContract(IsOneWay?=?true)] ????????void?Add(double?x,?double?y); ????} } 由于模拟的是通过Callback来显示Add方法计算的结果,我把Add Operation设置成One-way。在Service Contract中设置了Callback Contract,Callback Contract定义在Interface Artech.DuplexWCF.Contract. ICallback中: using?System; using?System.Collections.Generic; using?System.Text; using?System.ServiceModel; namespace?Artech.DuplexWCF.Contract { ????[ServiceContract] ????public?interface?ICallback ????{ ????????[OperationContract(IsOneWay?=?true)] ????????void?DisplayResult(double?result); ????} } 2.Service: Artech.DuplexWCF.Service. CalculatorService using?System; using?System.Collections.Generic; using?System.Text; using?Artech.DuplexWCF.Contract; using?System.ServiceModel; namespace?Artech.DuplexWCF.Service { ????public?class?CalculatorService:ICalculator ????{ ????????ICalculator?Members#region?ICalculator?Members ????????public?void?Add(double?x,?double?y) ????????{ ????????????double?result?=?x?+?y;? ????????????ICallback?callback?=?OperationContext.Current.GetCallbackChannelIC

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档