硬件管理平台 - 公共项目搭建(第一部分)

发布时间 2023-07-30 01:42:42作者: 摧残一生

前言

本章节主要是搭建HardwareGatewayServiceHardwareGatewayWebApi项目,当在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包

  1. 通过NuGet查找Topshelf

    目前的稳定版本为4.3.0,一路同意进行安装即可。

  2. 通过NuGet添加ConfigurationManager

    该模块用于读取config文件,主要是能动态的编写服务名称。

  3. App.config中添加以下代码

    <appSettings>
    	<!-- 服务的名称 介绍和服务名称-->
    	<add key="Description" value="HardwareGatewayService" />
    	<add key="DisplayName" value="HardwareGatewayService" />
    	<add key="ServerName" value="HardwareGatewayService" />
    </appSettings>
    

  4. 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"];
        }
    }
    
  5. Program.cs中添加Application类,该类主要用于调用Nancy平台的类,主要实现Start和Sto方法

    internal class Application {
        internal void Start() {
            System.Console.WriteLine($"Start");
        }
        internal void Stop() {
            System.Console.WriteLine($"Stop");
        }
    }
    
  6. Main方法中添加Topshelf

    HostFactory.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);
    });
    

    此刻,可编译控制台程序。

  7. 直接使用vs2022运行,命令行窗体可查看到start方法被调用

  8. 也可使用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相关内容较多,在下一章进行说明。