创建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;
} #region 收
public 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
}

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

写一个接口,给前端浏览器用,传入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);
}
}
}

因为有用到依赖注入,所以要在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

           

做一个windos服务和api搭配,获取电脑的mac地址的更多相关文章

  1. java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名

    package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...

  2. 【C++】【纯代码】获取电脑的mac地址

    bool GetMacAddress(CString &LanMAC) { #define MAX_ADAPTER_NAME_LENGTH 256 #define MAX_ADAPTER_DE ...

  3. Unity网络通讯(一)获取计算机的MAC地址

    1 string GetMac() { string mac = ""; mac = GetMacAddressBySendARP(); return mac; } [DllImp ...

  4. C#开发BIMFACE系列8 服务端API之获取文件上传状态信息

    系列目录     [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...

  5. C#开发BIMFACE系列10 服务端API之获取文件下载链接

    系列目录     [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,默认场景下需要下载该源文件,下载文件一般需要知道文件的下载链接即可.BIMACE平台提供 ...

  6. C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...

  7. C#开发BIMFACE系列7 服务端API之获取文件信息列表

    系列目录     [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...

  8. C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...

  9. C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性

    系列目录     [已更新最新开发文章,点击查看详细] 在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性.不同的构建也有可能包含相同的属性. 上图中 ...

  10. C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息

    系列目录     [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...

随机推荐

  1. Android复习(六)核心组件—>Activity 简介、生命周期、状态变更

    1. 可以在activity上声明权限,来保证只在进入某个activity是否有某种权限 <manifest> <activity android:name="....&q ...

  2. find命令,查找文件

    find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限.大小.时间.inode 号等来搜索文件. [root@localhost ~]#find 搜索路径 [选项] 搜 ...

  3. blocks 单调栈、单调队列题解

    blocks题解: 1.题面: 2.分析: 题意大概就是说,找一段最长的区间,并且这段区间的平均值>=k,那么我们可以对他的每一个值减去k,最终求和>=0即可. 那我们需要对每个可能的左端 ...

  4. 云原生周刊:HashiCorp Vault 1.14 发布 | 2023.6.26

    开源项目推荐 Helmfile Helmfile 是一个开源工具,使用 Helm charts 简化复杂应用程序的部署.它提供了一种声明性的方式来定义 Kubernetes 资源的期望状态,并管理 H ...

  5. 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS

    容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程.目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中.在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行 ...

  6. 无需等待Vue Release发布,就能在项目中体验最新版

    前言 两个月前尤大在Vue 仓库中引入了 pkg.pr.new,有了这个后Vue仓库中的每个commit或者PR都会自动触发一个新的发布,我们就可以在项目中体验最新版本的Vue啦. 关注公众号:[前端 ...

  7. Centos7系统docker部署Ferry工单系统

    1.更新yum源国内阿里1.1备份当前yum仓库配置sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.rep ...

  8. 2021“MINIEYE杯”(1)

    Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:10:00 1001-Mod, Or and Everything 真正的签到题 题 ...

  9. Object.assign:对象属性复制,浅拷贝

    Object.assign = Object.assign || function(){ if(arguments.length == 0) throw new TypeError('Cannot c ...

  10. (Redis基础教程之九) 如何在Redis中使用Sorted Sets

    介绍 Redis是一个开源的内存中键值数据存储.在Redis的,排序集合类似于一个数据类型集在这两者都是串的非重复的组.不同之处在于,已排序集中的每个成员都与一个分数相关联,从而可以从最小分数到最大分 ...