ServiceStack是一个高性能的.NET Web Service 平台,能够简化开发高性能的REST (支持JSON,XML,JSV,HTML,MsgPack,ProtoBuf,CSV等消息格式)以及WCF SOAP风格的WebService。在内部实现上ServiceStack建立在原生的ASP.NET IHttpHandler之上,允许在.NET Framework和Mono之上。
本文针对ServiceStack框架在.NET程序中的使用做简单介绍。
1.新建.net 4.5的web 空项目,然后用nuget命令来安装ServiceStack
Install-Package ServiceStack -Version 5.0.2
或者直接安装最新版本:
Install-Package ServiceStack
(.net版本必须大于等于4.5版本,4.0项目会安装不成功)
2.在工程中新建model和service文件夹
创建请求和响应实体
namespace UserService.ServiceModel { #region 请求实体 [Route("/GetByNameUserInfo","Get,Post")] /// <summary> /// 通过姓名获取资料 /// </summary> public class GetUserInfoByNameRequest : IReturn<UserInfo> { public string Name { get; set; } }
#endregion
//定义实体类 public class UserInfo { public string Name { get; set; } public int Age { get; set; } public string Phone { get; set; } } }
(因为ServiceStack是基于请求参数来定义请求路由的,所以关键的是请求参数一定要定义好,同时可以在请求参数上自定义路由名和请求方式,作为对外接口名。)
3.在service文件夹创建服务接口
namespace UserService.ServiceInterface { /// <summary> /// 接口 /// </summary> public interface IUserInfoService { UserInfo Post(GetUserInfoByNameRequest request); } /// <summary> /// 实现接口 /// </summary> public class UserInfoService : ServiceStack.Service,IUserInfoService { static UserInfoService() { //构造方法,可以用来实现数据库连接操作 } //实现服务接口 public UserInfo Post(GetUserInfoByNameRequest request) {
UserInfo userInfo = new UserInfo(); return userInfo; } } }
4:新建全局应用程序类命名 Global.asax 到本项目(初始化服务)
public class Global : System.Web.HttpApplication { public class MyAppHost : ServiceStack.AppHostBase { // 基础构造函数需要一个名称和程序集,其中包含Web服务实现(自己定义的服务接口) public MyAppHost() : base("UserService.ServiceInterface", typeof(ServiceInterface.UserInfoService).Assembly) {} public override void Configure(Funq.Container container) { // 此方法应初始化Web服务类使用的任何IoC资源。 } } protected void Application_Start(object sender, EventArgs e) { new AppHost().Init(); } }
或者单独创建AppHost.cs和Global.asax,内容分别为:
public class AppHost : AppHostBase { /// <summary> /// 基础构造函数需要一个名称和程序集,其中包含Web服务实现(自己定义的服务接口) /// </summary> public AppHost() : base("UserService.ServiceInterface", typeof(ServiceInterface.UserInfoService).Assembly) {} /// <summary> /// Application specific configuration /// 此方法应初始化Web服务类使用的任何IoC资源。 /// </summary> public override void Configure(Container container) { } }
public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { new AppHost().Init(); } }
5:修改web.config配置,新增system.webServer节点
<configuration> <!--必须添加下面配置--> <!--Required for IIS 7 (and above) --> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add path="*.aspx" name="DefaultHttpApplication" type="System.Web.UI.PageHandlerFactory" verb="*" /> <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> </handlers> </system.webServer> </configuration>
6.结果展示
直接在Visual Studio中点击调试,或者将站点发布在IIS中,运行后可以看到如下界面,至此一个简单的基于ServiceStack框架的web服务就创建完成了:
7.其他说明
ServiceStack中的服务方法名为Any,Get以及Post,这也是ServiceStack支持的请求类型,Any表示服务可以通过HTTP Get和HTTP Post两种方式调用。这强化和简化了RESTFull风格的WebService的实现。只需要在这些方法上添加[Route(…)]属性即可。
在get请求参数后面加上format参数可以返回响应的类型,例如:format=json、format=xml等。
免费的ServiceStack服务最多包含10个接口,并且每小时的访问次数被限制在6000此以内。(当前版本为5.4.0)
ServiceStack调用服务接口的示例:
http://127.0.0.1:8033/json/reply/GetUserInfoByNameRequest
8.开发遇到的问题
ServiceStack搭建过程中的问题:在HTML页面中不能获得返回值,此时需要设置请求头。可以直接在web.config中设置,或者部署站点时在IIS中设置三个请求头。
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="POST, GET, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol>
原文地址:https://www.cnblogs.com/imdeveloper/p/10126874.html
转载请注明出处,谢谢!