WCF服务端消息监测
发布日期:2022-03-30 20:19:27
浏览次数:36
分类:博客文章
本文共 2629 字,大约阅读时间需要 8 分钟。
WCF的调试工具很多,日志记录功能也很强大,但我们记录取得自定义的日志时(如用LOG4),WCF提供的日志记录器并不太适用,所以我们就需要自已处理WCF的消息处理,来记录我们的日志.
1 . 几个需要解释的对象
Message:WCF消息的承载对象,它的内容是符合SOAP标准的XML文本
IServiceBehavior:WCF服务动作的插件,以便附加更多的动作处理
IDispatchMessageInspector:入站和出站应用程序消息进行自定义检查或修改。
2.构建IDispatchMessageInspector对象,它用于侦测消息
////// 侦测入站与出站的消息 /// public class MessageHandler : IDispatchMessageInspector { #region IDispatchMessageInspector ////// 操作开始前的处理 /// 客户端请求消息 /// 通道 /// 实例上下文 /// 自定义对象,这是保持为空 public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext) { Debug.WriteLine("入站消息:{0}",request);//显示消息的全部内容 return null; } ////// 操作结束后的操作(记录返回结果) /// /// 准备返回客户端的消息 /// 相关状态 public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { Debug.WriteLine("出站消息:{0}", reply);//显示消息的全部内容 } #endregion }
3 构建IServiceBehavior对象,它用于附加自定义Behavior,以便加入消息处理器
////// 自定义服务行为,以进行消息和异常的侦测与处理 /// public class MyBehavior: IServiceBehavior { #region IServiceBehavior void IServiceBehavior.AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collectionendpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { } /// /// 处理以附加处理器 /// /// /// void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { ServiceType = serviceDescription.ServiceType; foreach (ChannelDispatcher di in serviceHostBase.ChannelDispatchers) { di.ErrorHandlers.Add(new ExceptionHandler()); di.IncludeExceptionDetailInFaults = true; foreach (EndpointDispatcher epDisp in di.Endpoints) { epDisp.DispatchRuntime.MessageInspectors.Add(new MessageHandler());//加入消息记录处理器 } } } void IServiceBehavior.Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { } #endregion }
注意:IServiceBehavior.ApplyDispatchBehavior方法实现时的这一句
epDisp.DispatchRuntime.MessageInspectors.Add(new MessageHandler());//加入消息记录处理器
它实现了消息处理器的加入
4 向服务加入自定义Behavior(编程方式)
ServiceHost host = new ServiceHost(typeof(MyService));//这个服务大家自己实现,不贴代码了host.Description.Behaviors.Add(new MyBehavior());//加入自定义Behaviorhost.Open();
说明:host.Description.Behaviors.Add 加入自定义Behavior,但要注意,一种类型只能加入一次,必须在Open之前加入.
特别说明:
多数这类文档都是在参考MSDN后写的,参见:
转载地址:https://www.cnblogs.com/agebull/archive/2011/04/25/2027731.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年03月24日 07时10分41秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
h标签与p标签
2019-04-26
BeautifulSoup库的安装及基本元素
2019-04-26
基于bs4的HTML内容遍历方法
2019-04-26
信息标记与信息提取
2019-04-26
各大网站CSS初始化代码
2019-04-26
正则表达式的基本用法
2019-04-26
Python的Re库(正则表达式)基本用法
2019-04-26
Scrapy爬虫框架
2019-04-26
Anaconda
2019-04-26
NumPy库入门
2019-04-26
简单的留言板网页
2019-04-26
如何快速的搭建Apache+MySQL+PHP+PERL的环境
2019-04-26
初识JavaScript
2019-04-26
JavaScript的常用互动方法
2019-04-26
JavaScript的DOM操作
2019-04-26
JavaScript的事件响应与网页交互
2019-04-26
JavaScript实现的网页计算器功能
2019-04-26
英语四六级考试忘记准考证?怎么办?
2019-04-26
JavaScript内置对象
2019-04-26
JavaScript的游览器对象
2019-04-26