zoukankan      html  css  js  c++  java
  • 转 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为

     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);
        }
    

      

  • 相关阅读:
    mysql简单介绍及安装
    LVS
    LAMP架构
    记录一个低级又让人踩坑的bug(org.springframework.web.method.annotation.MethodArgumentTypeMismatchException)
    Hadoop通过idea连接远程集群出现的用户权限问题
    linxu离线环境安装docker
    linux中oracle的使用问题简单罗列与解决
    Linux下安装Oracle详细版-附oracle11g软件包
    Host is not allowed to connect to this MySQL server问题解决
    kettle的安装使用及介绍
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/6769267.html
Copyright © 2011-2022 走看看