У меня есть поток приложений, в котором:
- Clientside Javascript запускает signalR Hub
- Асинхронный вызов выполняется для длительной работы
- После завершения операции JavaScript на стороне клиентауведомляется signalR
Я предполагал, что это будет просто:
Сторона сервера:
public async void SendMessage()
{
await Task.Delay(1000);
Clients.All.SendAsync("ReceiveMessage");
}
Сторона клиента:
var hub = new signalR.HubConnectionBuilder().withUrl('/disposeBugHub').build();
this.hub.on("ReceiveMessage", function () {
alert('Message Received');
});
this.hub.start()
.then(function () {
hub.invoke("SendMessage");
})
.catch(function (err) {
return console.error(err.toString());
});
Однако Clients.All.SendAsync («ReceiveMessage»);Вызов всегда генерирует исключение System.ObjectDisposedException: «Не удается получить доступ к удаленному объекту».Исключение.
Похоже, что это ожидаемое поведение, а не ошибка, поэтому мой вопрос заключается в том, как программно достичь желаемого рабочего процесса?Я предполагаю, что должен быть хорошо известный способ добиться этого, но я не могу найти его в Интернете.