一:缓存服务类型与方法
客户端请求的时候
为了方便的知道请求的类型与类型所包含的方法
我们把服务类型和方法缓存到静态字典中了
代码如下
二:托管HTTP请求
在webconfig中增加module以托管请求
托管请求对应的类的代码如下
通过这行代码
Type serviceType = WCFRouteTable.GetWCFType(relativeAddress);
用户只要请求如下路径
http://localhost/RTMDemo.Host/RTMDemo.Host.WCF.MenuService
就会得到MenuService的类型
然后把服务类型传给指定的处理程序
三:处理请求
在WCFHandler类中最重要的莫过于
处理请求的方法
代码如下
注意:首先说这段代码还有很大的优化空间;也未经过严格的测试;但思路基本就是这样的
处理请求主要做了如下几步工作:
1.
先根据请求POST上来的信息得到准备执行的方法
var MethodKey = context.Request["MethodKey"];
var minfo = WCFRouteTable.GetMethodInfo(MethodKey);
MethodInvoker稍后再讲
2.
按顺序取出了方法的参数,并用DataContractJsonSerializer反序列化成对象
方法参数都是用JSON字符串传递的
3.
通过反射创建了服务的实例
然后调用该实例的方法
得到方法的返回值,并序列化成JSON字符串
4.
把返回值以JSON的形式输出给客户端
四:其他
1.
MethodInvoker是用的老赵的类;具体是哪篇文章,我已经找不到了。
2.
服务类和数据访问的类没有什么特殊的
我这里只公布一个服务的类
MenuDa就是数据访问类了
很普通,就不在公布代码了
3.
完成这些工作之后
我们只要在客户端构造好表单
然后把表单POST到指定的路径
就能完成服务的访问了!
---------------------------------------------------------------
喜欢的话~请大家推荐我的文章
谢谢~
我真的很需要你们的支持