WCF 第五章 行为 以属性为服务操作行为暴露一个参数检测器
列表5.24實現一個使用正則表達式驗證參數的行為。它可以應用到任何操作上并允許開發人員定義一個正則表達式和當參數不合法時用來返回錯誤信息的消息。
? 代碼顯示了從一個操作行為調用的一個參數檢測器并顯示了實現一個屬性的操作行為。它也顯示了如何通過在服務定義中引用屬性來講操作行為添加到服務描述中。
? 類myParameterInspector實現了IParemeterInspector接口。類存儲了兩個本地屬性,_pattern和_message,用來在BeforeCall方法中驗證參數。在那個方法中,使用正則表達式來匹配參數值和參數pattern.如果值與pattern不符合,會拋出一個錯誤。
? 類myOperationBehavior是吸納了IEndpointBehavior和Attribute接口。在AddDispatchBehavior方法中它添加myParameterInspector類到將要被每個操作調用的參數檢測器列表中去。最后,當服務操作時,GetPrice,被定義,myOperationBehavior屬性用來在運行時驗證它的參數。
列表5.24 在一個操作行為中以屬性暴露的自定義參數檢測器
[AttributeUsage(AttributeTargets.Method)]public class myOperationBehavior : Attribute, IOperationBehavior{public string pattern;public string message;public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters){}public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation){}public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation){dispatchOperation.ParameterInspectors.Add(new myParameterInspector(this.pattern, this.message));}public void Validate(OperationDescription operationDescription){}} class myParameterInspector : IParameterInspector{string _pattern;string _message;public myParameterInspector(string pattern, string message){_pattern = pattern;_message = message;}public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState){}public object BeforeCall(string operationName, object[] inputs){foreach (object input in inputs){if ((input != null) && (input.GetType() == typeof(string))){Regex regex = new Regex(_pattern);if (regex.IsMatch((string)input)){throw new FaultException(string.Format("Parameter out of range:{0}, {1}", (string)input, _message));}}}return null;}} [ServiceContract]public interface IStockService{[OperationContract]double GetPrice(string ticker);}public class StockService : IStockService{[myOperationBehavior(pattern = "[^a-zA-Z]", message = "Only alpha characters allowed")]public double GetPrice(string ticker){if (ticker == "MSFT"){return 94.85;}else{return 0.0;}}}轉載于:https://www.cnblogs.com/danielWise/archive/2010/12/13/1904733.html
總結
以上是生活随笔為你收集整理的WCF 第五章 行为 以属性为服务操作行为暴露一个参数检测器的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 构件开发常见问题和错误的解决方案和处理方
- 下一篇: 【转载自codeproject】Anot
