WCF详解文档最新.docx
- 文档编号:4367294
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:28
- 大小:402.75KB
WCF详解文档最新.docx
《WCF详解文档最新.docx》由会员分享,可在线阅读,更多相关《WCF详解文档最新.docx(28页珍藏版)》请在冰豆网上搜索。
WCF详解文档最新
一、分布式
分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。
二、面向服务的体系结构(Service-OrientedArchitecture,SOA)
SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。
这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
面向服务的体系结构传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的,现在的SOA已经有所不同了,因为它依赖于一些更新的进展,这些进展是以可扩展标记语言(ExtensibleMarkupLanguage,XML)为基础的。
通过使用基于XML的语言(Web服务描述语言[WebServicesDefinitionLanguage,WSDL])来描述接口,服务已经转到更动态且更灵活的接口系统中。
面向服务的体系结构作用:
对SOA的需要来源于需要使业务IT系统变得更加灵活,以适应业务中的改变。
通过允许强定义的关系和依然灵活的特定实现,IT系统既可以利用现有系统的功能,又可以准备在以后做一些改变来满足它们之间交互的需要。
对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命。
一个应用程序的业务逻辑(businesslogic)或某些单独的功能被模块化并作为服务呈现客户端。
例如,服务的接口和实现相独立。
应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现。
举例来说,一个服务可以用.NET或J2EE来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同。
三、WCF
1、WCF简介
WCF是WindowsCommunicationFoundation的缩写,原来代号为Indigo,它是MS为SOA(ServiceOrientedArchitecture面向服务架构)而设计的一套完整的技术框架。
利用它能够开发出分布式(Distributed)应用程序,WCF是目前微软平台下最先进的SOA框架,具有很多优点,总结起来,其最大的特征在于:
1.充分整合了原来的.NETRemoting,ASP.NETXmlWebService(ASMX,Web服务),MSMQ(MessageQueuing消息队列),WSE(WebServicesEnhancements),EnterpriseService(COM+)等多项分布式技术。
2.WCF是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NETFramework3.5的重要组成部分。
使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
3.WCF提供了现有ASP.NETWebService、.NETRemoting、MessageQueuing和EnterpriseServices技术的全部功能。
现有解决方案均有各自的优点,也有相应的缺点,WCF综合了上述技术的优点,形成了一种新的技术。
WCF简介之WCF提供了如下特性:
1.驻留组件和服务:
与使用定制主机、.NETRemoting和WSE一样,可以把WCF服务放在ASP.NET库中、Windows服务上、COM+过程中,或WindowsForm程序上,进行对等计算。
2.声明性操作:
不是必须从基类中派生(.NETRemoting中远程对象从MarshalByRefObject派生),可以使用属性定义服务,类似与ASP.NET的Web服务(以[WebMethod]属性说明方法,标记为可通过Web服务访问)。
3.通信信道:
.NETRemoting在改变通信信道方面非常灵活,而WCF是一个很好的替代品,它提供了相同的灵活性。
WCF可以使用HTTP、TCP、IPC(InternetProcessConnection进程间通信)信道进行通信。
并且支持使用UDP信道。
4.安全体系结构:
要实现独立于平台的Web服务,必须使用标准的安全环境。
现有提供的标准是用WSE2.0实现的,在WCF中继续使用它WS-Security,WS-Trust和WS-SecureConversation均被添加到SOAP消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。
5.可扩展性:
.NETRemoting有丰富的扩展功能,它可以创建定制的信道、格式化器和代理程序,还可以在客户机和服务器的消息流中插入功能。
WCF提供了类似的可扩展性,但这些扩展功能使用SOAP标题实现。
6.兼容性:
使用WCF,无需重写分布式解决方案,WCF可以与已有的技术很好的集成。
WCF提供一个信道可以使用DCOM与所服务的组件通信。
以ASP.NETWeb服务创建独立于平台的服务也可以很方便实现与WCF的集成。
WCF简介之WCF作用:
在win32中,应用程序是运行在进程(Process)的线程(Thread)中的,.Net平台出现之后,出现了AppDomain(应用程序域),其实就相当于在进程和线程之间又有了一层包装,类似于子进程的概念,在一个进程(或应用程序域)中的对象能进行直接的访问和控制,但超出这个范围,便不能进行直接的访问和控制了,所以进程(或应用程序域)有一定的隔离作用,如果是分布在不同网络,不同操作系统上的不同进程,他们进行通讯的难度就更大,而分布式应用程序要求的就是将原本被隔离的作用域通过一定的契约联系起来,从而达成多个系统的沟通协作。
比如在Win32时代,经常使用映射内存文件来实现进程之间的互操作问题,还有在Windows程序中,用Windows消息wm也能实现不同进程之间的通讯问题,但这些都有局限性,因为他们不能很好的解决跨平台,跨网络问题,而WCF可以。
2、WCF概述
2.1WCF体系结构
WCF拥有一个非常灵活的分层体系结构,分布式应用程序可以使用高级API或者低级API编写。
高级API或者服务层可以用于调用方法和事件。
服务层把这些高级的抽象代码转换为消息,以使用低级API上的信道和端口。
图1中显示了WCF应用程序的各个层。
策略绑定与服务
服务契约
消息契约
数据契约
并发
分发
事务
消息
实例
元数据
错误
分流
参数过滤
编码:
二进制/MTOM/文本/XML
WS可靠传输信道
WS安全信道
HTTP信道
TCP信道
命名管道
MSMQ
事务流信道
COM+
Windows服务
.EXE应用程序
WindowsActivation服务
图1WCF体系结构图
WCF提供了对可靠性、事务性、并发管理、安全性以及实例激活等技术的有力支持,而这些支持均依赖于如图2所示的WCF构架。
在客户端,分布式应用通过一个代理来转发对宿主端所提供服务的调用,而代理拥有和服务相同的操作接口,另外还有一些附加的代理管理方法。
这也就意味着客户端从来不会直接调用服务,即便这个服务就在本机的内存中。
当客户端代理接收到来自客户端的调用请求后,它将消息通过信道链向下传递。
每个信道都会执行相应的消息的调用前处理,例如对消息的编码、提供可靠的会话、对消息进行加密等。
客户端的最后一个信道则是传输信道,根据配置的传输方式发送消息给宿主。
在宿主端,消息同样通过信道链进行传输。
与客户端信道相对应,宿主端信道也会对消息执行相应的宿主端的调用前处理,例如对消息的解码、提供会话管理、对消息进行解密等。
宿主端的最后一个信道则负责将消息发送给消息分发器(Dispatcher),由分发器负责调用服务的实例。
图2WCF构架示意图
2.2WCF服务框架
宿主(Host),即承载WCFService运行的环境。
可用的宿主环境包括:
(1)自承载方式:
在控制台应用程序与基于WinForm的应用程序中都可以使用这种方式;
(2)系统服务方式:
服务可以随着操作系统的启动而自动启动;
(3)IIS方式:
与WebServices的部署方式类似,由请求消息来激活服务,但只支持HTTP方式的绑定;
(4)WAS(WindowsProcessActivationService)方式:
这个宿主是IIS7的一部分,只有WindowsVista和WindowsServer2008提供默认支持,它支持几乎所有的通讯协议并提供了应用程序池、循环回收、空闲管理、身份管理、隔离等强大的功能。
服务类(ServiceClass)是指一个标记了一些WCF特有的属性的类,它包含了对服务的业务逻辑的具体实现。
端点(Endpoints)是WCF实现通信的核心要素,客户端和服务端都通过端点来交换消息,WCF允许我们为服务添加多个绑定和端点。
端点由地址(Address)、绑定(Binding)以及契约(Contract)三部分组成,如图5所示。
在WCF中,类ServiceEndpoint代表了一个Endpoint,在类中包含的EndpointAddress,Binding,ContractDescription类型分别对应端点中的地址、绑定以及契约。
绑定
binding
地址
address
契约
contract
地址:
每个服务都会关联到一个唯一的地址,因此地址定位和唯一标志了一个端点,其主要提供了两个重要信息:
服务位置以及传送协议。
在WCF中,地址由System.ServiceModel.EndpointAddress对象来表示,其包括URI、Identity、Headers三个要素。
绑定:
绑定提供了一种可设置的方式来选择传输协议、消息编码、通讯模式、可靠性、安全性、事务传播以及交互方式等。
例如在传输协议上可以选择HTTP/HTTPS、TCP、P2P、IPC甚至是MSMQ等方式。
消息编码上可以选择使用纯文本方式来确保互操作能力,或者选择二进制编码来优化性能,或者使用MTOM来提高负载能力,甚至是自定义编码方式。
WCF中提供了BasicHttpBinding、NetTcpBinding、NetPeerTcpBinding、NetNamedPipeBinding、WSHttpBinding、WSFederationHttpBinding、WSDualHttpBinding、NetMsmqBinding以及MsmqIntegrationBinding九种标准类型的绑定。
契约:
契约是用来描述服务功能的一种平台中立的标准方式,WCF所有服务都需要实现一个或多个契约。
WCF定义了四种类型的契约:
(1)服务契约(ServiceContracts):
定义了客户端可以使用哪些服务操作。
(2)数据契约(DataContracts):
定义了服务传输的数据类型。
WCF定义了一些隐式数据契约,比如int、string等,但更多时候需要使用DataContractAttribute显式定义那些自定义类型数据的数据契约。
(3)错误处理契约(FaultContracts):
定义了服务引发的错误信息,以及如何将这些异常传递给客户端。
(4)消息契约(MessageContracts):
允许直接操控服务的消息内容和格式。
一般情况下,应当用接口来定义服务契约,尽管也可以使用类。
将服务契约定义为接口基于如下几点优点:
(1)便于契约的继承,不同根的类型可以自由实现相同的契约;
(2)同一服务类型可以同时实现多个契约;
(3)类似于接口隔离原则,可以随时修改服务类型的实现而不影响其它实现;
(4)便于制定版本升级策略,新、旧版本的服务契约可以同时使用而互不影响。
在WCF中,对于自承载的服务,端点的相关的信息可以有代码实现与配置文件两种定义方式。
而对于IIS承载服务,端点的相关的信息一般定义在虚拟根目录下的Web.Config文件中。
一般来讲,使用配置文件来定义端点相关信息是更为灵活、更为推荐的一种方式,其可以在不修改代码、不重新发布系统的情况下对服务的地址、绑定和契约等参数进行修改(因为修改config类型文件的内容是不需要重新编译和重新部署的)。
在下面的代码中具体说明了如何定义宿主端的端点相关信息。
其中地址为http:
//localhost:
8080/HelloService,契约为WCFService命名空间下的IEcho接口,绑定采用的是WSHttpBinding方式。
值得注意的是,代码中的Service为相对地址,http:
//localhost:
8080/提供的是基址,当然去掉基址直接将address设为http:
//localhost:
8080/Service也是可以的。
代码中还添加了名为MyServiceTypeBehaviors的行为配置,其将serviceMetadata节中的httpGetEnabled属性设为了true,目的是为了自动透过HTTP-GET发布服务的元数据。
WCF提供的另外一种发布元数据的方式是使用专门的MEX端点。
//localhost: 8080/"/> 2.3WCF服务模型 WCF服务通过XML文档进行描述,这些文档主要由三个部分组成: Ø服务部分说明服务位于何处。 Ø绑定部分说明服务所能理解的标准通信协议。 Ø第三个部分列出服务所能提供的所有操作,它定义了服务根据接收的消息所发出的响应信息。 在WCF模型中这三部分被称为: 地址(address)、绑定(binding)和契约(contract),为易记起见可简称为ABC,即利用服务模型创建软件通信功能而需要遵循的三个步骤。 建立WCF模型,首先从建立契约开始(主要引用.netFramework里的System.ServiceModel) 先写一个接口interface publicinterfaceIEcho { stringEcho(stringinput); } 将接口指定为WCF契约 [ServiceContract] publicinterfaceIEcho { [OperationContract] stringEcho(stringinput); } 接下来就可实现契约接口,自定义类,如果某个类实现了WCF契约接口,它就成为服务类型(servicetype),并可以通过ServiceBehavior特性给服务类型添加行为来控制。 [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple)] publicclassService: IEcho { stringEcho(stringinput) {returninput;} } 最后将服务承载(host)在一个应用程序域中。 IIS和其他任何.NET程序都可以为承载服务提供应用程序域,承载服务使用WCF模型提供的ServiceHost类: using(ServiceHosthost=newServiceHost(typeof(Service))) { host.Open(); Console.WriteLine("服务已启动..."); Console.ReadKey(true); host.Close(); } (1)OneWay: 这种消息交换模式在调用方法后会立即返回而不需要等待服务端的消息返回。 (2)Request/Reply: 这种消息交换模式属于同步调用。 在调用服务方法后需要等待服务端的消息返回。 (3)Duplex: 这种消息交换模式具有客户端与服务端双向通信的功能,同时它的实现还可以使消息交换具有异步回调的作用。 2.4客户端调用 在设置完宿主端端点之后,同样也必须为分布式应用程序定义客户端的端点,而且只有当客户端的端点与宿主端的某个端点相互匹配时,客户端的请求才能被宿主端所监听到。 如果服务提供了发布元数据,那么利用.NETFramework3.0SDK所提供的SvcUtil.exe工具可以很轻松的自动生成与宿主端对应的客户端代理以及客户端配置文件。 比如,运行宿主端应用程序,然后打开VisualStudio2005命令提示符,键入SvcUtilhttp: //localhost: 8080,便可以在当前目录下得到客户端代理文件HelloWorld.cs与客户端配置文件output.config。 另外一种简便直观的可视化工具是SDK所附带的SvcConfigEditor.exe(C: \ProgramFiles\MicrosoftSDKs\Windows\v6.0A\bin目录下,XP系统),使用这个工具可以非常方便地创建或修改宿主端和客户端的配置文件。 生成好客户端代理与配置文件后,在代码中直接使用客户端代理对象即可。 using(HelloClientclient=newHelloClient()) { client.Hello(); } Console.ReadKey(); 另外一种创建客户端代理的方式是使用ChannelFactory动态的来创建。 虽然WCF提供了这种方式,但是在实际开发中并不推荐使用它,毕竟ChannelFactory直接依赖于契约,而这恰恰违背了SOA中边界隔离的原则。 利用服务器端与客户端之间的Channel来创建客户端代理的代码举例如下: ServiceEndpointhttpendpoint=newServiceEndpoint(ContractDescription.GetContract(typeof(IEcho)), newWSHttpBinding(),newEndpointAddress("http: //localhost: 8080/HelloService")); using(ChannelFactory { IEchoservice=factory.CreateChannel(); service.Hello(); } Console.ReadKey(); 3、WCF-Binding简介 3.1Binding描述了哪些层面的信息 一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,如下表所示,Binding描述了这些层面的信息: 层次 备注说明 Transactions(事务) TransactionFlowBindingElement,用于指定事务流程 Reliability(信赖) ReliableSessionBindingElement,用于指定对会话方式 Security(安全) SecurityBindingElement,指定安全方式 Encoding(编码) Text,Binary,MTOM,Custom,指定数据传输格式 Transport(传输) TCP,NamedPipes,HTTP,HTTPS,MSMQ,Custom,指定传输方式 3.2WCF中的绑定 绑定描述了服务传输的通信方式,使用绑定可以指定: 传输的协议,安全要求,编码方式,事务处理要求,可靠性等。 Ø基本绑定(BasicBinding) 由BasicHttpBinding类提供。 基本绑定能够将WCF服务公开为旧的ASMXWeb服务,使得旧的客户端能够与新的服务协作。 如果客户端使用了基本绑定,那么新的WCF客户端就能够与旧的ASMX服务协作。 ØTCP绑定 由NetTcpBinding类提供。 TCP绑定使用TCP协议实现在Intranet中跨机器的通信。 TCP绑定支持多种特性,包括可靠性、事务性、安全性以及WCF之间通信的优化。 前提是,它要求客户端与服务都必须使用WCF。 Ø对等网绑定 由NetPeerTcpBinding类提供。 它使用对等网进行传输。 对等网允许客户端与服务订阅相同的网格(Grid),实现广播消息。 因为对等网需要网格拓扑(GridTopology)与网状计算策略(MeshComputingStrategies)方面的知识。 ØIPC绑定 由NetNamedPipeBinding类提供。 它使用命名管道为同一机器的通信进行传输。 这种绑定方式最安全,因为它不能接收来自机器外部的调用。 IPC绑定支持的特性与TCP绑定相似。 ØWeb服务(WS)绑定 由WSHttpBinding类提供。 WS绑定使用HTTP或HTTPS进行传输,为基于Internet的通信提供了诸如可靠性、事务性与安全性等特性。 ØWS联邦绑定(FederatedWSBinding) 由WSFederationHttpBinding类提供。 WS联邦绑定是一种特殊的WS绑定,提供对联邦安全(FederatedSecurity)的支持。 ØWS双向绑定(DuplexWSBinding) 由WSDualHttpBinding类提供。 WS双向绑定与WS绑定相似,但它还支持从服务到客户端的双向通信。 ØMSMQ绑定 由NetMsmqBinding类提供。 它使用MSMQ进行传输,用以提供对断开的队列调用的支持。 Ø不同的绑定支持不同的特性。 以WS开头的绑定MSMQ集成绑定(MSMQIntegrationBinding) 由MsmqIntegrationBinding类提供。 它实现了WCF消息与MSMQ消息之间的转换,用以支持与旧的MS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WCF 详解 文档 最新