热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何快速搭建一个基于ServiceStack框架的web服务

ServiceStack是一个高性能的.NETWebService平台,能够简化开发高性能的REST(支持JSON,XML,JSV,HTML,MsgPack,ProtoBuf,CSV等消息格式

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")]
  /// 
  /// 通过姓名获取资料
  /// 
  public class GetUserInfoByNameRequest : IReturn
  {
    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
{
  /// 
  /// 接口
  /// 
  public interface IUserInfoService
  {
    UserInfo Post(GetUserInfoByNameRequest request);
  }

  /// 
  /// 实现接口
  /// 
  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
{
  /// 
  /// 基础构造函数需要一个名称和程序集,其中包含Web服务实现(自己定义的服务接口)
  /// 
  public AppHost()
    : base("UserService.ServiceInterface", typeof(ServiceInterface.UserInfoService).Assembly)
  {}
  /// 
  /// Application specific configuration
  /// 此方法应初始化Web服务类使用的任何IoC资源。
  /// 
  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> 
  
  
  <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
转载请注明出处,谢谢!


推荐阅读
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • 在package.json中有如下两个对象:husky:{hooks:{pre-commit:lint-staged}},lint-staged:{src** ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • 1.一般应用(访问名称空间下方法)usenamespacemx_internal;vartextArea:TextAreaTextArea();textArae.htmlText ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • cgo+gSoap+onvif学习总结:1、方案初衷、资料收集及cgo实现helloworld
    cgogSoaponvif学习总结:1、方案初衷、资料收集及cgo实现helloworld文章目录cgogSoaponvif学习总结:1、方案初衷、资料 ... [详细]
author-avatar
min_xie_964
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有