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.

或者直接安装最新版本:

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
转载请注明出处,谢谢!

如何快速搭建一个基于ServiceStack框架的web服务的更多相关文章

  1. 快速搭建一个基于react的项目

    最近在学习react,快速搭建一个基于react的项目 1.创建一个放项目文件夹,用编辑器打开 2.打开集成终端输入命令: npm install -g create-react-app 3. cre ...

  2. 【MVVMLight小记】一.快速搭建一个基于MVVMLight的silverlight小程序

    写了篇MVVM小记http://www.cnblogs.com/whosedream/p/mvvmnote1.html,说好要写点MVVMLight的东西,所以接着写,以便和大家共勉. 我假设你已经有 ...

  3. jquery+flask+keras+nsfw快速搭建一个简易鉴黄工具

    1. demo 地址:http://www.huchengchun.com:8127/porn_classification 接口说明: 1. http://www.huchengchun.com:8 ...

  4. [原创] zabbix学习之旅五:如何快速搭建一个报警系统

    通过之前的文章,我们已搭建好zabbix server.agent和mail客户端,现在万事俱备,只差在server的界面中进行相应配置,即可快速搭建一个报警系统.总的来说,快速搭建一个报警系统的顺序 ...

  5. 快速搭建一个Quartz定时任务【转载,好文 ,值得收藏,亲身试用 效果不错】

    Quartz.NET 入门 概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔 ...

  6. 【Head First Servlets and JSP】笔记6:什么是响应首部 & 快速搭建一个简单的测试环境

    搭建简单的测试环境 什么是响应首部 最简单的响应首部——Content-Type 设置响应首部 请求重定向与响应首部 在浏览器中查看Response Headers 1.先快速搭建一个简单的测试环境, ...

  7. 如何快速搭建一个 Node.JS 项目并进入开发?

    了解:如何快速搭建一个项目并进入开发? 在此不概述 Node.JS 的历史以及发展过程. 因为之前接触过通过 Java 开发语言,所以明确地知道一个服务器所需的文件,以及一个服务器所需要的操作. 那么 ...

  8. NodeJS 最快速搭建一个HttpServer

    最快速搭建一个HttpServer 在目录里放一个index.html cd D:\Web\InternalWeb start http-server -i -p 8081

  9. vuejsLearn---通过手脚架快速搭建一个vuejs项目

    开始快速搭建一个项目 通过Webpack + vue-loader 手脚架 https://github.com/vuejs-templates/webpack 按照它的步骤一步一步来 $ npm i ...

随机推荐

  1. 基于OpenStreetMap计算驾车距离(Java)

    最近公司有个项目需要计算6000个点之间的驾车距离,第一时间想到的是利用Google的Distance Matrix API,但是免费Key每天只能计算2500个元素(元素 = 起点数量 * 终点数量 ...

  2. 关于RecyclerView嵌套导致item复用异常,界面异常的问题

    常规需求: 外层RecyclerView嵌套内层RecyclerView , 在上下滑动的时候会出现item数据以及view的显示异常. 解决办法: 1.重写  getItemViewType  方法 ...

  3. 禁止WPS2019开机自启动

    最近开机发现WPS总是自己启动,导致开机速度会慢5s左右,从网上找了很多办法都没用,包括运行+msconfig,启动项里面没有WPS:杀毒软件自启动管理里面也没有找到WPS,百度了一圈也没有找到任何有 ...

  4. Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化

    上篇博客详细的聊了CocoaPods的相关内容,今天我们就来介绍另一个Cocoa的包管理器Carthage.在上家公司用Swift开发工程时,用的就是Carthage.Carthage诞生于14年11 ...

  5. 解决ASP.NET Core MVC调试慢的问题

    最近在做的一个项目中,发现网页端同时发起了4个AJAX请求需要数秒才获取到响应,太慢了,当我把请求数降低为1个的时候,速度看起来就比较正常,增加到2个同时的请求后,速度就有些慢了,3个的话就明显慢了, ...

  6. 使用mysql事件定时执行岗位七天下线任务

    最近做了一个招聘的项目,在项目中有一个定时下线的需求.在做之前我一直在考虑到底使用window 服务,还是使用调度,最终我选择使用mysql定时事件,因为这样简单方便. 思路:首先创建一个存储过程,通 ...

  7. dubbo-springboot入门级demo

    1. dubbo-springboot入门级demo 1.1. 前言 最后一个做运维的朋友和我提起,他们公司想做个dubbo灰度发布的功能,而这个功能落到了他头上.在我的印象里,dubbo应该可以通过 ...

  8. MySQL命令窗口下中文显示乱码的解决过程

    在dos客户端输出窗口中查询表中的数据,还有项目部署到服务器上时前台的页面,中文数据都显示成乱码,如下图所示: 这个问题困扰了我一天,后来解决了才发现原来我的方向错了,一直我以为是SpringBoot ...

  9. javascript 实现数据结构 - 栈

    栈是一种遵从后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.栈就好像是一个底部密封的盒子,我们往里面 ...

  10. python学习笔记(九)、模块

    1 模块 使用import 语句从外部导入模块信息,python提供了很大内置模块.当你导入模块时,你会发现其所在目录中,除源代码文件外,还新建了一个名为__pycache__的子目录(在较旧的Pyt ...