asp.net – SignalR,Owin和异常处理
我开发了一个基于ASP.NET 4.5& Owin,
我在IIS 7.5上托管了该应用程序 一切都正常,但是如何处理Owin中的异常? 考虑以下代码: [HubName("SampleHub")] public class SampleHub : Hub { public SampleHub() { throw new InvalidOperationException("?!"); } } 这个异常不会调用Application_Error(这是我的问题) 在哪里可以从owin获取所有异常,以便进行日志记录和调试 应用程序错误 ? 我对这样的东西不感兴趣 app.UseErrorPage(new ErrorPageOptions() { ShowCookies = true,ShowEnvironment = true,ShowExceptionDetails = true,ShowHeaders = true,ShowQuery = true,ShowSourceCode = true }); 这对于高级场景来说完全没有用,像asp.net web api& asp.net mvc 用于覆盖目的的OnException方法的动作过滤器要好得多. 提前致谢. 解决方法
如果要特别处理SignalR Hubs的异常处理,OWIN中间件不是要走的路.
为了说明一个原因,假设当在Hub方法中抛出异常时,SignalR正在使用它的WebSocket传输.在这种情况下,SignalR将不会关闭WebSocket连接.相反,SignalR将直接将一个JSON编码的消息写入套接字,以向客户端指出抛出异常.没有什么简单的方法可以使用OWIN中间件触发任何类型的事件,当这种情况发生在可能包装整个OWIN WebSocket Extension之前,我强烈建议反对. 幸运的是SignalR提供了自己的Hub Pipeline,非常适合您的场景. using System; using System.Diagnostics; using Microsoft.AspNet.SignalR.Hubs; public class MyErrorModule : HubPipelineModule { protected override void OnIncomingError(ExceptionContext exceptionContext,IHubIncomingInvokerContext invokerContext) { MethodDescriptor method = invokerContext.MethodDescriptor; Debug.WriteLine("{0}.{1}({2}) threw the following uncaught exception: {3}",method.Hub.Name,method.Name,String.Join(",",invokerContext.Args),exceptionContext.Error); } } 您可以使用ExceptionContext不仅仅是记录.例如,您可以将ExceptionContext.Error设置为不同的异常,这将更改客户端接收到的异常. 甚至可以通过将ExceptionContext.Error设置为null或通过设置ExceptonContext.Result来抑制异常.如果这样做,它将向客户端显示Hub方法返回您在ExceptonContext.Result中找到的值,而不是抛出. 一段时间之后,另一个关于如何为Hub方法抛出的每个异常调用单个客户端回调的另一个答案:SignalR exception logging? 还有HubPipelineModules的MSDN文档:http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hubs.hubpipelinemodule(v=vs.118).aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC Model绑定的简单应用
- asp.net-mvc-4 – 在IIS 7.5中注册.NET Framework 4.5
- ASP.NET在文本框中显示列表框中的选定项目
- ASP.NET – C#vs VB.NET – 间接差异和您最初可能不会考虑的
- asp.net-mvc-3 – 如何将ObjectResult转换为IQueryable?
- asp.net-mvc – 使用partialview时,HttpPostedFileBase始终
- ASP.net MVC中的自定义表单身份验证/授权方案
- .net – 如何使用SmtpClient.SendAsync发送带有附件的电子邮
- asp.net – 在谷歌地图和谷歌地球之间切换
- asp.net-mvc – 路由在Asp.net Mvc 4和Web Api
- ASP.NET MVC3:在客户端的$Ajax请求之后,Request
- asp.net-mvc – ASP MVC – 多对多的关系
- asp.net – 是否可以更改web.config而不会终止所
- asp.net – 访问在DelegatingHandler中执行的当前
- 甜甜圈缓存是否正常使用ASP.NET MVC?
- entity-framework – 如何升级EF Core Tools
- asp.net – 如何禁用viewstate的aspx页面?
- 折腾词库,一个词库互转程序
- asp.net – 如何使用linq从datetime列获取Date
- asp.net-mvc – “Inject”Request.Url.Hosts –