TerryLee技术专栏WCF后传正文 WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎...
概述
认识消息筛选器
[DataContract] public class MatchAllMessageFilter : MessageFilter {public override bool Match(Message message){if (message == null){throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");}return true;} }
[DataContract] public class MatchNoneMessageFilter : MessageFilter {public override bool Match(Message message){if (message == null){throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");}return false;} }
筛选器工作原理
static void Main(string[] args) {// 创建两个ActionMessageFilter实例ActionMessageFilter actionFilter1 = new ActionMessageFilter("Add", "Sub");ActionMessageFilter actionFilter2 = new ActionMessageFilter("Mul");// 创建两个EndpointAddressMessageFilter实例EndpointAddressMessageFilter addressFilter1 = new EndpointAddressMessageFilter(new EndpointAddress("http://localhost:8887/Calculator"));EndpointAddressMessageFilter addressFilter2 = new EndpointAddressMessageFilter(new EndpointAddress("http://www.cnblogs.com/terrylee"));// 创建一个Message,设置Action和ToMessage message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10,"myBody");message.Headers.Action = "Add";message.Headers.To = new Uri("http://localhost:8887/Calculator");// 测试匹配结果bool actionResult1 = actionFilter1.Match(message);bool actionResult2 = actionFilter2.Match(message);bool addressResult1 = addressFilter1.Match(message);bool addressResult2 = addressFilter2.Match(message);// 输出结果Console.WriteLine("The result of filter:");Console.WriteLine(actionResult1);Console.WriteLine(actionResult2);Console.WriteLine(addressResult1);Console.WriteLine(addressResult2);Console.ReadLine(); }
<s:Envelope xmlns:s="[url]http://www.w3.org/2003/05/soap-envelope[/url]"xmlns:a="[url]http://www.w3.org/2005/08/addressing[/url]"><s:Header><a:To s:mustUnderstand="1">[url]http://localhost:8887/Calculator[/url]</a:To><a:Action s:mustUnderstand="1">Add</a:Action></s:Header><s:Body></s:Body> </s:Envelope>
消息筛选器表
设置服务的消息筛选器
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Prefix)] public class CalculatorService : ICalculator {public int Add(int x, int y){return x + y;} }
static void Main(string[] args) {using (ServiceHost calculatorServiceHost =new ServiceHost(typeof(CalculatorService))){calculatorServiceHost.Opened += delegate{Console.WriteLine("Service begin to listen via the Address:{0}",calculatorServiceHost.BaseAddresses[0].ToString());};calculatorServiceHost.Open();foreach (ChannelDispatcher channelDispatcher incalculatorServiceHost.ChannelDispatchers){Console.WriteLine(channelDispatcher.BindingName);foreach (EndpointDispatcher endpointDispatcher inchannelDispatcher.Endpoints){Console.WriteLine(endpointDispatcher.AddressFilter.ToString());Console.WriteLine(endpointDispatcher.ContractFilter.ToString());}Console.WriteLine("---------------------------");}Console.Read();} }
结束语
TerryLee技术专栏WCF后传正文 WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎...相关推荐
- WCF后传系列(3):深入WCF寻址Part 3—消息过滤引擎
概述 通过前面两篇的介绍,对Web服务寻址规范以及在WCF开发中终结点地址有了深入的认识.本文我们继续深入WCF寻址第三部分内容,当消息传入时,如何来确定匹配的终结点,就是我们本文要讲到的消息筛选引擎 ...
- WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?
WCF分布式开发学习,应该从哪里开始? 微软WCF Web服务 Web API学习群 339444457 微软ASP.NET MVC 4 Web编程群 44206115 学习WCF是不是就不需 ...
- WCF系列教程之WCF客户端调用服务
1.创建WCF客户端应用程序需要执行下列步骤 (1).获取服务终结点的服务协定.绑定以及地址信息 (2).使用该信息创建WCF客户端 (3).调用操作 (4).关闭WCF客户端对象 二.操作实例 1. ...
- [zz]WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?
WCF分布式开发学习,应该从哪里开始? 学习WCF是不是就不需要学习Enterprise Sevices(COM+).Net Remoting.Web Service(ASMX).WSE3.0和 ...
- WCF学习经验分享,如何更好地学习WCF?
WCF分布式开发学习,应该从哪里开始? 学习WCF是不是就不需要学习Enterprise Sevices(COM+).Net Remoting.Web Service(ASMX).WSE3.0和MSM ...
- 【重要】有三AI技术专栏作者邀请,5大权益助力共同成长
知识分享平台众多,我们有三AI公众号是其中一个,在过去的3年里,我们已经写了700多篇,超过200万字的技术文,其中一些专栏作者的贡献功不可没.我们公众号只做原创内容,因为我并不希望平台成为一个靠复制 ...
- java metrics.counter_技术专栏 | 深入理解Metrics(二):Counters
原标题:技术专栏 | 深入理解Metrics(二):Counters 本章会继续讲解Metrics的第二个工具:Counters. 1. Counters的使用 在account内部使用Counter ...
- 【历史上的今天】3 月 27 日:《华尔街日报》技术专栏作家出生;AMD 推出 K5 处理器;匈牙利数理逻辑的奠基人诞生
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 3 月 27 日,在 2010 年的今天,浙江吉利控股集团有限公司与美国福特汽车公司在沃尔沃总部所在 ...
- 【Web技术】1016- 全面理解 8 种文件上传场景
在日常工作中,文件上传是一个很常见的功能.在项目开发过程中,我们通常都会使用一些成熟的上传组件来实现对应的功能.一般来说,成熟的上传组件不仅会提供漂亮 UI 或好的交互体验,而且还会提供多种不同的上传 ...
最新文章
- 始于《将才》,而不止于将才
- Method-Swizzling实战-实现iOS原生网络请求性能采集
- img标签设置display:block,宽度无法100%
- 下列有关计算机系统叙述正确,()下列有关计算机系统软件的叙述正确的是____
- mac下,vagrant桥接,选择“en0: 以太网”无法启动虚拟机解决方案
- 新手学Docker(1)Hello World
- mysql操作--json/数组 的增删该查
- 计算机应用基础 项目4-5 分析商品销售业绩 ppt课件,计算机应用基础课件项目四汇总.ppt...
- MySQL 之1045错误
- 我的世界服务器如何修改天气,我的世界天气修改设置、天气关闭锁定、天气指令代码作弊码大全-66街机网...
- 第二次上机作业 (数组综合)
- 服务器维护之后大角会刷新吗,魔兽世界大角刷新最具体时间 准确率达95%
- vue项目中 集成plus
- 日本儒学的特色与日本文化
- 科珀尼克:非营利项目回顾展
- 春季高考山东招生学校计算机,2017年山东春季高考信息技术专业本科招生院校...
- SSM整合的一些细节问题
- IT机房运维技术五大体系
- AI Benchmark v4榜首风云:海思麒麟9000登上榜首
- 一文读懂ARM技术架构(转)
热门文章
- “二子乘舟”的故事很难讲
- WF4.0进行单元测试
- element-ui中el-tree树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)...
- Go语言开发者福利 - 国内版 The Go Playground
- 无序列表属性 隐藏方式 JS简介
- Oracle计划将ZGC项目提交给OpenJDK
- 联想筹资13.5亿美元 支付收购摩托罗拉移动剩余款
- vue中props的双向绑定
- css实现文字超出显示省略号...
- 使用ajax和history.pushState无刷新改变页面URL