MAUI 本身不内置 SignalR 客户端支持,但可通过 Microsoft.AspNetCore.SignalR.Client NuGet 包实现跨平台实时通信;需适配生命周期、主线程更新 UI、强类型 Hub 及平台网络配置。
MAUI 本身不内置 SignalR 客户端支持,但可以通过 Microsoft.AspNetCore.SignalR.Client NuGet 包在 .NET MAUI 应用中接入 SignalR 服务,实现跨平台(Android/iOS/Windows/macOS)的实时通信。关键在于:用 .NET 客户端 SDK 替代 JS 客户端,适配 MAUI 的生命周期和线程模型。
安装 SignalR .NET 客户端包
在 MAUI 项目(.csproj)中添加官方客户端库:
- 打开终端,执行:
dotnet add package Microsoft.AspNetCore.SignalR.Client - 确保目标框架为
net8.0或更高(MAUI 8+ 推荐),SignalR.Client 8.x 与之完全兼容 - 无需额外引入 JavaScript 或 signalr.js —— 这是 MAUI 与 Web 前端的根本区别
配置 Hub 连接与生命周期管理
SignalR 连接需配合 MAUI 页面或 ViewModel 的生命周期启动/停止,避免内存泄漏或后台无效连接:
- 在 ViewModel 中声明
HubConnection实例,并在构造时初始化 - 使用
OnConnectedAsync和OnClosedAsync处理连接状态变化(如重连逻辑) - 在页面
OnAppearing中调用connection.StartAsync(),OnDisappearing中调用StopAsync() - 注意:MAUI 主线程非 UI 线程安全,所有
SendAsync和事件回调建议用MainThread.InvokeOnMainThreadAsync更新界面
定义强类型 Hub 和消息处理
推荐使用强类型 Hub 客户端提升可维护性(比字符串方法名更安全):