SignalR推送消息
# SignalR推送消息
# 功能概述
你需要对接的平台统一通知中心,是基于 SignalR 实现的全局消息通知能力。用户登录后系统会自动建立 SignalR 通信链路,通知中心(MonitorHub)会主动触发 “获取待处理消息” 事件,各业务模块订阅对应事件并返回待处理数据量,最终由 MonitorHub 汇总后在前端顶部通知入口统一展示;用户点击不同类型通知时,将触发对应业务模块的独立处理逻辑(接口调用 / 弹窗展示)。
# 核心技术依赖
通信框架:SignalR(用于服务端与前端的实时双向通信)
事件总线:本地事件总线(ILocalEventBus),用于事件发布与订阅
核心实体:SignalREvent(跨库订阅响应模型)
/// <summary>
/// 跨库订阅响应模型
/// 事件名称 : Ganweisoft.IoTCenter.Module.SignalREvent
/// </summary>
[EventName("Ganweisoft.IoTCenter.Module.SignalREvent", true)]
public class SignalREvent
{
public string userName { get; set; }
/// <summary>
/// 事件名称
/// </summary>
public string eventName { get; set; }
/// <summary>
/// 事件数据
/// </summary>
public object eventData { get; set; }
}
# 核心实体类说明
# SignalREvent 类定义
该类是跨业务模块的事件通信载体,用于传递 “待处理消息数” 相关事件数据,核心字段说明如下:
| 字段名 | 数据类型 | 必填 | 说明 |
|---|---|---|---|
| userName | string | 是 | 触发事件的用户名(关联登录态) |
| eventName | string | 是 | 事件名称(如 "ToDoMainCount" 标识待处理数) |
| eventData | object | 是 | 事件数据(通常为待处理消息数量,int 类型) |
# 特性说明
[EventName("Ganweisoft.IoTCenter.Module.SignalREvent", true)]
第一个参数:全局唯一的事件标识,所有业务模块均需使用该标识订阅 / 发布事件;
第二个参数:是否为跨库事件(固定为 true)。
# 对接流程
# SignalR 连接建立
用户登录后,系统自动完成 MonitorHub 的 SignalR 连接建立,无需业务模块额外处理。
# 订阅 “获取待处理消息” 事件
各业务模块需订阅 MonitorHub 发布的 “获取待处理消息” 事件(核心事件名:ToDoMainCount),并实现待处理数的计算逻辑。
# 返回待处理数
业务模块接收到事件后,根据当前登录用户(userName)计算对应业务的待处理消息数量,并通过 SignalREvent 返回。
特别注意:前端不做任何累加处理,后台推送多少就显示多少。如后台第一次推送100,前端就显示100,第二次推送50,前端就显示50。
# 发布待处理数事件
业务模块通过本地事件总线(ILocalEventBus)发布包含待处理数的 SignalREvent 事件,示例代码如下:
// 注入本地事件总线
private readonly ILocalEventBus _localEventBus;
// 构建事件实体
var addEvent = new SignalREvent()
{
userName = _session.UserName,
eventName = "ToDoMainCount",
eventData = totalCount
};
// 发布事件至MonitorHub
await _localEventBus.PublishAsync<SignalREvent>(addEvent);
# 前端交互处理
MonitorHub 汇总所有业务模块的待处理数后,前端统一展示;
前端配置页面如下:

# 对接规范
事件名称规范:所有业务模块统一使用ToDoMainCount作为 “获取待处理消息” 事件名称,不可自定义;
数据类型规范:eventData 字段优先使用 int 类型(待处理数量),如需传递复杂数据需提前与平台侧确认;
性能要求:待处理数计算逻辑需控制在 100ms 内完成,避免阻塞 SignalR 通信;
异常处理:业务模块需捕获计算待处理数时的异常,默认返回 0,避免影响全局通知中心运行。
环境依赖规范:业务模块对接前需完成基座安装和配置管理模块更新。