如何使用 SignalR 附加调用完成时的错误?
How to attach error in invocation completion with SignalR?
我在 .NET 中有一个 SignalR 实现,带有一个自定义 IHubProtocol
,它只使用 JsonHubProtocol
.
我注意到我的 SignalR 服务器发送类型为 CompletionMessage
的消息以及调用 ID 以及其他有用的属性,例如 Error
以指示是否存在错误,并且HasResult
.
如何在调用发生时“抛出”错误,以便 Error
属性 包含此错误,以便客户端可以正确处理?
经过多次试错,我发现记录我所有调用的 LogFilter
也捕获所有异常并将它们记录为错误,这阻止了 SignalR 错误传播机制的正常工作。为了解决这个问题,我 re-threw 捕获并记录了异常。
这终于给了我客户端错误。但是,我仍然不知道它们是什么错误。要解决此问题,您必须启用一个选项以在将 SignalR 添加到您的应用程序服务时提供详细的错误,如下所示:
services.AddSignalR(o =>
{
// Provide detailed error messages only for non-production environments.
o.EnableDetailedErrors = !HostEnvironment.IsProduction();
});
详细错误和 non-detailed 错误之间的区别——这部分在任何地方都没有正确记录——详细错误会给你异常类型和消息。
我在 .NET 中有一个 SignalR 实现,带有一个自定义 IHubProtocol
,它只使用 JsonHubProtocol
.
我注意到我的 SignalR 服务器发送类型为 CompletionMessage
的消息以及调用 ID 以及其他有用的属性,例如 Error
以指示是否存在错误,并且HasResult
.
如何在调用发生时“抛出”错误,以便 Error
属性 包含此错误,以便客户端可以正确处理?
经过多次试错,我发现记录我所有调用的 LogFilter
也捕获所有异常并将它们记录为错误,这阻止了 SignalR 错误传播机制的正常工作。为了解决这个问题,我 re-threw 捕获并记录了异常。
这终于给了我客户端错误。但是,我仍然不知道它们是什么错误。要解决此问题,您必须启用一个选项以在将 SignalR 添加到您的应用程序服务时提供详细的错误,如下所示:
services.AddSignalR(o =>
{
// Provide detailed error messages only for non-production environments.
o.EnableDetailedErrors = !HostEnvironment.IsProduction();
});
详细错误和 non-detailed 错误之间的区别——这部分在任何地方都没有正确记录——详细错误会给你异常类型和消息。