ABP实时通知系统UserId为null

时间:2018-12-05 17:26:04

标签: c# .net notifications signalr aspnetboilerplate

我正在尝试使用实时通知。我尝试了所有示例,但是当我SendNotificationsAsync时,我的客户没有收到它。

此外,AbpNotifications表始终为空。

启动:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.DependencyResolver.UseRedis("redis", 6379, "", "ChecklistCache");
        app.MapSignalR();
    }
}

子:

public async Task Subscribe_NewAlert(int? tenantId, long userId)
{
    await _notificationSubscriptionManager.SubscribeAsync(new UserIdentifier(tenantId, userId), "NewAlert");
}

Pub:

public async Task Publish_NewAlert(string alert)
{
    var msg = new MessageNotificationData($"New alert created! {alert}");
    await _notiticationPublisher.PublishAsync("NewAlert", msg, severity: NotificationSeverity.Info);
}

我的工作:

[Abp.Domain.Uow.UnitOfWork]
public override void Execute(UserIdentifier args)
{
    var notifications = _userNotificationManager.GetUserNotifications(args);
    Abp.Threading.AsyncHelper.RunSync(() => _realTimeNotifier.SendNotificationsAsync(notifications.ToArray()));
}
  1. 我检查了_realTimeNotifier并且我的UserId为空,但是IOnlineClientManager自动设置了一个用户。我在哪里可以设置我的用户ID?

  2. 要使用ABP通知系统,我是否必须拥有ABP创建的所有公用表? (AbpUserAbpTenantAbpRoles,权限等。)可以更改这些表的名称和列名称吗?如果我使用外部登录但没有所有这些信息,是否还需要这些表?

  3. 当我在执行时设置ID时,它可以工作。此外,显示通知后,它不会从数据库中删除,因此每次都会显示。我必须手动删除吗?

让我尝试阐明我的需求:

  • 每个登录到我的网站的用户都将订阅"NewAlert"

  • 我的API收到了"NewAlerts",因此API需要将该警报推送给所有订阅者。但是之后,我需要将实时通知发送给网站上的用户。我不知道如何通过Web API进行操作。

现在,在对网站实施身份验证后,它就可以正常工作了。但是我现在的问题是我的通知没有过期。每次发布通知时,我都会向客户显示AbpUserNotifications表上的所有通知。

通知何时过期?我的理解是,当我发布通知时,将在表AbpUserNotifications上创建一条记录,然后将其显示给客户端。但是,当我发布另一个通知时,它向我的客户显示了两个通知。我需要手动控制通知吗?

1 个答案:

答案 0 :(得分:1)

实时通知

  

我检查了_realTimeNotifier且UserId为null,但是IOnlineClientManager自动设置了一个用户,在哪里可以设置我的用户ID?

它是由身份验证(授权)系统从cookie或JWT令牌自动设置的。

永久性通知

  

要使用abp通知系统,我必须拥有abp框架创建的所有公用表吗? (abpUser,AbpTenant,AbpRoles,权限等)我也可以更改那些表名和列名吗?而且,如果我使用外部登录,则我没有所有信息,还需要那些表吗?

否,您不需要 all 表格。您可以实现自己的INotificationStore和服务。

使用存储库实现存储的零模块,创建并使用公用表。

External login确实在您的应用程序的租户中创建了一个用户。大多数应用程序就是这样工作的。

  

当我在执行时间设置ID时,在显示通知后,通知也没有从数据库中删除,因此每次显示时,我都必须手动删除吗?

     

在对站点实施身份验证之后,现在可以正常工作了,但是现在的问题是我的通知没有过期,每次发布通知时,都会向我的客户端显示AbpUserNotifications表上的通知。

     

通知何时过期?我的理解是,当我发布通知时,会在表AbpUserNotifications上创建一条记录,并向客户端显示这些记录,但是当我发布另一条通知时,则会向客户端显示两次通知。我需要手动控制通知吗?

通知不会过期。您应该将其标记为已读(类似于堆栈溢出)或删除它。