Tag: error handling

Global.asax魔术function

在Visual Studio中创建ASP.NET Mvc项目时,将创建Global.asax和Global.asax.cs 。 在此.cs文件中,您将找到标准的Application_Start方法。 我的问题如下,如何调用此函数? 因为它不是覆盖。 所以我的猜测是这个方法名称是按照惯例。 Application_Error方法也是如此。 我想知道这些方法的钩子在哪里。 因为我编写这些方法(不覆盖它们),我在MSDN中找不到任何关于它们的文档。 (我找到了这个页面,但它只是告诉你挂钩Error事件并显示一个Application_Error(object sender, EventArgs e)但不显示事件和方法是如何链接的。) //Magicly called at startup protected void Application_Start() { //Omitted } //Magicly linked with the Error event protected void Application_Error(object sender, EventArgs e) { //Omitted }

如何在Windows窗体应用程序中创建全局error handling程序?

我认为有一个组件允许创建全局error handling。 例如,当发生不良事件时,我自己会抛出exception throw new ArgumentNullException(“playlist is empty”); 我如何在全球范围内捕获它?

如何在托管C ++中捕获非托管C ++exception

我正在一个大型非托管C ++库和一个大型C#库上开发一个瘦托管C ++包装器。 我需要捕获源自大型非托管C ++库的错误,并将它们重新抛出为Clrexception。 非托管库抛出以下类的实例: Error::Error(const std::string& file, long line, const std::string& function, const std::string& message) { message_ = boost::shared_ptr(new std::string( format(file, line, function, message))); } const char* Error::what() const throw () { return message_->c_str(); } 到目前为止,我已经想出了这个: try{ // invoke some unmanaged code } catch(Object*) { throw gcnew System::Exception(“something bad happened”); } 如何从Error类中提取消息并将其转换为Clr String类,以便我可以将它传递给gcnew […]

ASP.NET MVC全局error handling

我有一个自定义HandleError属性来处理MVC管道上的错误; 我的Global.asax上有一个protected void Application_Error(object sender, EventArgs e)方法,它处理来自管道外部的错误。 我遇到过一个我不知道可能的情景; 在实现DI时,对于connectionString有一个依赖connectionString ,它取自应用程序配置文件。 由于连接字符串尚不存在,因此在创建控制器时会出现错误,这通常会使Application_Error处理程序触发,并呈现正确的错误页面(通过将部分视图呈现为字符串并将其作为响应发送,并在如果失败,只需将“致命exception”写入响应。 除了在这种情况下,我得到了虚假的默认ASP.NET“运行时错误”黄色死亡屏幕。 告诉我: 运行时错误 说明:服务器上发生应用程序错误。 此应用程序的当前自定义错误设置可防止查看应用程序错误的详细信息。 详细信息:要在本地服务器计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的“web.config”配置文件中创建标记。 然后,此标记应将其“mode”属性设置为“RemoteOnly”。 要使详细信息可在远程计算机上查看,请将“mode”设置为“Off”。 我的customErrors中没有设置defaultRedirect ,也没有Off ,因为我不想重定向,而是在用户所在的同一页面上呈现错误,避免了不必要的重定向。 我该如何处理这样的场景? 甚至是什么原因导致它以这种方式运行而不像控制器之外的任何其他错误? 我意识到它不太可能经常发生,但我希望能够阻止YSOD(部分原因是因为我想隐藏我正在使用的技术,但主要是因为它不是很漂亮,也不是用户友好的) 我甚至尝试为UnhandledExceptions注册一个处理程序,但它也没有触发。 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 最终产生这个的代码是: return ConfigurationManager.ConnectionStrings[key].ConnectionString; ,其中ConnectionStrings[key]为null 。 更新 这是应用程序错误的处理方式: protected void Application_Error(object sender, EventArgs e) { this.HandleApplicationError(new ResourceController()); } public static void HandleApplicationError(this HttpApplication application, BaseController controller) { […]

WPF应用程序的exception报告

所以假设我碰巧在我的应用程序中有一个未处理的exception,或者由于某种原因它崩溃了。 有什么方法可以捕获输出并在应用程序崩溃时显示错误报告对话框。 我在想的是在后台运行一个小程序,其唯一的工作就是监听主应用程序的exception退出,然后显示“报告”对话框,用户可以选择通过电子邮件向我发送错误输出。 不确定如何实现这一点,或者这是否是正确的方法。 报告错误消息将是一项简单的任务,但我不知道如何捕获未处理exception的输出或获取退出代码(我假设程序在崩溃时会给出除0以外的退出代码)。 在正确的方向上轻推是很棒的。

如何使用EasyNetQ / RabbitMQ进行error handling

我正在使用带有EasyNetQ库的C#中的RabbitMQ。 我在这里使用了pub / sub模式。 我仍然有一些问题希望有人可以帮助我: 在消费消息时出现错误时,它会自动移至错误队列。 如何实现重试(以便将其放回原始队列,当它无法处理X次时,它会移动到死信队列)? 据我所知,总有1个错误队列用于转储来自所有其他队列的消息。 如何为每种类型设置1个错误队列,以便每个队列都有自己的关联错误队列? 如何轻松重试错误队列中的消息? 我试过Hosepipe,但它只是将消息重新发布到错误队列而不是原始队列。 我不喜欢这个选项,因为我不想在控制台中摆弄。 我最好只针对错误队列进行编程。 任何人?

如何使用库存标准ASP.NET MVC3网站获得自定义404和500错误页面?

我试图在一个库存样本ASP.NET MVC3网站上有2个自定义错误页面。 Darin Dimitrov在这里有一个很好的答案,但它并不适用于我所有的测试条件。 然后广泛流行如何在ASP.NET MVC中正确处理404? 发布..但这只是触及404错误。 有人可以解释一下 路线 web.config设置 控制器/动作方法 要做这个非常简单的事情:( 接受这个答案的场景: VS2010 – >文件 – >新建 – > ASP.NET MVC3项目/ Internet应用程序 (右键单击解决方案).. – >使用IIS Express 错误页面不能是静态html页面。 它们必须是一个我可以传递信息的页面,就像任何其他视图一样(例如,一个ErrorController )…… 并为测试路线…… /Home/Index – >显示索引页面 /Home – >显示索引页面 / – >显示索引页面 /Home/About – >显示关于页面 /asdasd/asdsad/asdas/asddasd/adsad – > 404 /adsa/asda/asd/asd/asd/asd – > 404 /asdsadasda – > 404 […]

如何在不重置堆栈跟踪的情况下抛出exception?

这是一个后续问题, “throw”和“throw ex”之间有区别吗? 有没有办法提取新的error handling方法而不重置堆栈跟踪? [编辑]我将尝试“内部方法”和Earwicker提供的另一个答案 ,看看哪个可以更好地标记答案。

用户代码未处理来自Dll get Exception的C#User Definedexception处理

我正在使用动态c#应用程序,它将所有类从我单独创建的Dll文件链接到主应用程序,在这些文件中,当我动态连接我的dll文件时,error handling程序希望通过连接抛出错误,因为它曾经是这是我尝试做的事情 我有一个dll文件,上面有这个编码和类 class clsGlobles { public object dlststus = false; // dtabase file status public clsGlobles() { try { if (dlststus == true) { } else { throw new Exception(“Some important files are missing – Please re-install the application”); //throw this as a error and stop running the program } } catch (Exception ex) […]

如何让UI线程等待信号量,但处理其他调度程序请求? (就像MessageBox.Show本身一样)

通常,当UI线程调用MessageBox.Show()类的东西时,当前代码执行不会继续,直到用户单击OK,但程序将继续运行在UI线程上调度的其他代码。 在这个问题中 ,我遇到了一个问题,就是在一次调用UI线程上调度了太多的委托。 我想在继续执行之前暂停某些点。 在我的新error handling程序中,我使用信号量来确保一次只处理一个错误。 我发送一个MessageBox来提醒用户,当他们点击“确定”时,我释放信号量,允许处理下一个错误。 问题是它没有按预期运行。 如果同时发生两次对HandleError的调度调用,则第一次调用MessageBox.Show,第二次调用UI线程。 奇怪的是,对MessageBox.Show()的调度调用永远不会被执行 – 整个应用程序只是挂起 – 所以当用户单击“确定”时应该释放的信号量被永久锁定。 这个解决方案缺少什么? private static ConcurrentDictionary QueuedErrors = new ConcurrentDictionary(); private static Semaphore Lock_HandleError = new Semaphore(1, 1); //Only one Error can be processed at a time private static void ErrorHandled(Exception ex) { DateTime value; QueuedErrors.TryRemove(ex, out value); Lock_HandleError.Release(); } private static bool […]