版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、w cf分布式开发步步为贏(4): wcf服务可靠性传输配置与编程分类:wcf分布式开发步步为赢,soa and eai今天继续wcf分布式开发步步为赢系列的第4节:wcf服务可靠性传输配置与编程开发。 这个章节,我们要介绍什么是wcf服务的可靠性传输,随便介绍网络协议的概念,web service 为什么不支持可靠性传出,具体的wcf绑定协议和町靠性的关系,实现可靠性传输有什么方式, 以及配直和开发的详细实现代码分析部分。【1】可靠性传输【2】配置方式实现可靠性传输【3】 编程方式实现可靠性传输【4】编程实现必备有序传递【5】结果分析和总结。下而进入正式的内容:1 1可靠性传输:1.0网络协
2、议基础知识:这里我们有必要先介绍osi参考模型儿个主要协议的基本概念,见下农:osi中的层功能tcp/ip协议族应用层文件传输,电子邮件,文件服务,虚拟终端tftp, http, snmp, ftp, smtp, dns, telnet表示层数据格式化,代码转换,数据加密没有协议会话层解除或建立与别的接点的联系没有协议传输层提供端对端的接口tcp, udp网络层为数据包选择路由ip, icmp, rip, ospf, bgp, igmp数据链路层传输仃地址的帧以及错误检测功能slip, cslip, ppp, arp, rarp, mtu物理层以二进制数据形式在物理媒体i:传输数据iso211
3、0, ieee802o ieee802.2tcp/ip是一个协议族,为了帮助大家理解下面协议绑定的内容,把ip想像成-种高速公 路,它允许其它协议在上面行驶并找到到其它电脑的出口。tcp和udp是高速公路上的汽车, 汽车上货物就是http, snmp, ftp, smtp, dns, telnet协议等。tcp和udp是ftp, http和smtp等应用层协议使用的传输层协议。tcp提供而向连 接、有保证的数据传输,而udp不提供。tcp有一个特殊的机制来确保数据安全的不出错的从 一个端点传到另一个端点,而udp不提供任何这样的保证。http(超文本传输协议)是利用tcp协议在两台机器(通常是
4、web服务器和客户端)之间传 输信息的协议。客户端使用web浏览器发起http请求给web服务器,web服务器发送被请 求的信息给客户端。这里随便介绍一下soap协议,它也是基于xml语言,可以实现分布式系统间的数据交换的协 议。soap: simple object access protocol简单对象访问协议是一种轻量的、简单的、基 于xml的协议,它被设计成在web上交换结构化的和固化的信息。soap可以和现存的 许多因特网协议和格式结合使用,包括超文木传输协议(http),简单邮件传输协议(smtp), 多用途网际邮件扩充协议(mime) o它还支持从消息系统到远程过程调用(rpc)
5、等人量的应 用程序,当然也可以映射到tcp协议。1.1 wcf uj'靠性传输简介:wcf与其他而向服务技术之间( j2ee web service技术等)最大的区别在于传输 可靠性(transport reliability)与消息可靠性(message reliability)。传输可靠性(例如 通过tcp传输)在网络数据包层提供了点对点保证传递(pointtopoint guaranteed delivery),以确保数据包的顺序无误。传输可靠性不会受到网络连接的中断或其他通信问题 的影响。消息町靠性提供了端对端保证传递(end-to- end guaranteed delive
6、ry),确保消 息的顺序无谋。消息可靠性与引入的中间方的数量无关,与网络跳数(network hops)的数 虽也没有关联。消息可靠性基于一个行业标准。该行业标准为可靠的基于消息的通信维持了一个 在传输层的会话。如果传输失败,例如无线连接中断,消息可靠性就会重试(retries)功能。 它还能够自动处理网络阻寒(congestion)、消息缓存(message buffering)流控1訓(flowcontrol),根据具体情况适时调整发送的消息数。消息可靠性还能够通过对连接的验证管理连 接自身,并在不需耍连接时清除它们。这里wcf的可靠性传输首先来说数据传输同样依赖底层的网络传输协议,如tc
7、p协议,tcp 传输控制协议底层就是耍求建立连接的状态进行数据传递。其次消息可靠性也是对已有消息町靠 性行业标准的支持,wcf框架实现或者扩展了消息可靠性行业标准。web service使用http/post/get/soap三种方式进行访问,http协议是请求/响应协议,不 会维持特定的传输通道,本身是不支持可靠性o1.2传输协议与可靠性:看來以上的介绍内容,我们再來介绍wcf绑泄协议的叮靠性,同样wcf的町靠性和具体的绑 定协议弥补可分。总结了绑定、可靠性、有序传递(ordered delivery)以及它们各口的默认 值z间的关系。可靠性与绑定对应关系如下:可靠性与绑定对应关系绑立协议名
8、称支持可靠性默认可靠性支持冇序传递默认有序传递basichttpbi ndingn/anon/anonettcpbindingonyesoffyesnetpeertcpbindingn/anon/anonetnamedpipebindi ngnon/a (on)yesn/a (on)wshttpbi ndingonyesoffyeswsfederationhttpbi ndingonyesoffyeswsdualhttpbindi ngonyesonyesnetmsmqbindi ngn/anon/anomsmql n tegrationbi ndingn/anon/anobasichttpb
9、inding不支持可靠性,basichttpbinding面向ih的asmx web服务,是不具有 可靠性的;netmsmqbinding不支持可靠性,msmq协议,使用消息队列,针对断开调用,不存在传输 会话;msmqlntegrationbinding不支持可靠性;支持wcf与msmq协议通信,不存在传输会话;netpeertcpbinding不支持可靠性。netpeertcpbinding则为广播场景设计。wsdualhttpbinding支持可靠性的,建立两个http会话通道,保持回调通道,确保基于http 协议的客户端存在;nettcpbinding支持可靠性,显然使用tcp传输数据
10、。以及各种ws绑定,默认情况下并不 支持可靠性,允许启用;netnamedrpebinding绑定总是拥有一个确定的从客户端到服务的跳数,因而它的可靠性是 绑定固有的;wsfederationhttpbinding支持町靠性,支持联邦通信协议,支持在多个安全区域进行安全 会话。ws绑定协议一般都提供了对可靠牲传递的支持,可以编程或者配置方式在项目里启用。可靠性 传输要根据绑定的目标场最而定。1.3有序消息:tc p提供了差错和流量控制。wcf消息可靠性也以來具体的绑定协议底层的传输协议和口身 扩展的机制确保了消息的有序传递,允许消息按照发送顺序而非接收顺序执行。我们在实际的 wcf项目里及可以
11、只启用可靠性,而不启用有序传递。同样wcf也为我们提供了灵活的方式來配置也启用项冃中的传输可靠性和传递的有序性,你可 以使用配置文件方式也可以使用编程方式实现。如果我们启用了可靠性,则客户端与服务端必须 保持配置一致,否则客户端无法与服务通信。我们可以只対支持它的绑泄配置可靠性。下面我们 就来进行详细的介绍。2 配置方式实现可靠性传输:下面我们使用服务端配置文件,启fflttcp绑定的可靠性。代码如下:v system ,servicemodel>v services>v service behaviorconfiguration = "wcfservice.wcfser
12、vicebehavior"n ame= "wcfservice.wcfservice">< en dpointaddress=" http:/local host: 8001 /wcfservice"binding "wshttpbinding”contract= "wcfservicewcfservice"</endpoi nt>< en dpoi ntaddress=" net. tcp:/local host: 8002/wcfservice"binding
13、"n ettcpbindi ng"bin dingc on figurati on=" reliabletcp"contract= "wcfservicewcfservice"</e ndpoi nt>vendpoint address="mexh binding= "mexhttpbinding"contract= "imetadataexchange" />vendpoint address="mex" binding= "mextc
14、pbinding"contract= "imetadataexchange" />< host>< baseaddresses>< add baseaddress= *'http:/localhost:8001/'7>< addbaseaddress= "net.tcp:/localhost:8002/'7></baseaddresses></host></service></services>< behaviors>
15、< servicebehaviors>< behavior name= hwcfservice.wcfservicebehaviorh>< servicemetadatahttpgetenabled= ”true” /><servicedebugincludeexceptiondetailinfaults= ”false” /></behavior>< /servicebehaviors></behaviors>< bindings>< nettcpbinding>< bindin
16、g name= "reliabletcp、< reliablesession enabled= 'ftrue,/></bindi ng></nettcpbi nding></bindi ngs>< / system. servicemodel>这里我们耍设置服务终结点的绑泄配置,bindingconfiguration二”reliabletcp”,然后在给出具体绑定配迸的可靠传输< nettcpbinding>< binding name= "reliabletcp、< reliab
17、lesession enabled= ,true,/></binding></nettcpbindi ng>这样wcf服务就会启用可靠消息传递c3 编程方式实现可堂性传输: 至于编程配置方式,这里我们稍作介绍,tcp绑定和ws绑定提供了略微不同的属性來配置可 靠性。这里的例子我们继续使用的是针对tcp编程实现可靠性传输的示例代码:/采用口托管方式,也可以是iis、was,windows服务等用户口定义程序托管服务 public class wcfhoststatic void main(string args)反射方式创建服务实例,/using方式半命实例,可以在
18、对象生命周期结束时候,释放非托管资源 using (servicehost host = new servicehost(typeof(wcfservice.wcfservice)/和同的服务注册多个基地址添加服务和uri,用户资源标识符uri tcpaddress = new uri(nnet.tcp:/localhost:8001/wcfservice"); /uri httpaddress = new uri(mhttp:/localhost:8002/wcfservice"); /uri pipeaddress = newuri ("net. pipe:/
19、localhost: 8002/wcfservice");security modesecurity mode = new securitymode(); 实例化安全模型设置可靠性会话为真nettcpbi ndingn ettcpbi nding = new nettcpbindi ng (security mode, true);添加服务终结点,方式不变 host.addserviceendpoint(typeof(wcfservice.iwcfservice), nettcpbinding, tcpaddress);/host.addserviceendpoint(typeof(
20、wcfservicewcfservice), new wshttpbinding(), httpaddress);/host.addserviceendpoint(typeof(wcfservice.iwcfservice), new netnamedpipebinding(), pipeaddress);/判断是否以及打开连接,如果尚未打开,就打开侦听端口if (host.state != communicationstate.opening)host.ope n();/显示运行状态console.writeline("host is runing! and state is 0&
21、quot;, host.state);等待输入即停止服务con sole.read();security modesecurity mode = new securitymode();这个语句就是实例化安全模型, nettcpbindingnettcpbinding = new nettcpbinding( security mode, true);传入的参数 为true,就是启用可靠性传递。添加服务终结点,方式不变host.addserviceendpoint(typeof(wcfservice.1 wcfservice), nettcpbinding, tcpaddress);这样就编程实
22、现了 tcp消息的可靠件传递。4 编程实现必备有序传递:我们这里在简单介绍一下wcf有序传递的概念。我们知道服务代码和契约泄义应该与它使用的 绑圧及属性无关。实际上,wcf服务的实现或者数据契约木身都会依赖于系统消息的有序传递(ordered delivery)。为了帮助契约或服务的开发者能够约束支持的绑立,wcf沱义了deliveryrequirementsattribute类,这是一个密封类,不可继承,我们使用他来定义服务的 传递属性。这里应用到服务属性,设宜服务启用冇序队列传递。deli very requi rem entsattribute(queued deli very requ
23、irements = queu eddel i very requi rem entsmode. al lowed,requi reordereddeli very = true)public class wcfservice : i wcfservice实现接口定义的方法public string sayhello(string name)console.writeline(hhello! 0 ,using string h, name);return hhello! h + name;/实现接口定义的方法public string sayhellotouser(user user)cons
24、ole.writeline("hello! 01 ,usingdatacontract ", user.firstname,user.lastname);return nhello! h + user.firstname + h h + user丄astname;deliveryrequirementsattribute.: .requireordereddelivery 属性设置绑定协议是否必 须支持已排序消息。町以应用到服务一级,对wcf服务的所有终结点施加影响,或者只对公开 了特定服务契约的终结点施加彩响;如果应用到wcf服务一级,则意味着选用有序传递是根据 具体实现
25、作出的决策。delivery requirements特性也町以应用到服务契约一级,它会对所有 支持该契约的服务施加影响。体现了对有序传递的要求是根据设计作出的决策。这一约束会在装 载服务时得到执行与验证。命名管道绑定符合有序传递的约朿。注:命名空间:system.servicemodel程序集:system.servicemodel (在 system.servicemodel.dll 中)5 结果分析和总结。配置完毕后,我们可以在客户端添加wcf服务引用,生成的配置文件,内容包含対可靠消息传 递的配置信息,具体如下:v nettcpbinding>v binding name= &q
26、uot;nettcpbindingwcfservice" closetimeout= "00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout= "00:01:00" transactionflow= "false" transfermode= "buffered"tra nsacti on protocol "oletransactions"hostnamecomparisonmode= "strongwildcard" listenbacklog= "10"max buff erpoolsize= "524288" maxbuffersize= "65536" maxconnections= ”1 0"m ax receivedmessagesize= n65536">< readerquotasmaxdepth="32n maxstringcontentlength= "8192
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人饮水安全长效管护协议书
- 医院手术室防水施工方案
- 直播公司运营方案
- 钢结构施工方案技术标准
- 松木桩桩基支护方案
- 幼儿园游戏化学习教师支持策略比较研究-基于国际早期教育协会案例库分析数据深度研究
- 学校塑胶跑道方案
- 安防系统安装施工方案
- 超市运营方案范本
- 二年级劳动上册《缝个沙包真好玩》核心素养教案
- 2026国家艺术基金管理中心招聘应届毕业生4人考试备考题库及答案解析
- 2025-2026年济南槐荫区九年级中考数学二模考试试题以及含答案
- 2026届山东青岛市平度市高三下学期模拟检测(一)历史试卷
- 2026年大理供电局项目制用工招聘(60人)笔试备考试题及答案解析
- 2026重庆市航空应急救援总队公开招聘34人笔试模拟试题及答案解析
- GB/T 47355-2026外包指南
- 中国鼻咽癌诊治指南(2026版)
- 2026年国开电大建筑制图基础形考考前冲刺测试卷及完整答案详解(历年真题)
- 市场监督管理局全流程市场监管工作手册(标准版)
- UPS电源售后服务承诺书范本
- 统编人教版五年级语文下册《田忌赛马》示范教学课件
评论
0/150
提交评论