硬件管理平台 - 公共项目搭建(第一部分)
前言
本章节主要是搭建HardwareGatewayService
和HardwareGatewayWebApi
项目,当在windows系统中,系统服务和web平台的集成能用在大多数项目上,作为他们的基础搭建。可能部分人对于硬件网关兴趣不大,可是对于基础项目,直接可使用的项目应该会比较有兴趣,因此作为第二章节,我们先进行这两个项目的搭建。
项目搭建
创建项目解决方案
创建空项目
在vs2022中创建一个空项目
点击下一步,然后输入项目所需信息:
- 项目名称:HardwareGatewayProject
- 框架:.Net Framework4.6.2
- 解决方案和项目放在同一目录:未勾选
- 位置:根据自身电脑情况进行选择
点击创建,一个空的项目旧创建完成了。
保留空解决方案
我们可将HardwareGatewayProject项目进行移除。
- 选择
HardwareGatewayProject
项目,点击鼠标右键,选择移除 - 选择解决方案,点击鼠标右键,选择在文件资源管理器中打开,删除
HardwareGatewayProject
文件夹,只保留HardwareGatewayProject
解决方案
控制台应用-windows服务搭建
创建控制台应用
在解决方案上点击鼠标右键,选择添加->新建项目,然后选择控制台应用(NET Framework)
点击下一步,填写项目信息:
-
项目名称:HardwareGatewayService
-
位置:默认即可
-
框架:.Net Framework
点击创建按钮,玩抽创建。
设置生成路径
由于该项目为硬件网关的一部分,因此需要将所有项目的生成路径进行统一。本项目中生成的路径统一设置为:
..\bin\Debug\HardwareGateway\
目标平台
注意:如果不确定硬件的古老程度,建议使用x86,如果确定能支持64位目标平台,优选x64。主要防止因目标平台原因,第三方dll无法导入。因为该错误无法定位,很难判断。
添加Topshelf包
-
通过NuGet查找
Topshelf
包目前的稳定版本为4.3.0,一路同意进行安装即可。
-
通过NuGet添加
ConfigurationManager
该模块用于读取config文件,主要是能动态的编写服务名称。
-
在
App.config
中添加以下代码<appSettings> <!-- 服务的名称 介绍和服务名称--> <add key="Description" value="HardwareGatewayService" /> <add key="DisplayName" value="HardwareGatewayService" /> <add key="ServerName" value="HardwareGatewayService" /> </appSettings>
-
在
Program.cs
中添加xml中的key变量(在class Program类下面添加即可),让代码可读取key的数值/// <summary> /// 描述信息 /// </summary> private static string Description { get { return ConfigurationManager.AppSettings["Description"]; } } /// <summary> /// 显示名称 /// </summary> private static string DisplayName { get { return ConfigurationManager.AppSettings["DisplayName"]; } } /// <summary> /// 服务名称 /// </summary> private static string ServerName { get { return ConfigurationManager.AppSettings["ServerName"]; } }
-
在
Program.cs
中添加Application类,该类主要用于调用Nancy平台的类,主要实现Start和Sto方法internal class Application { internal void Start() { System.Console.WriteLine($"Start"); } internal void Stop() { System.Console.WriteLine($"Stop"); } }
-
在
Main
方法中添加TopshelfHostFactory.Run(host => { host.Service<Application>(service => { //连接变为restfulApi service.ConstructUsing(() => new Application()); //当服务开始的时候,运行 service.WhenStarted(tc => tc.Start()); service.WhenStopped(tc => tc.Stop()); }); //本地作为系统服务启动,且设置为自启动 host.RunAsLocalSystem().StartAutomatically(); host.SetDescription(Description); host.SetDisplayName(DisplayName); host.SetServiceName(ServerName); });
此刻,可编译控制台程序。
-
直接使用vs2022运行,命令行窗体可查看到start方法被调用
-
也可使用TopShelf的命令进行安装及运行。
类库项目-Nancy平台搭建
创建类库项目
项目名称:HardwareGatewayWebApi
引用Nancy库
引用的Nuget如下所示:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net462" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.9" targetFramework="net462" />
<package id="Microsoft.Owin" version="4.2.2" targetFramework="net462" />
<package id="Microsoft.Owin.FileSystems" version="4.2.2" targetFramework="net462" />
<package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net462" />
<package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net462" />
<package id="Nancy" version="2.0.0" targetFramework="net462" />
<package id="Nancy.Owin" version="2.0.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net462" />
<package id="Owin" version="1.0" targetFramework="net462" />
</packages>
还需要添加System.Web
其中Nancy相关内容较多,在下一章进行说明。