毕业设计-基于WCF的即时通讯软件的设计与实现.pdf
《毕业设计-基于WCF的即时通讯软件的设计与实现.pdf》由会员分享,可在线阅读,更多相关《毕业设计-基于WCF的即时通讯软件的设计与实现.pdf(67页珍藏版)》请在咨信网上搜索。
1、基于WCF的即时通讯软件的设计与实现摘要:介绍了 Microsoft用于构建分布式面向服务架构系统的新一代框架WCF的体系结构 与技术要素,并通过开发一套即时通信软件展现了基于WCF构架开发分布式应用程序的编 程步骤与技巧。关键词:WCF;SOA;分布式;即时通信、,.一?一 一、刖5自从在微软提出.NET战略以来,就针对建立企业级的分布式应用先后推出了一系列产 品和技术,包括:ASP.NET Web服务、.NET RemotingMessage Queuing 以及Enterprise Service 等。这些技术为基于微软技术的软件研发人员开发分布式应用提供了很大的便利,同时也各 自存在着
2、一些不足。WCF(Windows Communication Foundation)作为微软基于SOA所推出 的.NET平台下的新一代框架产品集成了现有技术的优点,代表了未来软件架构设计与开发 的发展方向。因此,掌握并能在未来应用中合理运用WCF技术,对于程序员特别是基于微 软技术开发的程序员而言是十分必要的。基于此,文章通过介绍一套即时通信软件的具体开 发过程来展现基于WCF技术的分布式软件研发的基本步骤与高级技巧。二、WCF概述对于一个好的分布式系统来讲,设计时应当考虑到异构性、开放性、安全性、可扩展性、故障处理、并发性以及透明性等问题。基于SOAP的Web Service可以实现异构环境
3、的互操作性,保证了跨平台的通信。利用WSE(Web Service Enhancements)可以为ASMX提供安 全性的保证。.NETRemoting具有丰富的扩展功能,可以创建定制的信道、格式化器和代理 程序。Enterprise Service(COM+)提供了对事务的支持,其中还包括分布式事务,可实现 故障的恢复。MSMQ可以支持异步调用、脱机连接、断点连接等功能,利用消息队列支持 应用程序之间的消息传递。从功能角度来看,WCF整合了 ASMX.Net Remoting Enterprise Service.WSE以及MSMQ等现有技术的优点,它提供了一种构建安全可靠的分布式面向服 务
4、系统的统一的框架模型,使软件研发人员在开发分布式应用时变得更加轻松。1.面向服务既然WCF是一套面向服务的框架,服务自然便是WCF中最为重要的概念。服务是指 暴露在外的一系列功能的集合,面向服务则是指一套构建“面向服务程序”的抽象原则以及 最优方法。对于业务逻辑的理解,传统的编程方式认为应将业务逻辑封装为对象,该对象提 供了与业务相关的一些功能;而基于WCF的程序设计却更多的是考虑如何提供服务以及消 费服务。与面向组件服务程序类似,基于SOA的应用程序将服务封装到了单个逻辑程序当 中,如图1所示。图1封装服务的SOA应用程序逻辑图2.WCF体系结构WCF拥有一个非常灵活的分层体系结构,分布式应
5、用程序可以使用高级API或者低级API编写。高级API或者服务层可以用于调用方法和事件。服务层把这些高级的抽象代码转换为消息,以使用低级API上的信道和端口。图2中显示了 WCF应用程序的各个层。图2 WCF体系结构图WCF提供了对可靠性、事务性、并发管理、安全性以及实例激活等技术的有力支持,而这些支持均依赖于如图3所示的WCF构架。在客户端,分布式应用通过一个代理来转发对宿主端所提供服务的调用,而代理拥有和 服务相同的操作接口,另外还有一些附加的代理管理方法。这也就意味着客户端从来不会直 接调用服务,即便这个服务就在本机的内存中。当客户端代理接收到来自客户端的调用请求 后,它将消息通过信道链
6、向下传递。每个信道都会执行相应的消息的调用前处理,例如对消 息的编码、提供可靠的会话、对消息进行加密等。客户端的最后一个信道则是传输信道,根 据配置的传输方式发送消息给宿主。在宿主端,消息同样通过信道链进行传输。与客户端信道相对应,宿主端信道也会对消 息执行相应的宿主端的调用前处理,例如对消息的解码、提供会话管理、对消息进行解密等。宿主端的最后一个信道则负责将消息发送给消息分发器(Dispatcher),由分发器负责调用 服务的实例。图3 WCF构架示意图3.WCF的基本技术要素作为基于SOA的一个框架产品,WCF实际上是构建了一个在互联系统中实现各个应用 程序之间通信的分布式框架。它使得系统
7、构架师与开发人员在构建分布式系统时,能将更多 的精力投入到与系统的业务逻辑本身的设计上来,而无需过多的考虑底层通信的实现及相关 问题。WCF最核心的部分是能够快捷的创建一个服务,一个WCF服务端框架由宿主、端点以及服务类三部分所组成,如图4所示。图4WCF服务框架宿主(Host),即承载WCF Service运行的环境。可用的宿主环境包括:(1)自承载方式:在控制台应用程序与基于WinForm的应用程序中都可以使用这种方式;(2)系统服务方式:服务可以随着操作系统的启动而自动启动;(3)IIS方式:与WebServices的部署方式类似,由请求消息来激活服务,但只支持HTTP 方式的绑定;(4
8、)WAS(Windows Process Activation Service)方式:这个宿主是 IIS7 的一部分,只有 Windows Vista和Windows Server 2008提供默认支持,它支持几乎所有的通讯协议并提供 了应用程序池、循环回收、空闲管理、身份管理、隔离等强大的功能。服务类(Service Class)是指一个标记了一些WCF特有的属性的类,它包含了对服务 的业务逻辑的具体实现。端点(Endpoints)是WCF实现通信的核心要素,客户端和服务端都通过端点来交换消息,WCF允许我们为服务添加多个绑定和端点。端点由地址(Address)、绑定(Binding)以 及
9、契约(Contract)三部分组成,如图5所示。在WCF中,类ServiceEndpoint代表了一个 Endpoint,在类中包含的 Endpoint Address,Binding,ContractDescri ption 类型分别对应端点 中的地址、绑定以及契约。图5端点构成图地址:每个服务都会关联到一个唯一的地址,因此地址定位和唯一标志了一个端点,其 主要提供了两个重要信息:服务位置以及传送协议。在WCF中,地址由 System.ServiceModel.EndpointAddress 对象来表示,其包括 URI Identity Headers 三个要素。绑定:绑定提供了一种可设置的
10、方式来选择传输协议、消息编码、通讯模式、可靠性、安全 性、事务传播以及交互方式等。例如在传输协议上可以选择HTTP/HTTPS、TCP、P2P、IPC 甚至是MSMQ等方式。消息编码上可以选择使用纯文本方式来确保互操作能力,或者选择 二进制编码来优化性能,或者使用MTOM来提高负载能力,甚至是自定义编码方式。WCF 中提供了 BasicHttpBinding NetTcpBinding、NetPeerTcpBinding NetNamedPipeBinding WSHttpBinding、WSFederationHttpBinding WSDualHttpBinding、NetMsmqBind
11、ing 以及 MsmqlntegrationBinding九种标准类型的绑定。契约:契约是用来描述服务功能的一种平台中立的标准方式,WCF所有服务都需要实 现一个或多个契约。WCF定义了四种类型的契约:(1)服务契约(Service Contracts):定义了客户端可以使用哪些服务操作。(2)数据契约(Data Contracts):定义了服务传输的数据类型。WCF定义了一些隐式数 据契约,比如int string等,但更多时候需要使用DataContractAttribute显式定义那些自 定义类型数据的数据契约。(3)错误处理契约(Fault Contracts):定义了服务引发的错误信
12、息,以及如何将这些异常 传递给客户端。(4)消息契约(Message Contracts):允许直接操控服务的消息内容和格式。一般情况下,应当用接口来定义服务契约,尽管我们也可以使用类。将服务契约定义为 接口基于如下几点优点:(1)便于契约的继承,不同根的类型可以自由实现相同的契约;(2)同一服务类型可以同时实现多个契约;(3)类似于接口隔离原则,可以随时修改服务类型的实现而不影响其它实现;(4)便于制定版本升级策略,新、旧版本的服务契约可以同时使用而互不影响。在WCF中,对于自承载的服务,端点的相关的信息可以有代码实现与配置文件两种定 义方式。而对于IIS承载服务,端点的相关的信息一般定义在
13、虚拟根目录下的Web.Config 文件中。一般来讲,使用配置文件来定义端点相关信息是更为灵活一、更为推荐的一种方式,其可以在不修改代码、不重新发布系统的情况下对服务的地址、绑定和契约等参数进行修改(因为修改config类型文件的内容是不需要重新编译和重新部署的)。在下面的代码中具体说明了如何定义宿主端的端点相关信息。其中地址为 http:/localhost:8080/HelloService,契约为 WCFServiceHello 命名空间下的 IHello 接口,绑定 采用的是WSHttpBinding方式。值得注意的是,代码中的HelioService为相对地址,http:/local
14、host:8080/提供的是基址,当然去掉基址直接将address设为 http:/localhost:8080/HelloService 也是可以的。代码中还添加了名为 MyServiceTypeBehaviors 的行为配置,其将serviceMetadata节中的httpGetEnabled属性设为了 true,目的是为了自动透 过HTTP-GET发布服务的元数据。WCF提供的另外一种发布元数据的方式是使用专门的 MEX端点。在接下来的宿主代码中,只需要简单的创建ServiceHost类型的对象,并利用其实例方法Open启动服务应用程序即可,简要代码如下所示:using(ServiceH
15、ost host=new ServiceHost(typeof(WCFServiceHello.HelloWorld)Console.WriteLine(HelloService has been started.);host.Open();Console.ReadKeyO;)客户端和服务之间通过消息交换来完成方法调用和数据传递,而在WCF中定义了 3 种消息交换模式,如图6所示。(1)OneWay:这种消息交换模式在调用方法后会立即返回而不需要等待服务端的消息返 回。(2)Request/Reply:这种消息交换模式属于同步调用。在调用服务方法后需要等待服务端 的消息返回。(3)Duplex
16、:这种消息交换模式具有客户端与服务端双向通信的功能,同时它的实现还可 以使消息交换具有异步回调的作用。图6 WCF中的3种消息交换模式在设置完宿主端端点之后,同样也必须为分布式应用程序定义客户端的端点,而且只有 当客户端的端点与宿主端的某个端点相互匹配时,客户端的请求才能被宿主端所监听到。如 果服务提供了发布元数据,那么利用.NET Framework 3.0 SDK所提供的SvcUtil.exe工具可 以很轻松的自动生成与宿主端对应的客户端代理以及客户端配置文件。比如,运行宿主端应 用程序,然后打开Visual Studio 2005命令提示符,键入SvcUtil http:/localho
17、st:8080,便可 以在当前目录下得到客户端代理文件HelloWorld.cs与客户端配置文件output.config。另外一 种简便直观的可视化工具是SDK所附带的SvcConfigEditor.exe(C:Program FilesMicrosoftSDKsWindowsv6.0Abin目录下,XP系统),使用这个工具可以非常方便地创建或修改宿 主端和客户端的配置文件。生成好客户端代理与配置文件后,在代码中直接使用客户端代理对象即可。using(HelloClient client=new HelloClient()(client.HelloO;)Console.ReadKeyO;另外
18、一种创建客户端代理的方式是使用ChannelFactory动态的来创建。虽然WCF提供 了这种方式,但是在实际开发中并不推荐使用它,毕竟ChannelFactory直接依赖于契约,而这恰恰违背了 SOA中边界隔离的原则。利用服务器端与客户端之间的Channel来创建客 户端代理的代码举例如下:ServiceEndpoint httpendpoint=new ServiceEndpoint(ContractDescription.GetContract(typeof(IHello),new WSHttpBindingO,new EndpointAddress(http:/localhost:80
19、80/HelloService);using(ChannelFactory factory=new ChannelFactory(httpendpoint)(IHello service=factory.CreateChannel();service.Hello();)Console.ReadKeyO;三、软件的分析与设计软件主要的功能是初步实现基于WCF的局域网内的实时通信,以面向服务为指导思想 将具体开发过程分为即时通信服务的设计与实现、宿主的设计与实现以及即时通信客户端的 设计与实现三部分,使得应用程序具有较好的安全性、并发性、可扩展性以及可维护性。1.服务的设计服务的设计包括了通用模块
20、Common.dll的设计、服务契约IChat的定义与实现、客户 端的回调接口 IChatCallback的定义三个部分。通用模块Common.dll主要包括对聊天者类型Person的定义,其包括name(聊天者的名称 或代号)以及ImageURL(聊天者选择的头像图片的存储路径)两个私有字段及相应的属性 访问器。由于Person类型是自定义数据类型,因此必须加上DataContractAttribute来显式 定义它。Person类的实现核心代码如下:DataContractpublic class Person(private string imageURL;private string
21、name;public Person(string imageURL,string name)(this.imageURL=imageURL;this.name=name;)DataMember public string ImageURL get return imageURL;set(imageURL=value;)DataMemberpublic string Name(get return name;set(name=value;)服务契约IChat的定义中主要包括Join、Say、Whisper以及Leave四个基本方法。其中 Join表示:进入聊天;Say表示向所有用户广播消息;W
22、hisper表示对指定的用户发送消息;Leave表示离开聊天。需添加ServiceContract属性将IChat接口标记为服务契约,由于要实现客户端与服务端 双向通信的功能,因此还必须设置CallbackContract参数,其参数IChatCallback为Duplex模 式下的客户端回调类型。对于IChat接口中的方法来讲,必须标记OperationContract属性。其中IsOneWay指示在该 消息交换模式下调用方法后是否会立即返回而不需要等待服务端的消息返回;Islnitiating指 示服务方法是否启动一个Session;IsTerminating指示服务方法调用完成是否结束S
23、ession。IChat的定义代码如下:ServiceContract(SessionMode=SessionMode.Required,CallbackContract=typeof(IChatCal Iback)interface IChat(OperationContract(IsOneWay=true,Islnitiating=false,IsTerminating=false)void Say(string msg);OperationContract(IsOneWay=true,Islnitiating=false,IsTerminating=false)void Whisper(
24、string to,string msg);OperationContract(IsOneWay=false,Islnitiating=true,IsTerminating=false)Person Join(Person name);Ope rati onContract(IsOneW ay=true,Islnitiating=false,IsTerminating=true)void Leave();)客户端的回调接口 IChatCallback的定义包括了分别对应Join、Say Whisper以及Leave 的 UserEnter、Receive Receive Whisper 以及
25、UserLeave 四个基本方法。UserEnter 表示当有 新聊天用户加入时所有聊天用户接收到一个相应的通知;Receive表示接收用户广播的消息;ReceiveWhisper表示接收相关用户发来的消息;UserLeave表示当有聊天用户离开时所有聊 天用户接收一个相应的通知。注意在接口定义中,每个服务方法的消息转换模式均设置为One-Way。此外,回调接 口是被本地调用,因此不需要定义Servicecontract属性。回调接口 IChatCallback的定义的代码如下:interface IChatCallback(OperationContract(IsOneWay=true)vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 基于 WCF 即时通讯 软件 设计 实现
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。