.net 对边缘/近设备程序执行请求-响应的最佳方式

anhgbhbe  于 2023-02-26  发布在  .NET
关注(0)|答案(1)|浏览(124)

我有一个处理多个租户的云服务器。我们有一个处理设备命令的集成引擎。有时,这些命令需要向物理设备发送信号或从串行/USB端口阅读。
这些设备命令是基于具体情况的,我们有各种各样的边缘程序,在这些集成中有不同的技术堆栈,特别是遗留技术。我现在的问题是,从云应用程序向这些集成程序之一发送命令(请求-响应)的最佳方式是什么。我的想法是这样的:

Cloud Server <-> Communication Service <-> Integration Program

我的云服务器是一个ASP.NET核心项目,所以我最初的想法是,更具体地说

ASP.NET Controller SignalR Hub <-> SignalR Windows Service to manage connections/calls <-> IPC <-> Integration Program

换句话说,什么是为边缘程序构建请求-响应基础设施的最佳方式,在这种基础设施中,云服务器可以向边缘程序发送命令,反之亦然。假设边缘程序位于NAT等设备之后,我认为通信服务需要建立连接(套接字、SignalR、MQTT?),然后是云服务器链接(通过GUID)并使用相同的连接向下发送命令到集成程序。为了在不同的边缘程序之间共享通信栈,中间的通信服务将被使用,并且IPC将数据传送到边缘程序。
典型的场景示例如下:云应用程序UI中有一个按钮“开门”,这是IEdgeProgramCapabilities中的一个方法,它向云服务器的ASP.NET控制器发送HTTP POST请求,ASP.NET控制器找到正确的SignalR客户端并向正确的通信服务发送“开门”请求(应该经常连接,否则就不会工作),通信服务接收“开门”命令,并将其传递给旧的.NET 4.5程序,该程序使用USB将某物写入门控制器,获得响应OK,并将其发送回云服务器。
运行通信服务和边缘程序的典型硬件是常规台式机、嵌入式设备和低端设备,因此通常不是服务器基础设施。
我注意到在.NET 7中,SignalR可以执行请求-响应(Signalr - It's possible to wait reponse from client?)。但是我真的很想知道是否有更好的方法来执行此操作。特别是关于IEdgeProgramCapabilities。

odopli94

odopli941#

如果您使用Azure云,应用程序洞察力允许您创建一个中间件组件,基本上可以跟踪您希望从请求/响应对象中获得的任何内容。
https://learn.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core?tabs=netcorenew%2Cnetcore6
这与ILogger接口配合得很好,您应该已经在C#中使用了它。
在你的中间件中,你可以做一个telemtry处理程序,它会根据http请求中的任何内容来抓取请求,记录你想要的任何内容,等待响应,然后存储它。
关键词是:ILogger、遥测和中间件。
我相信其他云提供商也有类似的系统,我只是不熟悉那些。
如果您希望显示器械日志记录中的特定数据,您可以将其作为响应处理的一部分存储到遥测部分的"CustomDimensions"字段中,基本上,您可以随心所欲。
或者您可以直接跟踪到应用洞察日志。
如果您使用ILogger跟踪消息,并且不想使用应用程序洞察力,则还可以实现新的ILogger。

相关问题