stevenjin 2024-02-01 15:23 采纳率: 98.2%
浏览 7
已结题

.net core mvc与桌面程序通信

1.wpf写的exe程序与中位机板子通信,进行在线升级
2.asp.net mvc程序点击按钮,会执行该exe,在web界面展现升级进度条与升级结果
求跨应用通信解决方案

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-01 15:25
    关注

    引自免费微信小程序:皆我百晓生

    在.NET Core MVC与桌面应用程序(如WPF)之间进行通信以实现中位机板子的在线升级,可以采用以下方案:

    1. 使用中间件服务

    创建一个专门用于升级服务的中间层服务,该服务可以运行在后台,并通过HTTP API暴露升级接口。WPF客户端和ASP.NET MVC应用都可以访问这个中间件服务来进行升级操作。

    WPF客户端与中间件服务通信

    • 在WPF程序中,使用HttpClient来调用中间件提供的API执行升级操作,同时接收进度更新信息。
    using System.Net.Http;
    using System.Threading.Tasks;
    
    public class UpgradeService
    {
        private readonly HttpClient _httpClient;
    
        public UpgradeService()
        {
            _httpClient = new HttpClient();
        }
    
        public async Task<UpgradeResult> PerformUpgradeAsync(string apiEndpoint)
        {
            // POST request to start upgrade process with progress callback URL
            var content = new StringContent("...");
            var response = await _httpClient.PostAsync(apiEndpoint, content);
            
            // Process the response and track the upgrade progress
    
            return new UpgradeResult{/*...*/};
        }
    }
    

    ASP.NET MVC与中间件服务通信

    • 在ASP.NET MVC控制器中,当用户点击按钮触发升级时,调用中间件服务并展示升级状态。
    [HttpPost]
    public async Task<IActionResult> StartUpgrade()
    {
        string apiUrl = "http://your-middle-tier/upgrade/start";
        
        using (var httpClient = new HttpClient())
        {
            var response = await httpClient.PostAsync(apiUrl, null);
    
            // Redirect or render a view to show the progress based on the response
            // You may need a background task or SignalR to push progress updates from server to client
        }
    }
    

    2. 使用SignalR进行实时通信

    为了实现实时的升级进度条展示,可以在ASP.NET MVC项目中集成SignalR,以便从服务器端推送进度更新到Web界面。

    • 在MVC项目中安装Microsoft.AspNetCore.SignalR NuGet包。
    • 创建一个Hub类用于处理升级通知:
    using Microsoft.AspNetCore.SignalR;
    
    public class UpgradeProgressHub : Hub
    {
        public async Task StartUpgrade()
        {
            // Trigger the upgrade process and notify clients about progress
            // ...
            await Clients.All.SendAsync("ReceiveProgressUpdate", progressPercentage);
        }
    }
    
    • 在前端(JavaScript或Blazor)订阅这些更新并在页面上显示进度条。

    WPF客户端利用SignalR连接到MVC应用

    虽然不常见,但如果需要直接让WPF客户端也通过SignalR获取升级进度,它同样可以作为客户端连接到ASP.NET MVC中的SignalR Hub。

    总结

    实际解决方案可能涉及多个部分:

    • 创建一个独立的中间层服务负责实际的升级逻辑并与硬件交互。
    • 使用HTTP API实现WPF客户端与中间层服务之间的通信,进行升级操作。
    • 利用SignalR实现实时的Web界面进度更新。
    • 若有必要,也可考虑让WPF客户端通过SignalR连接到ASP.NET MVC应用获取进度信息。

    请注意,以上代码仅为示例性说明,具体实现时需要根据实际情况调整和完善。由于篇幅限制,未提供完整的中间件、数据库、SignalR配置及前后端完整代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了