EMSA简介及其使用方法

来源:互联网 发布:淘宝网老年棉拖鞋 编辑:程序博客网 时间:2024/06/06 01:52

一、EMSA简介


1.1、什么是EMSA

我们的微服务EMSA是个基于ServiceStack实现的.NET Web Services框架。而ServiceStack本身支持通用的轻量级协议和Metadata。另外,它还可以再扩展以API Gateway的方式实现Open API。EMSA V1.0是基于ServiceStack目前最新的版本号4.0.60实现的。

微软提供有WCF Web Services框架。和这个框架比,EMSA主要具有如下它们没有的优势:

1、  高性能

2、  支持跨平台运行:基于EMSA开发出的Web Services既能够运行在Windows环境中,又能够运行在支持Mono的Linux环境中。

3、  支持多协议,如:JSON格式的也支持XSD。

4、  更加web化:RESTFUL。

5、  服务端实现与客户端实现的完全解耦:EMSA基于消息的设计,使得服务端的API改变并不会破坏现有的客户端,达到服务端实现与客户端实现完全解耦的目的。

6、  EMSA API可视化说明文档便于您学习、调试和测试。

7、  易学:使用EMSA进行开发和维护服务所需的技术投入要小很多。

8、  易用:简化了REST以及WCF SOAP风格的Web Services的开发过程。

1.2、EMSA的架构

       EMSA的架构请见图1,它的HTTP客户端架构请见图2。它的内部是建立在原生的ASP.NET IHttpHandler之上实现的,支持JSON、XML、JSV、HTML、Message Pack、ProtoBuf、CSV等消息格式。


二、如何使用EMSA

2.1、基础知识

1、 路由:

A、由EMSA创建的默认路由:/[xml|json|html|jsv|csv]/[reply|oneway]/[Request DTO名] [(?query参数1={值}&query参数2={值}&......&query参数n={值})]。

B、创建自定义路由方法:使用RouteAttribute或在宿主环境中配置。提供的Demo采用的是后者方法来创建自定义路由。

 

2、如何验证请求参数的合法性:

如果您需要在提交请求参数前,验证请求参数是否必填或是否合法,那么验证逻辑必须写在继承自EMSA的AbstractValidator<TRequest>的类里(参考例子请见Demo的OrderValidator.cs),然后在宿主环境中进行开启验证的配置:


Plugins.Add(new ValidationFeature());container.RegisterValidator(typeof(OrderValidator));

3、服务:

创建EMSA服务时,必须继承来自EMSA的Service类。

 

4、服务托管:

服务端的服务对外提供服务前,必须先要把服务端给托管起来。EMSA提供了通过IIS、Self-Host等多种形式把服务端给托管起来,宿主环境可以是控制台应用或Windows Service或ASP.NET Web应用或ASP.NET MVC应用。提供的Demo的宿主环境用的是ASP.NET Web应用。

 

5、EMSA内置的客户端:

5.1、EMSA内置了一些便捷访问的客户端,这些对象都实现了IServiceClient接口,其中支持REST的客户端还都实现了IRestClient接口。这些客户端对象包括:JsonServiceClient、JsvServiceClient、XmlServiceClient、MsgPackServiceClient、ProtoBufServiceClient、Soap11ServiceClient、Soap12ServiceClient等。从名称可以看出,这几种不同之处在于支持的序列化和反序列化格式不同。因为它们实现的是相同的接口,所以它们的用法相同,也可以相互替换。

Demo中用到了JsonServiceClient和ProtoBufServiceClient这两种客户端,其中当用到ProtoBufServiceClient客户端时,您还需要完成如下工作:

a、  除了需要引用EMSA.dll外,还需要引用protobuf-net.dll。

b、  需要在宿主环境中进行如下配置:

Plugins.Add(new ProtoBufFormat());

c、必须分别给Request DTO对象和Response DTO对象的各属性标上[DataMember(Order = {0})]特性,具体写法请见Demo的ProductRequestDTO.cs和ProductResponseDTO.cs。

 

5.2、EMSA内置的客户端提供Get、Send、Post、Put、Delete等方法。查询数据一般用Get方法,新增操作一般用Post方法,更新操作一般用Put方法,删除操作一般用Delete方法。

这些方法都有重载,Demo中用到了其中一个:


以Get方法为例:
TResponse Get<TResponse>(IReturn<TResponse> requestDto);

6、为了能够成功查阅EMSA API可视化说明文档,您需要在宿主环境中进行如下配置
JsConfig.EmitCamelCaseNames = false;Plugins.Add(new SwaggerFeature());              Plugins.Add(new CorsFeature("*.test.euet.net"));


三、Json格式化/美化、数据查阅在线工具

http://web.chacuo.net/formatjson/  在线格式化、美化Json代码

http://json.parser.online.fr/  Json Parser Online 

四、参考资料

ServiceStack官网:https://servicestack.net/

三、Json格式化/美化、数据查阅在线工具
http://web.chacuo.net/formatjson/ 在线格式化、美化Json代码
http://json.parser.online.fr/ Json Parser Online 

四、参考资料
ServiceStack官网:https://servicestack.net/
https://github.com/ServiceStack/ServiceStack/wiki/Metadata-page

转自朋友的文章,请尊重作者的心血,转载请注明出处!

0 0