扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:老赵 来源:博客园 2007年11月3日
关键字:
1 private static WebServiceData GetWebServiceData(Type type) 2 { 3 // 设法从Cache内获得WebServiceData对象 4 WebServiceData data = WebServiceData._cache[type] as WebServiceData; 5 6 // 如果Cache内没有 7 if (data == null) 8 { 9 // 构造该对象 10 data = new WebServiceData(type); 11 // 并放入Cache中 12 WebServiceData._cache[type] = data; 13 } 14 15 return data; 16 } |
1 private WebServiceData(Type type) 2 { 3 this._type = type; 4 } |
1 private static IHttpHandler CreateHandler(WebServiceData webServiceData, string methodName) 2 { 3 RestHandler handler; 4 // 调用GetMethodData得到WebServiceMethodData对象实例, 5 // 描述了一个Web Service方法。 6 WebServiceMethodData data = webServiceData.GetMethodData(methodName); 7 8 // 根据是否支持Session选择不同的Handler 9 if (data.RequiresSession) 10 { 11 handler = new RestHandlerWithSession(); 12 } 13 else 14 { 15 handler = new RestHandler(); 16 } 17 18 handler._webServiceMethodData = data; 19 return handler; 20 } |
1 internal WebServiceMethodData GetMethodData(string methodName) 2 { 3 // 保证Method的描述都被加载并保存了 4 this.EnsureMethods(); 5 6 WebServiceMethodData data = this._methods[methodName]; 7 if (data == null) 8 { 9 throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, AtlasWeb.UnknownWebMethod, new object[] { methodName }), "methodName"); 10 } 11 12 return data; 13 } |
1 private void EnsureMethods() 2 { 3 if (this._methods == null) 4 { 5 lock (this) 6 { 7 Dictionary<string, WebServiceMethodData> methodDict = 8 new Dictionary<string, WebServiceMethodData>(StringComparer.OrdinalIgnoreCase); 9 10 // 获得所有public的实例方法 11 MethodInfo[] infoArray = this._type.GetMethods(BindingFlags.Public | BindingFlags.Instance); 12 13 // 枚举每个MethodInfo 14 foreach (MethodInfo info in infoArray) 15 { 16 // 获得WebMethodAttribute标注 17 object[] webMethodAttArray = info.GetCustomAttributes(typeof(WebMethodAttribute), true); 18 19 // 如果这个方法被WebMethodAttribute标注了 20 if (webMethodAttArray.Length != 0) 21 { 22 // 获得WebOperationAttribute标注 23 object[] webOpAttArray = info.GetCustomAttributes(typeof(WebOperationAttribute), true); 24 25 // 生成WebServiceMethodData对象 26 WebServiceMethodData data = new WebServiceMethodData( 27 this, 28 info, 29 (WebMethodAttribute)webMethodAttArray[0], 30 (webOpAttArray.Length != 0) ? ((WebOperationAttribute)webOpAttArray[0]) : null); 31 32 // 放入Dictionary 33 methodDict[info.Name] = data; 34 } 35 } 36 37 this._methods = methodDict; 38 } 39 } 40 } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者