【问题标题】:ABP real-time notification system UserId is nullABP实时通知系统UserId为空
【发布时间】:2018-12-05 17:26:03
【问题描述】:

我正在尝试使用实时通知。我尝试了所有示例,但是当我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");
}

酒馆:

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 上创建一条记录,然后我会显示给客户。但是当我发布另一个通知时,它会向我的客户显示两个通知。我需要手动控制通知吗?

【问题讨论】:

    标签: c# .net notifications signalr aspnetboilerplate


    【解决方案1】:

    实时通知

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

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

    持续通知

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

    不,您不需要所有表。您可以实现自己的INotificationStore 和服务。

    模块零,它使用存储库实现存储,创建和使用公共表。

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

    当我在执行时设置我的ID时,在显示通知后,它并没有从数据库中删除,所以每次都显示,我必须手动删除?

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

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

    通知不会过期。您应该将其标记为已读(类似于 Stack Overflow)或将其删除。

    【讨论】:

      猜你喜欢
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      相关资源
      最近更新 更多