随笔 - 57,  文章 - 0,  评论 - 25,  阅读 - 26624

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

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

using Microsoft.AspNetCore.SignalR;

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

补充一下HUB类怎么写

复制代码
 public class SignalRHub : Hub
    {
        private readonly IHubContext<SignalRHub> _hubContext;
        private readonly List<string> connectionIDs;
        private readonly IMemoryCache _memoryCache;
        private int num;

        public SignalRHub(IHubContext<SignalRHub> hubContext, IMemoryCache memoryCache)
        {
            connectionIDs = new List<string>();
            _hubContext = hubContext;
            _memoryCache = memoryCache;
        }


        #regionpublic void Mac1(string macMsg)
        {
            num++;
            if (!string.IsNullOrEmpty(macMsg) || num == connectionIDs.Count)
            {
                num = 0;
                _memoryCache.Set("mac", macMsg); // 存储mac值到内存缓存中
            }
        }
        #endregion


        #region/// <summary>
        /// 客户端连接之后立马执行
        /// </summary>
        /// <returns></returns>
        public override async Task OnConnectedAsync()
        {
            // 保存连接的客户端到上下文中
            connectionIDs.Add(Context.ConnectionId);
            await Clients.Caller.SendAsync("Connected", Context.ConnectionId);
            //添加到组
            await Groups.AddToGroupAsync(Context.ConnectionId, "Mac");
            await base.OnConnectedAsync();
        }

        public async Task<string> SendIP(string ip)
        {
            //await Clients.All.SendAsync("匹配IP", ip);//给所有的客户端发送IP进行匹配
            await _hubContext.Clients.Group("Mac").SendAsync("匹配IP", ip);
            await Task.Delay(2000);
            string mac = _memoryCache.Get<string>("mac"); // 从内存缓存中读取mac值
            return mac;
        }
        #endregion
    }
View Code
复制代码

 

 

复制代码
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
复制代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

 

posted on   尝尝手指  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2022-07-02 vue 控件的淡入淡出

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示