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. SQL SERVER数据分组后取第一条数据——PARTITION BY

    MySQL 数据分组后取第一条数据 SQL SERVER (mssql) 数据分组后取第一条数据 SQL 如下 找状态=1的数据,按 HospitalId,DeptId 组合并倒序排序,每组里面取第一 ...

  2. docker-compose部署SpringCloud

    1.安装 docker-compose 将 docker-compose-Linux-x86_64 传到  /usr/local/bin 目录下,并改名为 docker-compose 2.设置权限  ...

  3. Appium介绍及第一个例子

    Appium介绍 appium是开源的移动端自动化测试框架 appium可以测试原生的,混合的,以及移动端的项目 appium可以测试ios,android应用 appium是跨平台的,可以用在osx ...

  4. 国内申请微软新必应(New Bing)

    国内申请微软新必应(New Bing) 本文解决了两个问题: 1 需国外网络环境 2 点击加入候补名单无限返回错误 注册outlook邮箱 https://outlook.live.com/ 一步一步 ...

  5. QE01/QA11/QA02屏幕增强

    1.业务需求 需要对来料检验增加"合格数量"和"不合格数量"字段,涉及三个增强开发 2.QE01\QE02\QE03\QE51N屏幕增强 增强表 增强点BADI ...

  6. JSP 学习笔记 | 六、Filter & Listener

    前文:JSP 学习笔记 | 五.会话技术 Session & Cookie 前文:JSP 学习笔记 | 四.JSP标准标签库(JSTL)个人使用指南 前文:JSP 学习笔记 | 三.EL 表达 ...

  7. 五、java操作redis

    系列导航 一.redis单例安装(linux) 二.redis主从环境搭建 三.redis集群搭建 四.redis增加密码验证 五.java操作redis --demo主方法 package com. ...

  8. 使用 Sealos 将 ChatGLM3 接入 FastGPT,打造完全私有化 AI 客服

    FastGPT 是一款专为客服问答场景而定制的开箱即用的 AI 知识库问答系统.该系统具备可视化工作流功能,允许用户灵活地设计复杂的问答流程,几乎能满足各种客服需求. 在国内市场环境下,离线部署对于企 ...

  9. freeswitch的distributor模块

    概述 freeswitch 是一款简单好用的VOIP开源软交换平台. 当呼叫是同一个入中继,但是有多条出中继时,需要对出中继做负载均衡,mod_distributor模块可以完成对应的配置和路由. m ...

  10. 【滤波】Kalman Filter

    from: 卡尔曼滤波教程 (kalmanfilter.net) 总览 关于本教程 关于作者 关于卡尔曼滤波 为什么需要预测算法 卡尔曼滤波简介 必要的背景知识 均值和期望 方差和标准差 正态分布 随 ...