1 public class MyOperationBehavior:Attribute, IOperationBehavior
2 {
3 public void AddBindingParameters(OperationDescription operationDescription,
4 System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
5 {
6 Logger.Log("MyOperationBehavior",
7 "AddBindingParameters", operationDescription.Name);
8 }
9
10 public void ApplyClientBehavior(OperationDescription operationDescription,
11 System.ServiceModel.Dispatcher.ClientOperation clientOperation)
12 {
13 clientOperation.ParameterInspectors.Add(new MyParameterInspector());
14 Logger.Log("MyOperationBehavior",
15 "ApplyClientBehavior", operationDescription.Name);
16 }
17
18 public void ApplyDispatchBehavior(OperationDescription operationDescription,
19 System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
20 {
21 dispatchOperation.ParameterInspectors.Add(new MyParameterInspector());
22 Logger.Log("MyOperationBehavior",
23 "ApplyDispatchBehavior", operationDescription.Name);
24 }
25
26 public void Validate(OperationDescription operationDescription)
27 {
28 Logger.Log("MyOperationBehavior", "Validate", operationDescription.Name);
29 }
30 }
 1 public class MyServiceBehaviorAttribute : Attribute, IServiceBehavior
2 {
3
4 public void AddBindingParameters(ServiceDescription serviceDescription,
5 ServiceHostBase serviceHostBase,
6 Collection<ServiceEndpoint> endpoints,
7 BindingParameterCollection bindingParameters)
8 {
9 Logger.Log("MyServiceBehaviorAttribute",
10 "AddBindingParameters", serviceDescription.Name);
11 }
12 public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
13 ServiceHostBase serviceHostBase)
14 {
15 Logger.Log("MyServiceBehaviorAttribute",
16 "ApplyDispatchBehavior", serviceDescription.Name);
17 }
18 public void Validate(ServiceDescription serviceDescription,
19 ServiceHostBase serviceHostBase)
20 {
21 Logger.Log("MyServiceBehaviorAttribute",
22 "Validate", serviceDescription.Name);
23 }
24 }
 1 public class MyParameterInspector:IParameterInspector
2 {
3 public void AfterCall(string operationName, object[] outputs,
4 object returnValue, object correlationState)
5 {
6 Logger.Log("MyParameterInspector", "AfterCall", operationName);
7 }
8
9 public object BeforeCall(string operationName, object[] inputs)
10 {
11 Logger.Log("MyParameterInspector", "BeforeCall", operationName);
12 return null;
13 }
14 }
  1     public class MyParameterInspector: IOperationBehavior, IParameterInspector
2 {
3 #region IOperationBehavior Members
4 /// <summary>
5 ///
6 /// </summary>
7 /// <param name="operationDescription"></param>
8 /// <param name="bindingParameters"></param>
9 public void AddBindingParameters(OperationDescription operationDescription, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
10 {
11
12 }
13 /// <summary>
14 ///
15 /// </summary>
16 /// <param name="operationDescription"></param>
17 /// <param name="clientOperation"></param>
18 public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
19 {
20
21 }
22 /// <summary>
23 ///
24 /// </summary>
25 /// <param name="operationDescription"></param>
26 /// <param name="dispatchOperation"></param>
27 public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
28 {
29 dispatchOperation.ParameterInspectors.Add(this);
30 }
31
32 /// <summary>
33 ///
34 /// </summary>
35 /// <param name="operationDescription"></param>
36 public void Validate(OperationDescription operationDescription)
37 {
38
39 }
40
41 #endregion
42
43
44 /// <summary>
45 /// 调用方法后 输出结果值
46 /// </summary>
47 /// <param name="operationName"></param>
48 /// <param name="outputs"></param>
49 /// <param name="returnValue"></param>
50 /// <param name="correlationState"></param>
51 public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
52 {
53 Console.WriteLine("*************返回操作名称:" + operationName+"*************");
54 Console.WriteLine("*************返回操作编号:" + correlationState.ToString() + "**************");
55 for (int i = 0; i < outputs.Length; i++)
56 {
57
58 Type T = outputs[i].GetType();
59 Console.WriteLine("返回操作参数" + i.ToString() + " 类型为:" + T.ToString());
60 Console.WriteLine("返回操作参数" + i.ToString() + " ToString为:" + outputs[i].ToString());
61 Console.WriteLine("返回操作参数" + i.ToString() + " 属性:");
62 PropertyInfo[] PIs = T.GetProperties();
63 foreach (PropertyInfo PI in PIs)
64 {
65 Console.Write(PI.Name + ":");
66 Console.WriteLine(PI.GetValue(outputs[i], null));
67 }
68
69
70 }
71
72 Type Treturn = returnValue.GetType();
73 Console.WriteLine("操作返回值" + " 类型为:" + Treturn.ToString());
74 Console.WriteLine("操作返回值" + " ToString为:" + Treturn.ToString());
75 Console.WriteLine("操作返回值" + " 属性:");
76
77 if (Treturn.ToString() != "System.String")
78 {
79 PropertyInfo[] PIreturns = Treturn.GetProperties();
80 foreach (PropertyInfo PI in PIreturns)
81 {
82 Console.Write(PI.Name + ":");
83 Console.WriteLine(PI.GetValue(returnValue, null));
84 }
85 }
86
87
88 }
89 /// <summary>
90 /// 调用方法前 输出参数值
91 /// </summary>
92 /// <param name="operationName"></param>
93 /// <param name="inputs"></param>
94 /// <returns></returns>
95 public object BeforeCall(string operationName, object[] inputs)
96 {
97 Guid guid = Guid.NewGuid();
98
99 Console.WriteLine("*************调用操作名称:" + operationName+"**************");
100 Console.WriteLine("*************调用操作编号:" + guid.ToString () + "**************");
101 for (int i = 0; i < inputs.Length ; i++)
102 {
103
104 Type T = inputs[i] .GetType ();
105 Console.WriteLine("操作参数"+i.ToString ()+" 类型为:"+T.ToString ());
106 Console.WriteLine("操作参数" + i.ToString() + " ToString为:" + inputs[i].ToString());
107 Console.WriteLine("操作参数" + i.ToString() + " 属性:");
108 PropertyInfo [] PIs = T.GetProperties();
109 foreach (PropertyInfo PI in PIs)
110 {
111 Console.Write ( PI.Name +":");
112 Console.WriteLine (PI.GetValue(inputs[i], null));
113 }
114
115 }
116 return guid;
117 }
118
119
120 }

IServiceBehavior, IOperationBehavior,IParameterInspector的更多相关文章

  1. Extending WCF using IServiceBehavior, IOperationBehavior, and IParameterInspector

    [ServiceContract(Name = "PasswordGenerator")] public interface IPasswordGenerator { [Opera ...

  2. IServiceBehavior IContractBehavior IEndpointBehavior IOperationBehavior

    using System; using System.Collections.ObjectModel; using System.Reflection; using System.ServiceMod ...

  3. 转 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为

    public class EntryIdInspector : IParameterInspector { public int intParamIndex { get; set; } string ...

  4. Wcf实现IServiceBehavior拓展机制

    IServiceBehavior接口 描述:提供一种在整个服务内修改或插入自定义拓展机制: 命名空间:  System.ServiceModel.Description程序集:  System.Ser ...

  5. WCF自定义扩展,以实现aop!

    引用地址:https://msdn.microsoft.com/zh-cn/magazine/cc163302.aspx  使用自定义行为扩展 WCF Aaron Skonnard 代码下载位置: S ...

  6. 真实世界:使用WCF扩展记录服务调用时间

    WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服 ...

  7. WCF扩展

    WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服 ...

  8. WCF的执行过程

    既然是实现互通信.那么肯定会有概念意义上的服务端Server  和概念意义上的客户端 Client,在这里,我所说明的都是概念意义上的,单独强调此,是因为,基于WCF的通信没有物理上的划分,但是概念上 ...

  9. WCF Service端Inspector

    问题 在使用WCF的过程中,有时候需要在service端截取client和service之间的消息来做一些如写log,检查message是否合法的操作. 那么如何才能实现呢? 解决方案 使用WCF提供 ...

  10. 使用WCF扩展记录服务调用时间

    随笔- 64  文章- 0  评论- 549  真实世界:使用WCF扩展记录服务调用时间   WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Lay ...

随机推荐

  1. Jenkins Pipeline 流水线 - withCredentials 使用

    添加凭证 Pipeline script pipeline { agent any stages { stage('withCredentials 使用凭证') { steps { withCrede ...

  2. SE54视图簇

    一.创建关联表 头表 行表 设置行表的外键  创建两张表的表维护生成器,此处不再展开 二.SE54视图簇 激活上述 三.创建事务代码维护 四.效果展示 定期更文,欢迎关注 TRANSLATE with ...

  3. Java 21 新特性:Unnamed Patterns and Variables

    Java 21中除了推出JEP 445:Unnamed Classes and Instance Main Methods之外,还有另外一个预览功能:未命名模式和变量(Unnamed Patterns ...

  4. HanLP — HMM隐马尔可夫模型 -- 维特比(Viterbi)算法 --示例代码 - Java

    Viterbi 维特比算法解决的是篱笆型的图的最短路径问题,图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,距离的值就不在 题目背 ...

  5. 虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台

    前言 工信部<虚拟现实产业发展白皮书 5.0 >中明确提出:"通过财政资金促进虚拟现实技术产业化,支持面向工业.文化.教育等重点行业的虚拟现实技术应用". 虚拟现实 V ...

  6. 智能制造之 SMT 产线监控管理可视化

    前言 随着<中国制造2025>的提出,制造业迎来了全新的发展机遇.更多的企业将制造业信息化技术进行广泛的应用,如 MES 系统.数字孪生以及生产管理可视化等技术的研究应用,已经成为社会各界 ...

  7. 2022 开源之夏 | Serverless Devs 陪你“变得更强”

    Serverless 是近年来云计算领域热门话题,凭借极致弹性.按量付费.降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域.但是随着时间的发展,Serverles ...

  8. hbulider 运行微信开发者工具 Enable IDE Service (y/N) 

    问题:hbulider 运行微信开发者工具 出现如下页面,没有输入y的交互界面  解决办法:先安装微信开发者工具,然后打开微信开发者工具 再次运行:

  9. 一道C语言改错题

    下午,在上班,读者发来一道题目,问我怎么做.我大概瞄了一眼,看题目也不难.就先让他自己上网查下. 过了一会,他说查不到,问了群里,大家也不太会. 好吧,起码这位读者自己思考过,也问过了. 题目如下,找 ...

  10. uni-app图片上传接口联调

    https://www.bilibili.com/video/BV1jy4y1B7pw?p=159&spm_id_from=pageDriver