如何使用 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 错误之间的区别——这部分在任何地方都没有正确记录——详细错误会给你异常类型和消息。