Я создаю веб-сайт с использованием ASP.NET Core 2.2 и SignalR.
Основное использование SignalR - отправка уведомлений при отправке пожертвований.У меня есть запланированное задание под управлением Quartz.net, которое отправляет уведомление с последними пожертвованиями.
В запланированном задании я внедряю экземпляр IServiceScopeFactory
и использую его для создания IHubContext<CampaignHub>
следующим образом (нерелевантный код опущен для ясности) ...
public class DonationsNotifierJob : IJob {
private readonly IServiceScopeFactory _scopeFactory;
public DonationsNotifierJob(IServiceScopeFactory scopeFactory) =>
_scopeFactory = scopeFactory;
public async Task Execute(IJobExecutionContext context) {
using (IServiceScope scope = _scopeFactory.CreateScope()) {
IHubContext<CampaignHub> hubContext = scope.ServiceProvider
.GetRequiredService<IHubContext<CampaignHub>>();
await hubContext.Clients.All
.SendAsync("UpdatedCampaignData", new LiveCampaignData {
// Data loaded here...
});
}
}
}
Бритва для одной из страниц, которая должна собирать уведомления, включает в себя следующий JavaScript ...
var connection = new signalR.HubConnectionBuilder()
.withUrl("/campaignHub")
.build();
connection.start();
connection.on("UpdatedCampaignData", function(d) {
// Code omitted for clarity
});
Thisработает нормально, когда я работаю в Visual Studio (2017 Enterprise), но когда я развертываю сайт на тестовом сервере, страница, содержащая JavaScript выше, никогда не получает уведомления.
Я пытался добавить обычный "чат"Комнатный код, который вы видите в примерах, и он работал нормально, поэтому SignalR работает в некоторой степени.Мало того, но одна из страниц, которая отправляет уведомление SignalR напрямую (с использованием того же метода хаба, как показано выше), работает нормально, поэтому, похоже, это проблема только в запланированном задании.
Внедрениеработает нормально, так как я не получаю никаких исключений нулевой ссылки.
Я действительно понятия не имею, как начать отладку этого.В обоих случаях выполняется один и тот же код, и из журнала видно, что вызывается строка в запланированном задании, куда отправляется уведомление, но я понятия не имею, что с ним происходит.Я не нашел способа узнать, отправляется ли уведомление или отправляется ли оно, но целевая страница не получает его.
Любой, кто может дать мне представление о том, как явыяснить, что происходит не так?Извините, если здесь недостаточно информации, но я не знаю, что еще вам сказать.
Спасибо