WCF专题系列(3):深入WCF寻址Part 3—消息过滤引擎

概述

通过前面两篇的介绍,对Web服务寻址规范以及在WCF开发中终结点地 址有了深入的认识。本文我们继续深入WCF寻址第三部分内容,当消息传入时, 如何来确定匹配的终结点,就是我们本文要讲到的消息筛选引擎。在WCF中,消 息筛选器引擎包括两个重要的组成部分:筛选器和筛选器表。

认识消息 筛选器

在WCF中当有消息传入时,它使用消息筛选器来确定匹配的终结点,每 个终结点实际上关联着两个筛选器:一个地址筛选器和一个契约筛选器。地址筛 选器确定传入消息是否匹配终结点的“To”地址和任何必需的地址报 头,而契约筛选器则确定它是否匹配终结点的契约,两个筛选器都被调度程序用 来确定目标终结点。

在WCF中,所有的消息筛选器都继承于 MessageFilter抽象基类,系统内置了几种的消息筛选器,如图1所示:

 

图1

EndpointAddressMessageFilter:作为默认的地址筛选器, 它会将SOAP消息中的“To”地址与终结点地址进行比较,预期它们完 全匹配,也会传入消息中获得的寻址报头和终结点要求的一组寻址报头进行比较 ,要使最终匹配的结果返回true,必须满足以下两个条件:

1. 筛选器的 地址统一资源标识符 (URI) 必须与消息 To 标头中的统一资源标识符相同。

2. 筛选器地址中的每个终结点参数都必须在消息中找到一个与之匹配的 标头。

ActionMessageFilter:作为默认的契约筛选器,它根据传入的 SAOP消息中“Action”值和契约上的操作进行比较,确定是否匹配匹 配。该筛选器在初始化时将包含一个操作字符串列表,如果筛选器的列表中的任 一操作与消息或消息缓冲区中的 Action 标头匹配,则 Match 方法返回 true。 如果该列表为空,则将该筛选器视为全匹配型筛选器,任何消息或消息缓冲区都 与该筛选器匹配,并且 Match 返回 true。 如果筛选器列表中没有任何操作与 消息或消息缓冲区中的 Action 标头匹配,则 Match 返回 false。 如果消息中 不存在任何操作且筛选器的列表非空,则 Match 返回 false。

PrefixEndpointAddressMessageFilter:此筛选器与 EndpointAddressMessageFilter 执行相同的查询,不同的是测试消息是否与终 结点地址相匹配是由“最长前缀匹配”完成的。这表示筛选器中指定 的 URI 不需要与消息的 URI 完全匹配,不过必须作为前缀包含在该 URI 中。 例如,如果筛选器指定地址“http://www.foo.com”,并且消息是发 送给“http://www.foo.com/customerA”,则将满足筛选器查询条件 的 URI 部分,但是筛选器查询的报头部分仍需要完成。

时间: 2024-11-03 22:06:56

WCF专题系列(3):深入WCF寻址Part 3—消息过滤引擎的相关文章

WCF专题系列(4):深入WCF寻址Part 4—自定义消息筛选器

概述 在WCF专题系列(3):深入WCF寻址Part 3-消息过滤引擎一文 中,详细介绍了WCF中的消息筛选引擎,包括消息筛选器和筛选器表,每个 EndpointDispatcher都包含了两个消息筛选器,默认的地址过滤器是 EndpointAddressMessageFilter,默认的契约过滤器是ActionMessageFilter, 这些是可以通过Behavior来改变的.本文我们将学习如何创建一个自定义的消息 过滤器,并通过自定义Behavior来改变EndpointDispatche

WCF专题系列(2):深入WCF寻址Part 2—自定义寻址报头

在WCF专题系列(1):深入WCF寻址Part1一文中,我们对Web服务寻址规范做 了一些认识,了解了终结点引用和消息信息报头两种结构,该规范在Web服务中 的地位举足轻重,后续我们会经常提到该规范.在本文中,我们将继续深入WCF 寻址的内容,包括元数据中的终结点地址,自定义寻址标头等相关信息. 终结点地址定义 了解了Web服务寻址规范,再回到WCF,在WCF中,终 结点地址是由EndpointAddress类来表示的,它其中很重要的几个部分是:一个 表示服务地址的统一资源定位符 (URI),一

WCF专题系列(1):深入WCF寻址Part 1

概述 众所周知,WCF服务的所有通信都是通过服务的终结点发生的,每个 服务终结点都包含一个地址Address.一个绑定Binding 和一个契约Contract. 契约指定可用的操作,绑定指定如何与服务进行通信,而地址指定查找服务的位 置,即非常经典的"ABC".WCF用多种不同的通信协议为公开服务终 结点和与其通信提供了灵活的模式,在WCF专题系列的第一部分,我将围绕终结 点的寻址细节展开讨论,再此之前,我们先看一下WCF的编程模型,如图1所示: 图1 Web服务寻址规范 在 WCF

WCF专题系列(7):消息如何传递之绑定Part 2

概述 每个服务终结点都包含一个地址Address.一个绑定Binding 和一个 契约Contract.契约指定可用的操作,绑定指定如何与服务进行通信,而地址指 定查找服务的位置,在WCF专题系列前5篇中,深入了解了WCF中寻址的细节.本 文为消息如何传递之绑定第二部分,将详细介绍WCF内置的各种绑定元素,绑定 元素之间的顺序以及如何创建一个自定义的绑定元素. 在WCF专题系列( 6):消息如何传递之绑定Part 1一文中,我提到绑定由绑定元素组成,每个绑 定元素用来描述终结点与客户端通信方式中

WCF专题系列(5):深入WCF寻址Part 5—逻辑地址和物理地址

概述 在WCF中,每个服务终结点都与两个地址相关联,一个逻辑地址和一 个物理地址,逻辑地址就是SOAP消息的目标地址,即前面不止一次提到的 "To"地址,而物理地址是WCF侦听器真正监听的地址.在WCF中,逻 辑地址称之为终结点地址Endpoint Address,而物理地址则称之为监听地址 ListenUri. 两种地址 WCF中,物理地址负责使用特定的传输协议在特 定的位置接收传入的消息,除非特别指定,否则逻辑地址将被用来做物理地址, 换句话说,在以前我们对于终结点所配置的Endp

WCF专题系列(8):深度通道编程模型Part 1—设计篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输 协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节 都是由通道堆栈来处理的.为了简化这些处理,在WCF中提供了两种模型,一是 针对开发者的应用程序编程模型:二是用来通信的通道模型,这样对于开发者来 说,只要了解应用程序编程模型就足够了,而不会涉及到通道模型,然而,对于 通道模型进行必要的学习,可以让我们真正理解WCF中"通信"概念 ,了解WCF的 整个架构体系,从而构建出更加健壮的WCF服务或

WCF专题系列(6):消息如何传递之绑定Part 1

什么是绑定 从本质上说,WCF是一个通信服务框架,它允许我们使用不同 的传输协议(如Http.Https.TCP.P2P.IPC和MSMQ等),使用不同的消息编码 形式(文本.二进制和MTOM),跟不同的WS-*系列规范(如WS-Security.WS- Atomic Transaction等)交互.所有这些细节都是由通道堆栈来处理的,看一下 Aaron Skonnard给出的这幅图: 图1 最底层传输组件读入消息,消息编码器将传入字节读取为 逻辑消息对象,之后消息通过通道堆栈中的各个消息,它们

WCF分布式开发步步为赢(14):WCF安全编程--基本概念

WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文 章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好 地理解WCF安全相关知识,我把WCF安全机制主要知识点整理为图表.本章以介绍 WCF安全机制的基础概念为主. 要学习WCF安全编程,你应该学习什么首先掌握什么基础知识?很多时候会因 为缺乏系统的安全概念,在进行WCF安全编程开发的时候,遇到很多问题,比如 所证书,这个概念相信很多初学者第一次接触的时候花费了很多时间.我当时在 做WSE安全开发的时候就查

利用WCF的Duplex服务向Winform程序推送消息

先看运行效果:在网页中发送消息[如图],利用WCF的Duplex服务向Winform 程序推送消息,Winform端接收到消息, 先建立两个项目,一个WebForm 项目和一个WinForm项目,并在项目下 建立好各自需要的文件 SendMessage.aspx 是发送消息的Web页面 ISendMessageService.cs 和 SendMessageService.svc用来实现WCF的 Duplex服务 GetMessageForm.cs 是接收消息的Winform窗口 当然, 还需要