博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为...
阅读量:5159 次
发布时间:2019-06-13

本文共 2604 字,大约阅读时间需要 8 分钟。

public class EntryIdInspector : IParameterInspector    {        public int intParamIndex        {            get;            set;        }        string EntryIdFormat = @"\d{17}";                public EntryIdInspector(): this(0){ }                public EntryIdInspector(int intParamIndex)        {            this.intParamIndex = intParamIndex;        }        public object BeforeCall(string operationName, object[] inputs)        {            string strEntryId = inputs[this.intParamIndex] as string;            if (!Regex.IsMatch(strEntryId, this.EntryIdFormat, RegexOptions.None))            {                                MessageQueue mq = new MessageQueue(@".\private$\msgqueue");                mq.Send( "Parameter is not valid when call " + operationName + " at " + DateTime.Now.ToLongDateString());                throw new FaultException(                    "Invalid Entry ID format. Required format: ##################");            }            return null;        }        public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)        {            MessageQueue mq = new MessageQueue(@".\private$\msgqueue");            string strResult = returnValue.ToString();            mq.Send("Client call " + operationName + ":" + strResult + " at " + DateTime.Now.ToLongDateString());                        }    }

  

public class EntryIdValidation : Attribute, IOperationBehavior    {        #region IOperationBehavior Members        public void AddBindingParameters(OperationDescription operationDescription,            BindingParameterCollection bindingParameters)        {        }        public void ApplyClientBehavior(OperationDescription operationDescription,            ClientOperation clientOperation)        {            EntryIdInspector EntryIdInspector = new EntryIdInspector();            clientOperation.ParameterInspectors.Add(EntryIdInspector);        }        public void ApplyDispatchBehavior(OperationDescription operationDescription,            DispatchOperation dispatchOperation)        {            EntryIdInspector EntryIdInspector = new EntryIdInspector();            dispatchOperation.ParameterInspectors.Add(EntryIdInspector);        }        public void Validate(OperationDescription operationDescription)        {        }        #endregion    }

  在操作Operation上加入标签attribute,在操作契约中加上标签[EntryIdValidation]

[ServiceContract]    public interface IRelSrvContract    {        [EntryIdValidation]        [OperationContract]        bool Rel(string strEntryID);    }

  

转载于:https://www.cnblogs.com/xiangxiong/p/6769267.html

你可能感兴趣的文章
bootstrap 导航栏
查看>>
myeclipse运行html页面修改不生效
查看>>
【1】web.xml中的spring的配置
查看>>
基于springCloud的分布式架构体系
查看>>
客服浮动效果实现
查看>>
吴裕雄--天生自然 高等数学学习:常数项级数的审敛法
查看>>
单向链表仿LinkedList
查看>>
CSS中对图片(background)的一些设置心得总结
查看>>
leecode第三题(无重复字符的最长子串)
查看>>
【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
查看>>
【 POJ - 3801】Crazy Circuits(有源汇、上下界最小流)
查看>>
控件被覆盖后还能点击的解决办法
查看>>
jquery 入门
查看>>
spring aop
查看>>
使用hexo搭建个人博客
查看>>
MYSQL 数据库命令
查看>>
Android layout的XML
查看>>
Thinkphp整合最新Ueditor编辑器
查看>>
203. 移除链表元素
查看>>
第九周作业·
查看>>