如何创建WebApi的windows服务(测试记录)

本文主要记录我开发webapi的windows服务的全过程,以做备忘。

1. 创建一个windows服务项目

本文以.net Framwork为基础,故我选择的如下图所示:
在这里插入图片描述

2. 配置config文件

为了支持http协议,需要在项目中App.configconfiguration节点下增加如下配置:

<system.net>
    <settings>
        <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
</system.net>

3.添加相关引用

因为需要创建webapi,并进行监听配置,所以需要添加相关引用。
引用上右键,选择管理NuGet程序包,然后搜索并安装,安装成功后会如下图所示:
在这里插入图片描述

4. 创建WebApi

(1)创建服务
  • windows服务项目创建之后会自动添加一个Service1服务,但我懒得删除或重命名,所以我直接使用这个服务,如小伙伴想重新创建自己的服务,可在项目上右键->添加->新建项,在弹出的窗体中选择Windows服务即可。这里不再详细说明。

  • 在Service1的后台代码中创建并配置WebApi,具体代码如下:

public partial class Service1 : ServiceBase
    {
        private IDisposable webApp;
        private string baseAddress;

        public Service1()
        {
            InitializeComponent();
            baseAddress = "http://localhost:8081/";
        }

        protected override void OnStart(string[] args)
        {
            webApp = WebApp.Start<Startup>(url: baseAddress);
        }

        protected override void OnStop()
        {
            webApp?.Dispose();
        }
    }

    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
            appBuilder.UseWebApi(config);
        }
    }
(2)创建webapi的controller

建议在项目下创建一个Controller文件夹,将自己的Controller添加到文件夹下:
在这里插入图片描述
因为是做简单测试,所以我的DataControler下只有简单的几个API

[RoutePrefix("api/data")]
    public class DataController:ApiController
    {
        [HttpGet]
        public string[] GetData()
        {
            return new string[] { "xiaoming", "xiaoli", "xiaozhang" };
        }

        [HttpGet]
        public string GetData(string description)
        {
            return "the description is " + description;
        }

        [HttpPost]
        public int PostData(string content)
        {
            return content.Length;
        }
    }
(3)为服务添加Installer

双击Service1,打开设计器,右键->添加安装程序
在这里插入图片描述
会自动添加两个控件:serviceProcessInstaller1serviceInstaller1

  1. 右键serviceProcessInstaller1选择属性,将Account设置为LocalSystem
  2. 右键 serviceInstaller1选择属性,设置Description为测试服务、StartType为Manual(可根据自己需要设置为Automatic)
(4)生成

右键项目->生成

5. 安装服务

我选择的安装程序是微软自己的InstallUtil.exe
1)以管理员身份运行cmd
cmd启动后执行命令:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
切换到InstallUtil.exe的程序目录(根据自己的路径进行修改命令)
在这里插入图片描述
2)安装服务
执行命令:InstallUtil.exe D:\WebAPITest\ApiService\bin\Debug\ApiService.exe
安装成功后有提示:
在这里插入图片描述

3)启动服务
执行命令:net start Service1
在这里插入图片描述

4)测试
浏览器输入http://localhost:8081/api/data并访问,成功后会如下显示:
在这里插入图片描述
对于post请求,可使用调试软件ApiPost或者Postman,如何使用这里暂时不做介绍
5)停止、删除服务
对于不需要的服务可先将其停止,然后删除。命令如下
net stop Service1
InstallUtil.exe /u D:\WebAPITest\ApiService\bin\Debug\ApiService.exe 或者
sc delete Service

本文如有错误,还请指正

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐