SignalR обработка исключений на клиенте
Есть некоторая логика, которая отключает клиента: отправляет с сервера сообщение на нужный клиент с message внутри о том, что именно пошло не так - клиент при получении этого сообщения отключается.
Выкидывать исключение на сервере будет не совсем правильно, поэтому я отправлю это исключение на клиент.
Логика отлова сообщения следующая:
Connection.On<string>("ExceptionConnection", async (message) =>
{
await Disconnect(new InvalidIPException(message));
});
public virtual async Task Disconnect(InvalidIPException? ex = default)
{
await Connection.StopAsync();
if (ex is not null)
throw ex;
}
Такой способ тоже не работает.
P.S. Вариант с исключением внутри Connection.On не подходит, т.к. насколько я понимаю, оно выкидывается в конкретно данной таске и единственный способ понять, что было исключение - дождаться gc коллектора
Connection.On<string>("ExceptionConnection", async (message) =>
{
await Disconnect();
throw new InvalidIPException(message);
});
Может есть какой-нибудь в SignalR обработчик исключений, позволяющий отлавливать их внутри?
UPD:
Попробовал ещё такой вариант - сообщение с исключением не показывается
public event Action<InvalidIPException>? ReceiveException;
public BaseService(Uri url)
{
Connection.On<string>("ExceptionConnection", async (message) =>
{
await Disconnect();
ReceiveException?.Invoke(new InvalidIPException(message));
});
ReceiveException += BaseService_ReceiveException;
}
private void BaseService_ReceiveException(InvalidLicenceModuleException ex) =>
throw ex;