ASP.NET Boilerplate的SignalR集成

时间:2017-12-29 09:02:48

标签: signalr aspnetboilerplate

我正在开发一个ASP.NET Boilerplate项目。我想将SignalR正确地集成到这个项目中。

有文档,但我想知道从后端向前端发送通知时SignalR的流程。任何示例代码或建议都表示赞赏。

1 个答案:

答案 0 :(得分:4)

ASP.NET Boilerplate是开源的,因此您可以查看GitHub上的代码。

documentation Abp.AspNetCore.SignalR 包中实现 IRealTimeNotifier

以下代码适用于ASP.NET Core& jQuery版本,但其他版本的流程相同。

  1. 在后端,NotificationDistributer注入calls IRealTimeNotifier

    await RealTimeNotifier.SendNotificationsAsync(userNotifications.ToArray());
    
  2. SignalRRealTimeNotifier implements SendNotificationsAsync,它获取每个用户的在线客户端,并使用userNotification作为参数调用客户端方法:

    var onlineClients = _onlineClientManager.GetAllByUserId(userNotification);
    foreach (var onlineClient in onlineClients)
    {
        var signalRClient = _hubContext.Clients.Client(onlineClient.ConnectionId);
        signalRClient.InvokeAsync("getNotification", userNotification);
    }
    
  3. getNotification的SignalR客户registers,并以'abp.notifications.received'作为参数触发notification

    connection.on('getNotification', function (notification) {
        abp.event.trigger('abp.notifications.received', notification);
    });
    
  4. module-zero-core-template main.js registers通知处理程序:

    abp.event.on('abp.notifications.received', function (userNotification) {
        abp.notifications.showUiNotifyForUserNotification(userNotification);
    }
    
  5. showUiNotifyForUserNotification formats and shows前端的通知:

    abp.notifications.showUiNotifyForUserNotification = function (userNotification, options) {
        var message = abp.notifications.getFormattedMessageFromUserNotification(userNotification);
        var uiNotifyFunc = abp.notifications.getUiNotifyFuncBySeverity(userNotification.notification.severity);
        uiNotifyFunc(message, undefined, options);
    }