惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
IT之家
IT之家
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
L
LangChain Blog
博客园 - Franky
美团技术团队
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
小众软件
小众软件
Y
Y Combinator Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News

博客园 - 灰太狼2号

用Nginx+Lua+Redis给百度鹰眼API服务搭建缓存服务中间件(记录过程) 开源.net微博组建维护团队 封装SQL2005数据库操作的Framework [转]Team Foundation Server 2008 單一伺服器簡易安裝說明 (Win2003+SQL2005+TFS2008) CHFMake代码生成器Beta版下载 Huntor中国CRM评估报告连载(二) Huntor中国CRM评估报告连载(一) 汉拓中国CRM评估报告简介 子曾经曰过:先有司,赦小过,举贤才 山寨版Windows.Forms用户控件 通过SQL语句生成日历表格 浅谈WebControl中的ScriptManager与ClientScriptManager的区别(附上一个弹出多选的控件源代码) 互联网公司如何有效执行流程的心得 自定义方法的C#代码生成器 [导入].Net CLR Hosting原理及实践 [导入]CLR引擎初始化分析 [导入]CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列) [导入]CLR探索系列:GC 中的Card table和Brick Table(垃圾回收系列) [导入]CLR探索系列:GC Heap架构及其实现(垃圾回收系列)
山寨版WCF
灰太狼2号 · 2009-06-29 · via 博客园 - 灰太狼2号

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开发的同仁们)