问题描述
我喜欢SignalR,目前正在其中做一些应用程序。由于SignalR是异步的,如果服务上发生逻辑错误,那么处理该错误的最佳实践是什么?
我一直在用错误对象调用客户端,并将其添加到可观察到的Reactive Extension中,但这似乎有点尴尬。
客户端是.Net Core和Blazor。
建议?
解决方法
如果服务上发生逻辑错误,SignalR是异步的,什么是处理该错误的最佳实践?
ASP.NET Core SignalR提供built-in diagnostics logging feature,可以帮助捕获和记录有用的传输以及与集线器相关的信息,从而可以帮助解决问题。
此外,从this doc,我们可以找到:
异常通常包含敏感信息,例如连接信息。因此,SignalR不会向客户端公开服务器上发生的异常的详细信息。但是,HubException的实例将发送到客户端。
如果要处理Hub方法中发生的逻辑错误,可以尝试将代码逻辑包装在try-catch块中,然后在日志中手动写入异常。
或者您可以使用指定的错误消息创建一个新的HubException
实例,客户端调用此中心方法会检测到该错误消息。
try
{
//code logic here
//...
//...
//Convert.ToDateTime("hello");
await Clients.All.SendAsync("ReceiveMessage",user,message);
}
catch (Exception ex)
{
throw new HubException(ex.Message);
}