我开发了一个基于ASP.NET 4.5和Owin的示例signalR应用程序,
我在IIS 7.5上托管了该应用程序
一切都很好,但我怎么能处理Owin的异常?
请考虑以下代码:
[HubName("SampleHub")]
public class SampleHub : Hub
{
public SampleHub()
{
throw new InvalidOperationException("?!");
}
}
Run Code Online (Sandbox Code Playgroud)
这个异常不会调用Application_Error(这是我的问题)
我在哪里可以获得owin的所有异常用于日志记录和调试目的
应用程序错误 ?
我对这样的事情不感兴趣:
app.UseErrorPage(new ErrorPageOptions()
{
ShowCookies = true,
ShowEnvironment = true,
ShowExceptionDetails = true,
ShowHeaders = true,
ShowQuery = true,
ShowSourceCode = true
});
Run Code Online (Sandbox Code Playgroud)
这对于高级场景来说完全没用,比如asp.net web api和asp.net mvc
用于覆盖目的的OnException方法的动作过滤器要好得多.
提前致谢.
上下文: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 …Run Code Online (Sandbox Code Playgroud)