WCF 学习笔记
Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。终结点可以是从服务终结点请求数据的服务客户端。简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流。一些示例方案包括:
- 处理企业事务的安全服务。
- 将当前数据提供给其他服务(例如流量报告或其他监视服务)的服务。
- 使两个人能够实时通信或交换数据的聊天服务。
- 轮询一个或多个服务以查找数据并将其以逻辑表现形式展示出来的面板应用程序。
- 将使用 Windows Workflow Foundation 实现的工作流作为 WCF 服务公开。
- 轮询服务以查找最新数据源的 Silverlight 应用程序。
虽然在 WCF 存在之前就可以创建此类应用程序,但 WCF 使终结点的开发比以前更容易。总之,WCF 设计提供一种用于创建 Web 服务和 Web 服务客户端的可管理的方式。
WCF 的功能
WCF 包括以下功能集。有关更多信息,请参见 WCF 功能详细信息.
- 服务导向
使用 WS 标准的一个结果是,WCF 允许您创建面向服务的应用程序。面向服务的体系结构 (SOA) 依赖 Web 服务发送和接收数据。这些服务具有松耦合的常规优点,而不是从一个应用程序到另一个应用程序进行硬编码。松耦合关系意味着只要符合基本协定,则在任何平台上创建的任何客户端均可连接到所有服务。
- 互操作性
WCF 实现了 Web 服务互操作性的现代行业标准。有关支持的标准的更多信息,请参见互操作性和集成。
- 多种消息模式
采用多种模式之一交换消息。最常用的模式是请求/答复模式,其中一个终结点从另一个终结点请求数据,另一个终结点进行答复。还有其他模式,比如单向消息,
其中只有一个终结点发送消息,而不期望得到答复。更复杂的模式是双工交换模式,在该模式下,两个终结点建立连接并来回发送数据,类似于即时消息传递程序。
有关如何使用 WCF 实现不同消息交换模式的更多信息,请参见协定。 - 服务元数据
WCF
支持使用行业标准(如 WSDL、XML 架构和 WS-Policy)中指定的格式发布服务元数据。该元数据可用于自动生成并配置客户端,以便访问
WCF 服务。可通过 HTTP 和 HTTPS 来发布元数据,也可使用 Web 服务元数据交换标准来发布元数据。有关更多信息,请参见 元数据. - 数据协定
由于 WCF 是使用 .NET Framework
生成的,因此它也包括代码友好的方法,用于提供希望强制执行的协定。数据协定就是其中一种通用类型的协定。实质上,当您使用 Visual C# 或
Visual Basic 对服务进行编码时,处理数据的最简单方法是使用属于数据实体的属性创建表示该数据实体的类。WCF
包括一个采用这一简便方式处理数据的综合系统。在创建了表示数据的类之后,服务会自动生成使客户端能够符合所设计数据类型的元数据。有关更多信息,请参见
使用数据协定 - 安全性
可对消息进加密以保护隐私,而且可以要求用户对其自身进行身份验证,然后才允许接收消息。可使用众所周知的标准(如 SSL 或 WS-SecureConversation)实现安全性。有关更多信息,请参见 Windows Communication Foundation 安全性.
- 多种传输和编码方式
可通过多种内置传输协议和编码中的任意一种发送消息。最常用的协议和编码是使用超文本传输协议 (HTTP) 发送文本编码的 SOAP
消息,以便在万维网上使用。此外,WCF 还允许通过 TCP、命名管道或 MSMQ
发送消息。这些消息可以编码为文本,也可以使用优化的二进制格式。使用 MTOM
标准可有效地发送二进制数据。如果所提供的传输或编码方式都不符合您的需要,您可以创建自己的自定义传输或编码。有关 WCF
支持的传输和编码的更多信息,请参见 Windows Communication Foundation 中的传输。 - 可靠的排队消息
WCF 支持使用通过 WS-ReliableMessaging 实现的可靠会话并使用 MSMQ 进行可靠的消息交换。有关 WCF 中的可靠的排队消息传递支持的更多信息,请参见队列和可靠会话。
- 持久性消息
持久性消息决不会由于通信中断而丢失。持久性消息模式的消息会始终保存到数据库中。如果发生中断,数据库将允许您在恢复连接后恢复消息交换。此外,也可以
使用 Windows Workflow Foundation (WF) 来创建持久性消息。有关更多信息,请参见 工作流服务. - 事务
WCF 还支持使用三个事务模型之一的事务:WS-AtomicTtransactions、System.Transactions 命名空间中的 API 以及 Microsoft 分布式事务协调器。有关 WCF 中的事务支持的更多信息,请参见事务。
- AJAX 和 REST 支持
REST
是不断发展的 Web 2.0 技术的一个示例。您可以对 WCF 进行配置以处理未包装在 SOAP 信封中的“纯”XML 数据。此外,还可以扩展
WCF 以支持特定 XML 格式,如 ATOM(一种常用的 RSS 标准),甚至支持非 XML 格式,如 JavaScript 对象表示法
(JSON)。 - 可扩展性
WCF 体系结构具有大量扩展点。如果需要额外功能,它还提供许多入口点,允许您自定义服务的行为。有关可用扩展点的更多信息,请参见扩展 WCF。
WCF 与其他 Microsoft 技术的集成
WCF 是一个灵活的平台。由于这一极强的灵活性,WCF 还在 Microsoft 的一些其他产品中得以利用。如果您也在使用这些产品中的任何产品,通过了解 WCF 的基础知识,您会立即受益。
与
WCF 配对的第一项技术是 Windows Workflow Foundation
(WF)。工作流通过将工作流中的各步骤封装为“活动”,从而简化了应用程序开发。在 Windows Workflow Foundation
的第一个版本中,开发人员必须为工作流创建一个主机。Windows Workflow Foundation 的下一版本与 WCF
进行了集成,从而允许在 WCF 服务中轻松承载任何工作流;通过在 Visual Studio 2010 和 Visual Studio 2010
中自动选择 WF/WCF 作为项目类型可实现此目的。
Microsoft BizTalk Server R2 还利用 WCF
作为通信技术。BizTalk
设计用于接收一种标准化格式的数据,然后将其转换为另一种格式。必须将消息传递到其中央消息框,在这里可以使用严格的映射,也可以通过使用其中一种
BizTalk 功能(如其工作流引擎)来转换消息。目前,BizTalk 可使用 WCF 业务线 (LOB) 适配器将消息传递到消息框。
Microsoft
Silverlight 是一个用于创建可互操作的、丰富 Web 应用程序的平台,允许开发人员创建媒体密集的网站(如流视频)。从版本 2
开始,Silverlight 加入了 WCF 作为通信技术,以将 Silverlight 应用程序连接到 WCF 终结点。
Microsoft .NET Services 是一项云计算计划,使用 WCF 生成启用 Internet 的应用程序。使用 .NET Services 可创建跨信任边界操作的 WCF 服务。
Windows Server AppFabric 的承载功能 应用程序服务器是针对部署和管理使用 WCF 进行通信的应用程序专门生成的。承载功能 包括丰富的工具和配置选项,专门设计用于启用 WCF 的应用程序。
WCF 体系结构
协定和说明
协
定定义消息系统的各个方面。数据协定描述组成某一服务可创建或使用的每则消息的每个参数。消息参数由 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 服务承载。
WCF技术剖析系列:
WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
WCF技术剖析之二:再谈IIS与ASP.NET管道
WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成
WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?
WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处
理WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
WCF技术剖析之十一:异步操作在WCF中的应用(下篇)
WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
WCF技术剖析之十六:数据契约的等效性和版本控制
WCF 学习笔记的更多相关文章
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF学习笔记之传输安全
WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...
- WCF 学习笔记之异常处理
WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...
- WCF 学习笔记之双工实现
WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...
- WCF学习笔记(2)——使用IIS承载WCF服务
通过前面的笔记我们知道WCF服务是不能独立存在,必须“寄宿”于其他的应用程序中,承载WCF服务的应用程序我们称之为“宿主”.WCF的多种可选宿主,其中比较常见的就是承载于IIS服务中,在这里我们来学习 ...
- WCF学习笔记1--发布使用配置文件的服务
关于WCF的入门网上资料很多,可以参考蒋金楠老师的博客http://www.cnblogs.com/artech/archive/2007/02/26/656901.html,我是从这篇博客开始学习的 ...
- WCF学习笔记(1)——Hello WCF
1.什么是WCF Windows Communication Foundation(WCF)是一个面向服务(SOA)的通讯框架,作为.NET Framework 3.0的重要组成部分于2006年正式发 ...
- WCF学习笔记(基于REST规则方式)
一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...
- [WCF学习笔记] 我的WCF之旅(1):创建一个简单的WCF程序
近日学习WCF,找了很多资料,终于找到了Artech这个不错的系列.希望能从中有所收获. 本文用于记录在学习和实践WCF过程中遇到的各种基础问题以及解决方法,以供日后回顾翻阅.可能这些问题都很基础,可 ...
- WCF学习笔记之并发与限流
最近一直在学习WCF相关知识:本文章将针对并发与限流知识进行一个梳理,由于很多理论的知识所以做一个简单的记录,为今后回顾做一个记录: 一:并发知识 WCF将服务实例封装在一个称为实例上下文的对象中,并 ...
随机推荐
- 转:系统吞吐量(TPS)、用户并发量、性能测试概念和公式
PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联. 单个reqeust 对CPU消耗越高 ...
- SQL Server此数据库没有有效所有者
一般此问题出现在还原外部数据库文件的时候,是因为还原的时候本机数据库没有所还原数据库中的用户. 1.选中所还原数据库,安全->用户,删除没有的用户. 2.选中所还原数据库,右键属性->文件 ...
- 100.64.0.0/10运营商级(Carrier-grade)NAT保留IP地址
在一次跟踪路由的网络操作时发现自己路由器下一跳路由节点的IP地址比较奇怪,是100.64.0.1.好奇促使我查询了这个IP地址的归属,结果是保留地址,到这里觉得比较奇怪了,按照常理以IPv4为例保留的 ...
- Python ord(char)
Given a string of length one, return an integer representing the Unicode code point of the character ...
- canvas获取鼠标位置
canvas获取鼠标位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Python实践练习目录
缘由 做中学才是最好的方法,通过这些项目来加强自己的Python掌握程度. 原则 成体系地学,不搞"题海战术" 通所有不如精一物,精一物方可通所有 走心学,忌浮躁 项目列表 字符串 ...
- 1、svn架设、基本命令
SVN是Subversion的简称,是一个开放源代码的版本控制系统.是一项十分基础,必须能够熟练使用的工具.Apache网站:https://subversion.apache.org/ 采用C/S模 ...
- Splash Screen 加载窗体 [not finished]
对于windows开 发人员来说在打开VS开发工具时,总是先呈现一个SplashScreen界面,登上几秒钟后才打开VS的主界面.这样的效果一般是在主界面需要加载大量 资源,为避免主界面变成“死”界面 ...
- mongodb 的操作
查找 db.collection的名字.find({"group":"kkkk","key":{$regex:/.*one.*/i}}); ...
- 好一个Time_Wait状态(TCP/IP)
首先简单介绍一下Time_Wait是个什么鬼: 在TCP/IP协议中,我们都知道有三次握手四次挥手的过程,先来一个简单的图: 各个状态和基本的过程想必了解过TCP/IP协议的人都清楚,本次介绍的主题只 ...