组长给了个任务,需要了解SOA,眼一瞎,什么都不懂。幸好摆弄过百度API,加上百度了一个不错的文章,算有所了解了吧!
(一开始以为什么都没有,自己瞎捉摸,后来才知道原来已经有了一个demo,我也是醉了。)
不过自己写了个简单到不能再简单的,也不知道是对是错的小demo,然后再看别人的,也算是加深学习了。
用一般处理程序来做接口:
[Test(ClassType = typeof(TestSOABusiness))] public class TestHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string usertype = context.Request.QueryString["usertype"]; Type classtype = null; string value=string.Empty; Type t = this.GetType(); object[] objAttrs = t.GetCustomAttributes(typeof(TestAttribute), true); foreach (object obj in objAttrs) { TestAttribute attr = obj as TestAttribute; if (attr != null) { classtype = attr.ClassType; break; } } switch(usertype) { case "GetMethodA": { MethodInfo mf1 = classtype.GetMethod(usertype, BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(string) }, null); value = (string)mf1.Invoke(null, new object[] { usertype }); break; } case "GetMethodB": { MethodInfo mf1 = classtype.GetMethod(usertype, BindingFlags.Public | BindingFlags.Static, null, new Type[] { typeof(int) }, null); value = (string)mf1.Invoke(null, new object[] { 2 }); break; } default: break; } context.Response.Write(value); } public bool IsReusable { get { return false; } } }
自定义的方法和特性就不贴了。
ps:调用方法的参数实体也是可以利用反射和配置文件来完成的,一是麻烦,二是自己一开始也不会(现在也不怎么会,只是知道了大概的逻辑。。。)。
时间: 2024-09-17 08:40:39