【问题标题】:SignalR Hub sending message but no clients receive itSignalR Hub 发送消息但没有客户端收到它
【发布时间】:2019-08-15 06:47:21
【问题描述】:

我有一个运行 QuartzNet 调度程序的 aspnetcore Mvc 网站。 调度程序有侦听器,当作业正在执行并已执行时会触发这些侦听器。侦听器使用 MediatR 发布消息,然后由名为 JobListenerEventsDispatcher 的类处理。

该类在构造函数中注入了 IServiceProvider 以获取 SignalR 集线器。

服务器端运行aspnetcore 2.2 QuartzScheduler 和 MediatR 都是最新版本。

Startup ConfigureServices 中的代码将 MediatR 服务添加到 ServiceCollection:

services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly);

QuartzNet JobListener 中发布 MediatR 消息的代码:

private async Task SendJobMessage(IJobExecutionContext model,CancellationToken cancellationToken)
{
    try
    {
        await _service.Publish(new JobListenerEvent { JobContext = model }, cancellationToken);
    }
    catch (Exception)
    {
         // ignored
    }
}

调度程序中的代码从 JobListener 接收消息:

public async Task Handle(JobListenerEvent notification, CancellationToken cancellationToken)
{
    var context = _services.GetRequiredService<IHubContext<SchedulerHub>>();
    await context.Clients.All.SendAsync("jobMessage", notification, cancellationToken);
}

到目前为止,它运行良好,Handle 方法正在向客户端发送消息。

JavaScript 代码添加 SignalR 并订阅来自中心的消息:

    // SignalR actions
    var connection = new signalR.HubConnectionBuilder()
        .withUrl('/scheduler-hub')
        .configureLogging(signalR.LogLevel.None)
        .build();

    connection.on('jobMessage', function (model) {
        logToConsole("jobMessage", model);
        loadCurrentExecutingJobs();
    });

连接已建立,但 jobMessage 处理程序未收到服务器端的任何内容。

有其他人设法做到这一点吗?

【问题讨论】:

    标签: quartz.net asp.net-core-signalr mediatr


    【解决方案1】:

    我找到了解决方法。 我让我的 Joblistener 与 api 控制器交互。 控制器通过构造函数注入获得了 hubcontext 并发送了 msg..

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 2013-05-21
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多