第18章WCF开发基础
WCF(Windows Communication Foundation)是.NET Framework的扩展,WCF提供了创建安全的、可靠的、事务服务的统一框架,WCF整合和扩展了现有分布式系统的开发技术,如Microsoft.NET Remoting、Web Services、Web Services Enhancements(WSE)等等,来开发统一的可靠的应用程序系统。
18.1了解WCF
WCF是.NET Framework的扩展,同时WCF提供了一种在Windows环境下进行客户端开发和服务端开发的SDK,并且为服务提供了运行环境。WCF提供了创建安全的、可靠的、事务服务的统一框架,整合了现有的分布式技术,开发人员能够使用WCF快速创建基于服务的应用程序。
18.1.1什么是WCF
WCF是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF提供了服务的运行环境,这样就让开发人员能够将CLR类型公开为服务,也能够通过使用CLR 类型来使用服务。WCF框架模型如图18-1所示。
图18-1WCF框架模型
457
WCF 提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .NET Remoting 、Web Services 、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。WCF 简化了SOA 框架的应用,同时也统一了Enterprise Services 、Messaging 、.NET Remoting 、Web Services 、WSE 等技术,极大的方便了开发人员进行WCF 应用程序的开发和部署,同时也降低了WCF 应用开发的复杂度。
WCF 支持大量的Web Service 标准,这些标准包括XML 、XSD 、SOAP 、Xpath 、WSDL 等标准和规范,所以对于现有的标准,开发人员能够方便的进行移植。同时WCF 可以使用Attribute 属性进行WCF 应用程序配置,提高了WCF 应用的灵活性。WCF 遵循客户端/服务器模型在应用程序之间进行通信,客户端程序能够通过服务器端提供的EndPoint 端直接访问服务,如图18-2
所示。
图18-2WCF 通信模型
虽然开发人员需要实现服务可以不使用WCF ,但是WCF 封装了现有的类和结构,提供了服务实现的便捷手段,通过使用WCF 能够快速的实现服务并让其他的应用程序使用服务。WCF 是微软提供的一系列协议的标准,包括服务交互、类型转换等。
WCF 中绝大部分的实现和功能都包含在一个单独的程序集System.ServiceModel.dll 中,命名空间为System.ServiceModel 。通过使用System.ServiceModel 命名空间能够快速搭建WCF 应用程序环境。WCF 是.NET 3.0的一部分,但是.NET 3.0是基于.NET 2.0为基础而存在的,如果需要搭建和使用WCF 应用,则服务器应该具备.NET 3.0环境。
18.1.2为什么需要WCF
在传统的应用程序开发中,例如在为麦当劳开发一个餐饮统计的应用程序,这个应用程序能够统计麦当劳的餐饮系统,包括每天客户购买的餐饮、餐饮的价格以及当天的餐饮统计。这个应用程序通常是安装在麦当劳店面主机中的,但是有很多的应用程序将需要对此餐饮统计应用程序进行访问和数据提取,这些应用程序有的是基于.NET 的,有的是基于J2EE 的,另一些可能是基于ASP.NET 的Web 应用,这样就造成了应用程序访问困难。如图18-3所示。
图18-3麦当劳业务模拟图
如图18-3中所示,麦当劳的餐饮业务也许需要支持很多其他的设备,在现在智能手机发达的今天,很多客户可能可以从移动客户端访问麦当劳的餐饮业务,这些移动客户端可能是PDA、Windows Mobile,GPhone或者IPhone。在其他的客户端访问时,例如总部可能需要提取分部的数据,用户可以从网站中购买餐饮,分部经理需要对当天的数据进行统计,或者购物中心应用程序访问餐饮应用程序以增删数据,这些流程都必须考虑到平台、协议和通信等诸多因素。
WCF可以看作是ASMX、.NET Remoting、Enterprise Service、WSE、MSMQ这些技术的并集,虽然在复杂度上WCF很可能比这些技术更加复杂,因为WCF是面向服务构架的,所以对于上述的麦当劳餐
饮业务的例子,如果使用WCF就能够很好的实现不同平台,不同设备之间的安全性、可依赖性、互操作性等特性,而因为WCF对现有技术的封装,开发人员可以无需关心ASMX,、Net Remoting这些技术的实现细节。
18.2WCF基础
在了解了WCF的概念和通信原理,以及为什么要使用WCF之后,就能够明白WCF在现在的应用程序开发中所起到的作用,WCF能够实现不同技术和平台之间的安全性、可依赖性和用户操作性的实现,对大型应用程序开发起到促进作用。
18.2.1服务
服务是一组公开的功能的集合。在软件开发领域,从传统的面向过程,到面向对象,然后历经了面向组件的开发一致发展到当今的面向服务开发。
1.WCF服务
面向服务开发也并不是什么新技术,面向服务开发只是之前的面向过程、面向对象、组件开发和面向服务开发一种补充。面向服务开发有如下优点:
❑重用性:面向服务的开发提升了应用程序的重用性,通过创建可用于服务的接口能够实现不同应用程序中使用相同或类似程序实现的代码。
❑注重效率:面向服务的开发可以使用现有的服务的集合,这样能够让开发人员能够快速的进行
458
数据交换和开发,而无需关注底层服务的实现。
❑松耦合:面向服务的应用程序是独立于服务执行环境的应用程序,这样就让应用程序成为一个松耦合的应用。
❑职责划分:通过使用面向服务的开发能够进行职责的划分,例如经理和业务人员只需关心业务和统计数据即可,开发人员能够关注应用程序的开发。
一个面向服务的应用程序会将众多的服务集成到一起,形成单个逻辑单元,如图18-4
所示。
图18-4面向服务的应用
WCF中的服务可以是本地的,也可以使用远程的服务。对于客户端而言,客户端只需要通过使用服务来实现应用程序功能,这些客户端也可以是不同的类型,包括Windows应用程序,ASP.NET应用程序甚至是移动终端。
对于客户端而言,客户端是通过使用消息与服务器进行通信。消息可以直接在客户端与服务之间进行传递,也可以通过中间方进行传递。在服务器和客户端之间的消息是通过SOAP进行通信的,SOAP 与Web应用开发中不同的是,Web应用通常需要某个具体的协议进行相应功能的实现,例如HTTP、FTP协议等,而在WCF中,WCF服务可以在不同的协议中进行传递,并不局限于某个协议。正是因为如此,客户端与服务器之间的要求往往不是必须的,这也就是说,WCF客户端可以与一个非WCF服务器进行信息通信,而一个非WCF客户端也可以与一个WCF服务器进行信息通信。
为了保障WCF服务器的安全性,WCF服务器不允许直接对服务的调用。对于WCF客户端,只允许使用代理(Proxy)将调用信息转发给服务器。代理向客户端公开的操作和服务器端的操作相同。
2.服务的执行边界
WCF能够让客户端跨越执行边界与WCF服务进行通信,WCF客户端和WCF服务器进行通信必须使用带来与服务进行通信,即使是与本地服务进行通信,如图18-5所示。
图18-5展示了WCF客户与本机服务进行通信,WCF不仅能够支持不同应用程序域之间的服务的访问,也能够支持不同进程之间的服务的访问。这就让WCF客户端可以调用一个应用程序中的服务,也可以调用不同应用程序甚至不同进程中的WCF服务。不仅如此,WCF还支持客户端对远程计算机的中服务的调用,在远程服务调用中,WCF允许客户端可以跨越Intranet或Internet的边界进行远程服务的访问
和调用,如图18-6所示。
459
460图18-5WCF 与本机服务进行通信图18-6WCF 与远程服务进行通信
图18-6展示了WCF 客户端与远程服务进行通信,无论WCF 客户端是与远程服务进行通信还是与本地进程进行通信,都需要使用代理。
18.2.2地址
在Internet 中,为了标识每个计算机,就需要使用IP 进行地址划分,在生活中也有此实例,例如每个家庭都有一个门牌号,为了方便到某个人,则必须通过门牌号到这个人,同样对于WCF 服务而言,每个WCF 服务都有一个自己的地址。
1.WCF 地址
WCF 地址包含两个元素,服务位置与传输协议,服务位置包括目标机器名、站点或网络、通信端口、管道或队列,以及一个可选的特定路径或者URI 。WCF 地址也可以是用于服务通信的传输样式。WCF 支持的传输样式包括:
❑HTTP :超文本传输协议。
❑TCP :传输控制协议。
❑Peer network :对等网。
❑IPC :基于命名管道的内部进程通信协议。
❑MSMQ :微软消息队列。地址通常通过[基地址]/[可选的URI]的格式进行WCF 地址描述,示例地址如下所示。
localhost:8731
localhost:8731/18-2
net.pipe://localhost/18-2
windows开发平台net.msmq://localhost/18-2
其中关于localhost:8731这个地址可以称作使用http 协议,访问计算机为localhost 的端口8731正在等待客户端的调用。而对于localhost:8731/18-2这个地址可以称作使用http 协议,访问计算机为loacalhost 的端口为8731的18-2服务正在等待客户端的调用。
2.TCP 地址
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论