Welcome

首页 / 软件开发 / WCF / WCF专题系列(4):深入WCF寻址Part 4—自定义消息筛选器

WCF专题系列(4):深入WCF寻址Part 4—自定义消息筛选器2010-11-25 cnblogs terrylee概述

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

自定义过滤器

在默认情况下,默认情况下,仅当消息的 “To”标头为终结点的 EndpointAddress 并且消息的动作与终结点 操作的动作之一匹配时,终结点的消息筛选器才与此消息匹配。在本文中,我们 将自定义一个消息过滤器,它不要求消息的“To”标头完全与 EndpointAddress完全匹配,而只是检测SOAP消息中的“To”标头中 是否包含某些特定的字符。所有的消息过滤器都从MessageFilter基类继承,如 下代码所示:

/// <summary>
/// Author: TerryLee
/// Url: http://www.cnblogs.com/terrylee
/// </summary>
public class SpecialCharactersMessageFilter : MessageFilter
{
private String _characters = String.Empty;
public SpecialCharactersMessageFilter(string characters)
{
this._characters = characters;
}
public override bool Match(Message message)
{
Uri to = message.Headers.To;
if (to == null)
return false;
return to.AbsoluteUri.Contains(_characters);
}
public override bool Match(MessageBuffer buffer)
{
return Match(buffer.CreateMessage());
}
}

SpecialCharactersMessageFilter的实现非常简单,仅仅是查找 “To”标头是否包含某些特定字符,这些字符我们会在配置文件中进 行配置。