quartz.net - SignalR Hub 发送消息但没有客户端收到它
问题描述
我有一个运行 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 方法正在向客户端发送消息。
添加 SignalR 并订阅来自集线器的消息的 JavaScript 代码:
// 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 处理程序未收到服务器端的任何内容。
有没有其他人设法做到这一点?
解决方案
我找到了解决方法。我让我的 Joblistener 与 api 控制器交互。控制器通过构造函数注入获取 hubcontext 并发送 msg..
推荐阅读
- python - 纸浆添加至少一个 LpAffineExpression 等于一个的约束
- python-3.x - 如何通过 raw_input() 打破 while 循环?蟒蛇 3
- php - 在 CodeIgniter 出错之前加载 Div css 样式
- javascript - 在Javascript中的正则表达式中提取文本
- javascript - 我正在使用 Javascript 创建口袋妖怪纸牌游戏,但不确定我是否以正确的方式进行
- google-sheets - 如何将带有 reCaptcha 的表单连接到 Google 电子表格
- r - 无法从 Github 安装 R 包 paRdot
- android - 如何从sqlite循环数组URL内的数据?
- php - 使用 php 函数制作表格但有一些问题
- wordpress - wordpress 所有结果在一页中没有分页