Sim*_*mon 8 c# asp.net signalr signalr-hub asp.net-core-2.1
上下文:ASP.NET SignalR和ASP.NET Core SignalR之间有区别,您可以在此处阅读。
如本ASP.NET SignalR中的stackoverflow文章所述,您可以通过HubPipelineModuleASP.NET Core SignalR中不存在的异常在服务器端捕获未处理的异常。
我们如何捕获未处理的异常并将其传递给ASP.NET Core SignalR中的客户端?
JavaScript代码(客户端):
var hub = null;
var initWebSocket = function () {
hub = new signalR.HubConnectionBuilder().withUrl("/MyHub").build();
hub.on("ReceiveMessage", function (pMessage) {
[...]
});
hub.start().catch(function (err) {
return console.error(err.toString());
});
};
var executeWebsocketTestException = function () {
// send to server
hub.invoke("TestException").catch(function (exception) {
if(exception.type)
{
...
}
});
};
Run Code Online (Sandbox Code Playgroud)
ASP.NET Core 2集线器(服务器):
public class MyHub : Hub
{
public async Task TestException()
{
throw new SignalRTest.Exceptions.TestException("This is a Websocket Test Exception.");
}
}
Run Code Online (Sandbox Code Playgroud)
我不能,我不知道直接复制
但是您可以使用此 hack 发送异常
为简单起见,我没有使用自定义 Hub 类,但您可以。
或者您可以使用将其移动到独立方法
public class MyHub : Hub
{
public void test_exception()
{
try
{
var x = 0;
var d = 1 / x;
}
catch (Exception ex)
{
// log or extra
Clients.Caller.SendAsync("handle_exception", ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/MyHub").build();
connection.start();
connection.on("handle_exception", function (err) {
if (err.ClassName === "System.DivideByZeroException") {
alert("You need to take a math class ");
}
});
document.getElementById("test_btn")
.addEventListener("click", function (event) {
connection.invoke("test_exception");
event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
@page
<p/><p/>
<input type="button" id="testExceptionButton" value="TestException" />
<script src="~/lib/signalr/dist/browser/signalr.js"></script>
<script src="~/js/app1.js"></script>
Run Code Online (Sandbox Code Playgroud)
您可以添加全局服务器端日志记录
ASP.NET Core SignalR 中的日志记录和诊断 | 微软文档
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.
AddFilter(
"Microsoft.AspNetCore.SignalR",
LogLevel.Debug);
logging.
AddFilter(
"Microsoft.AspNetCore.Http.Connections",
LogLevel.Debug);
})
.UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |