一.特性
1.与 Microsoft 分布式计算技术的统一性
.NET Framework 的最初版本中包含多种不同的技术,用于创建分布式应用程序。下图列出了每种技术与开发人员采用该技术的主要理由。例如,要构建基本的可互操作的 Web 服务,最佳选择是 ASP.NET Web 服务,即通常所说的 ASMX。要连接两个基于 .NET Framework 的应用程序,有时应当选择 .NET Remoting。如果应用程序需要分布式事务和其他更高级的服务,其创建者一般会使用企业服务,即 .NET Framework 推出的 COM+(COM plus) 的继任者。要了解最新的 Web 服务规范,如 WS-Addressing 和 WS-Security,开发人员可以构建采用 Web 服务增强(缩写为 WSE,是 Microsoft 对这些新兴规范的初始实现)的应用程序。而要创建基于消息的排队式应用程序,基于 Windows 的开发人员则应使用 Microsoft 消息队
列
WCF是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。
![](https://i-blog.csdnimg.cn/blog_migrate/f750936f45d5c9abf1d4067de81a8e8e.jpeg)
2.与应用程序的互操作性
由于WCF最基本的通信机制是SOAP,这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/00a7ebdc39d07a9ce50e954c852f0980.jpeg)
可以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的操作系统,如Sun Solaris,HP Unix,Linux等等。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a0726924b0bcaf4a61ab9ab4f94bf548.jpeg)
3、面向服务的开发
设计WCF过程中四项原则 :
共享架构
,而不是类:与旧的分布式对象技术不同,服务仅通过精心定义的 XML 接口与其客户端进行交互。跨越服务边界传递完整的类、方法及全部之类的行为被禁止。服务具有自主性:服务及其客户端同意它们之间的接口,但相互独立。它们可以采用不同的语言编写,可以使用不同的运行时环境(如 CLR 和 Java 虚拟机),可以运行在不同操作系统上,还可以存在其他方面的不同。
边界是显式的:分布式对象技术 [如分布式 COM (DCOM)] 的目标之一是使远程对象尽可能看上去像本地对象一样。虽然这种方法通过提供一种通用编程模型在某些方面简化了开发,但也同时隐藏了本地对象与远程对象之间不可避免的区别。服务通过使服务与其客户端之间的交互更明显而避免了这一问题。隐藏分布式特性并非目的。
采用基于策略的兼容性:如果可能,决定在系统之间使用哪些选项应取决于基于 WS-Policy 的机制。
![](https://i-blog.csdnimg.cn/blog_migrate/838700595b7b55904771f5875d2a08a6.jpeg)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/Wgf2006/EntryImages/20080804/WCFStruct633534831731731250.gif)
协定和说明
协定定义消息系统的各个方面。 数据协定描述组成某一服务可创建或使用的每则消息的每个参数。 消息参数由 XML 架构定义语言 (XSD) 文档定义,这使得任何理解 XML 的系统均可处理该文档。 消息协定使用 SOAP 协议定义特定消息部分,当互操作性要求对消息的某些部分进行更精细的控制时,消息协定可实现这种控制。服务协定指定服务的实际方法签名,并以支持的编程语 言之一(例如 Visual Basic 或 Visual C#)作为接口进行分发。
策略和绑定规定与某一服务进行通信所需的条件。 例如,绑定必须(至少)指定所使用的传输(例如 HTTP 或 TCP)和编码。 策略包括安全要求和其他条件,必须满足这些要求和条件才能与服务进行通信。
服务运行时
服务运行时层包含仅在服务实际运行期间发生的行为,即该服务的运行时行为。 遏制控制处理的消息数,如果对服务的需求增长到预设限制,该消息数则会发生变化。错误行为指定服务出现内部错误时应采取的操作,例如控制传递给客户端的信 息 (信息过多会向恶意用户提供攻击的机会)。元数据行为控制是否以及如何向外部提供元数据。 实例行为指定可运行的服务实例的数目(例如,singleton 指定只能用单一实例来处理所有消息)。 通过事务行为,可以在失败时回滚已进行事务处理的操作。 调度行为用于控制 WCF 基础结构处理消息的方式。
通过扩展性功能可以自定义运行时进程。 例如,消息检查功能用于检查消息的各个部分,使用参数筛选功能可以根据作用于消息头的筛选器来执行预设操作。
消息传递
消息传递层由通道组成。 通道是以某种方式对消息进行处理(例如通过对消息进行身份验证)的组件。 一组通道也称为“通道堆栈”。 通道对消息和消息头进行操作。 这与服务运行时层不同,服务运行时层主要涉及对消息正文内容的处理。
有两种类型的通道:传输通道和协议通道。
传 输通道读取和写入来自网络(或外部的某些其他通信点)的消息。 某些传输通道使用编码器来将消息(表示为 XML Infoset)转换为网络所使用的字节流的表示形式,或将字节流表示形式转换为消息。 传输通道的示例包括 HTTP、命名管道、TCP 和 MSMQ。 编码的示例包括 XML 和优化的二进制文件。
协议通道经常通过读取或写入消息的其他头的方式来实现消息处理协议。 此类协议的示例包括 WS-Security 和 WS-Reliability。
消 息传递层说明数据的可能格式和交换模式。 WS-Security 是对在消息层启用安全性的 WS-Security 规范的实现。 通过 WS-Reliable Messaging 通道可以保证消息的传递。 编码器提供了大量的编码,可使用这些编码来满足消息的需要。 HTTP 通道指定应使用超文本传输协议来传递消息。 同理,TCP 通道指定 TCP 协议。 事务流通道控制已经过事务处理的消息模式。通过命名管道通道可以进行进程间通信。 使用 MSMQ 通道可以与 MSMQ 应用程序进行互操作。
承载和激活
服务的最终形式为程序。 与其他程序类似,服务必须在可执行文件中运行。 这称为“自承载”服务。
某 些服务(如 IIS 或 Windows 激活服务 (WAS))“被承载”,即在外部代理管理的可执行文件中运行。 通过 WAS,可以在运行 WAS 的计算机上部署 WCF 应用程序时自动激活该应用程序。 还可通过可执行文件(.exe 文件)的形式来手动运行服务。 服务也可作为 Windows 服务自动运行。 COM+ 组件也可作为 WCF 服务承载。