• 山寨版WCF


    MS大搞WCF,了解过,但是配置起来应用比较费劲。

    于是乎,自己写Handler,动态解析方法参数,返回json格式字符串(当然也可以返回XML)。

    山寨终究是山寨,只能是跟WCF的某一个应用场合来做比较,请看我是怎么实现的。

    应用场合是这样,服务器端通过接受浏览器传递过来的参数,调用某一个函数后并将该函数的返回值转换为json字符串返回。

    比如,我有个Bll类Test,它有个方法Do,调用后返回一个字符串,代码如下:

    //方法

        
    public class Test
        {
            
    public string Do(TestMod mod,TestMod2 mod2)
            {
                
    return "test-" + mod.FullName.ToString() + " age:" + mod.Age.ToString() + " birthday:" + mod2.Birthday.ToString();
            }
        }


    //实体一
        [DataContractAttribute]
        
    public class TestMod
        {
            
    public string UserName { getset; }
            
    public string FullName { getset; }
            
    public int Age { getset; }
        }

    请看我配置后的山寨版WCF是如何调用这个方法的(特别适合ajax),此处我用url传参来测试:

    看到这里,或许大家觉得没什么可奇怪的,不就是一个简单的handler将.wcf格式的请求处理调用Test.Do方法,然后Response.write吗?

    实际上并不仅仅是如此,我写了个Ecrmi.Wcf.dll的类库,这个类库就是我山寨WCF的核心,它完全封装了Handler的请求参数和返回的json,并且通过动态调用请求的url指定类的方法,其中方法的参数类型的创建和请求参数的赋值都是由Ecrmi.Wcf.dll来完成的。

    这个小应用,通过以下几个步骤即可:

    1.通过IIS添加对.wcf格式的映射(当然是由asp.net的程序来处理)

    2.配置web项目的web.config,增加Handler请求配置<add verb="*" path="*.wcf" type="Ecrmi.Wcf.PageHandlerFactory,Ecrmi.Wcf"/>

    3.将你的实体类增加[DataContractAttribute]属性(用于序列化)

    4.在Web.config配置好你制定的业务Bll命名空间:<add key="AssemblyDll" value="Ecrmi.Bll"/>

    5.按照URL规则请求方法:/类名.方法名.wcf (当然后面可以传递参数,或通过其他方法传递参数)

    (DEMO代码稍后提供下载,含Ecrmi.Wcf源码)

    本打算应用做到这里就算了,可是人家WCF不是有WSDL方法描述吗?不行,俺也要我来一个,请看图:

    看见没?刚才的方法我把参数和参数的具体类型都给输出了,哈哈,URL规则变成了 /类名.方法名.api.wcf。

    更多应用,请大家下载后自己测试玩耍。

    我将我这个Ecrmi.Wcf.dll的类库介绍一下:

    1.首先是Ecrmi.Wcf.PageHandler类,通过分析请求的url,反射该url指定的类,创建其实例,最后由HttpContext.Response.Write输出的。

    2.Ecrmi.Wcf.MethodInfoUtility类,通过分析请求的url的参数类型,创建其实例,并将参数赋值为request.param传递的参苏。

    3.Ecrmi.Wcf.DynamicMethodExecutor高性能动态调用类,动态调用请求的方法,来自于JeffreyZhao的文章(高性能动态方法调用)。

    4.Ecrmi.Wcf.JsonUtility类,JSON序列化与反序列化辅助类,通过反射调用方法的返回值类型与值,将返回值序列化为Json字符串。

    5.Ecrmi.Wcf.StaticCache类,将业务逻辑的所有反射出来的属性信息缓存了,为了提高性能,来自于passer的文章(只读缓存辅助)。

    好了,这个没有什么难点,只是玩了一把雕虫小技,倒是很实用。

    号称山寨WCF,大家拍砖的就拍吧,本人脸皮厚,拍不烂,不信试试~

    下载:Demo和Ecrmi.Wcf源码 (注:特别适合用Extjs开发的同仁们)

  • 相关阅读:
    直播平台的相关技术(转载)
    各种排序算法分析总结(待整理))
    算法:60.第k个排列
    三种随机化算法:舍伍德算法 拉斯维加斯算法 蒙特卡洛算法
    随机化算法之随机数
    caffe调试
    Euclideanloss_layer层解析
    布线问题(分支限界法)
    最大堆和最小堆
    机器学习知识框架
  • 原文地址:https://www.cnblogs.com/chf/p/1513529.html
Copyright © 2020-2023  润新知