使用RpcLite构建SOA/Web服务
使用RpcLite构建SOA/Web服务
SOA框架系列
提到Web服务最先想到的就是WebService此外常用的还有WCF、ServiceStack、WebApi等。
RpcLite是一个开源的轻量级SOA服务框架,除了基本的提供Web服务还包括SOA治理系统(本文暂不展开在后继的文章会详细说明)。RpcLite与WCF比较像,下面介绍使用方法。
1. 创建一个Web项目,Framework选择>=4.0
2. 从NuGet中添加RpcLite
安装后项目中会添加一个TestService1.cs文件,此文件是一个最简单的服务提供一个接口GetDateTimeString返回当前时间的字符串
Web.config也添加了相关的配置
3. 修改配置
到此为止,最简单有服务就已经完成了。F5运行在浏览器中把地址改为http://localhost:53189/api/test/GetDateTimeString可看到接口返回的结果,用JQuery, Ajax都可以访问了。
4. 基本原理
架构图
RpcLite的入口是一个异步HttpHandler,在Handler中会把RequestUrl、ContentType、RequestStream、ResponseStream、HttpContext等放到一个新的ServiceContext中交给RpcService处理,RpcService会根据RequestUrl找到对应的Service及Action根据ContentType选择序列化方式(默认支持json、xml,可以添加自定义序列化方式),然后反序列化得到参数,再使用参数调用具体的服务方法,得到结果后返回给客户端。
5. 配置文件说明
再来看Web.config,
标记1. 添加HttpHandler添加后对应地址的请求会被RpcAsyncHandler处理。
标记2. 添加RpcLite配置节点处理器,添加后RpcLite就能读取RpcLite节点中的数据。
标记3. 此处添加了一个服务,name只起识别作用最好不要重复,path确定此服务会处理来自哪些url地址的请求需要使用虚拟目录相对地址即以~/开头,type设置实现此服务的类格式是<类全名>, 程序集名。
标记4. 这里是添加一个客户端配置,如果创建客户端实例时未指定服务url则会使用这里设置的path。如ClientFactory.GetInstance<ITestService>()此处未指定服务url就会从配置中查找。
其它. appId、environment、namespace与治理系统相关此处不展开明说。
代码从下面给出的git中获取。
6. 相关链接
Demo git 地址:https://github.com/chrishaly/RpcLiteDemo
RpcLite git 地址:https://github.com/aolyn/RpcLite
NuGet: https://www.nuget.org/packages/RpcLite
QQ群:364617712
欢迎加入
夜深了、写文章比写代码麻烦。这个框架前年2014年就写得差不多了,一直没时间介绍。有兴趣的朋友可以在git上fork & pull request。
联系方式
后继会有系列文章详细介绍
thanks & regards.
Chris
最新文章
- Btree 索引
- kendo chart label position 图表的值标签位置及显示模板
- tyvj1098[luogu 2365]任务安排 batch
- 使用hibernate时出现 org.hibernate.HibernateException: Unable to get the default Bean Validation factory
- spring 第一篇(1-1):让java开发变得更简单(下)
- tomcat配置虚拟目录映射
- Oracle ORA-12519: TNS:no appropriate service handler found 解决
- centos6.7下编译安装lnmp
- CLR via C# 序列化读书笔记
- php如何查找会员无限分类的所有上级和所有下级
- JDK Tools - jps: JVM 进程状态工具
- python3实现的web端json通信协议
- Android开发之文件下载,状态时显示下载进度,点击自动安装
- 一位资深程序员给予Java初学者的学习路线建议
- Django 表单校验 表单字段设置 自定义表单校验规则
- MSSQL TABLE COPY TABLE
- NC 63凭证辅助相关表
- 使用Fraps获取3D程序的FPS
- VBA 根据Find方法根据特定内容查找单元格
- minio 对于压缩的处理
热门文章
- Numpy库进阶教程(一)求解线性方程组
- jmeter--九种定时器介绍(包括思考时间、集合点)
- 【Codeforces Round #433 (Div. 2) A】Fraction
- UML学习总结(3)——StarUML指导手册
- codeforces Round 246 D. Prefixes and Suffixes (后缀数组 || KMP)
- 【高德地图API】从零開始学高德JS API(五)路线规划——驾车|公交|步行
- C语言深度剖析-----数组与指针分析
- 使用Perl合并文件
- POSIX 多线程编程及理解
- libSVM介绍(二)