做一个windos服务和api搭配,获取电脑的mac地址

发布时间 2023-07-02 05:31:26作者: 尝尝手指

创建webapi项目,只是搭配服务用,什么三层mvc都不弄了,默认的模板直接用就好。

简单分析下,采用signalr通信来传递mac地址,所以先安装个signalr的包(如果简单操作的话可以不装最新的,微软自带一个,不过好像是弃用的)

using Microsoft.AspNetCore.SignalR;

创建一个继承HUB的辅助类,主要功能就是服务端和客户端通信

 

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

namespace MacService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MacSignalRController : ControllerBase
    {
        /// <summary>
        /// 辅助类注入进来
        /// </summary>
        private readonly SignalRHub _signalRHub;
        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="SignalRHub"></param>
        public MacSignalRController(SignalRHub SignalRHub)
        {
            _signalRHub = SignalRHub;
        }
        /// <summary>
        /// POST请求,传入ip比对客户端ip拿到mac地址
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<string> SendMessage([FromBody] string ip)
        {
            return await _signalRHub.SendIP(ip);
        }
    }
}
View Code

 

 写一个接口,给前端浏览器用,传入ip和安装了服务的电脑的ip对比,拿到对应的mac地址

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;

namespace MacService.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MacSignalRController : ControllerBase
    {
        /// <summary>
        /// 辅助类注入进来
        /// </summary>
        private readonly SignalRHub _signalRHub;
        /// <summary>
        /// 构造函数注入
        /// </summary>
        /// <param name="SignalRHub"></param>
        public MacSignalRController(SignalRHub SignalRHub)
        {
            _signalRHub = SignalRHub;
        }
        /// <summary>
        /// POST请求,传入ip比对客户端ip拿到mac地址
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<string> SendMessage([FromBody] string ip)
        {
            return await _signalRHub.SendIP(ip);
        }
    }
}
View Code

 

因为有用到依赖注入,所以要在Program.cs文件进行注册

1.signalr   2.SignalRHub辅助类   3.MemoryCache 

    builder.Services.AddSignalR();
    builder.Services.AddScoped<SignalRHub>();
    builder.Services.AddMemoryCache();

 

还有要给signalr暴露出来让客户端可以连接,好像是这样解释吧,不知道怎么解释

     app.MapHub<SignalRHub>("/signalrhub");    

 

然后你的ip+端口+signalrhub  类似与:https://123.321.456.567:1234/signalrhub  这样,如下图则为成功

 


 

现在弄windows服务,这个博客园有大佬写了,我也是看的那个,这里贴个链接

使用.NET Core创建Windows服务详细步骤 - willingtolove - 博客园 (cnblogs.com)

 安装和卸载的命令发一下

@echo off 
chcp 65001 @title 安装windows服务 @echo off echo
= 安装服务! @echo off @sc create MacClientAssist binPath= "%~dp0MacClientAssist.exe" echo= 启动服务! @echo off @sc start MacClientAssist @echo off echo= 配置服务! @echo off @sc config MacClientAssist start= AUTO @echo off echo= 成功安装、启动、配置服务! @pause
@echo off
chcp 65001 @title 卸载Windows服务 @echo off echo 正在停止服务... @echo off @sc stop MacClientAssist echo 正在卸载服务... @echo off @sc delete MacClientAssist echo 服务已成功卸载。 @pause