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

      

  • 相关阅读:
    BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
    UVAlive6807 Túnel de Rata (最小生成树)
    UVAlive6800The Mountain of Gold?(负环)
    cf623A. Graph and String(二分图 构造)
    BZOJ4144: [AMPPZ2014]Petrol(最短路 最小生成树)
    cf605D. Board Game(BFS 树状数组 set)
    为什么要去创业?
    后缀数组练习题若干
    Android开发 之 我的jar包引用方法
    IBM-ETP 实训项目前一天
  • 原文地址:https://www.cnblogs.com/xiangxiong/p/6769267.html
Copyright © 2011-2022 走看看