在系统开发过程中,BUG和异常产生是无处不在的,但是需要我们去做的就是不断去发掘异常、修改异常。

这篇文章主要谈谈我在系统中解决异常的几种方法:

1.控制台程序产生的异常;

在大多数的控制台程序中,运用最多的就是

try{
Action(); 捕捉异常
}
catch(Exption e){ }

但是需要注意的就是在控制台运行中产生的线程和一些特殊异常try捕捉不到,就只有需要使用特定的方法进行捕捉和处理

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException)

2.web产生异常;

现在的web系统,分为webFrom和MVC。

webFrom也可以2种方式捕捉异常,一种采用上述的

try{
Action(); 捕捉异常
}
catch(Exption e){ }

第二种就是重写全局方法进行捕捉进行处理

public class Global : System.Web.HttpApplication
{
//处理
public void Application_Error(object sender, EventArgs e)
{
}
}

MVC处理的方式就是更加多样,不但可以用上述2种进行处理

还可以重写父类控制器方法捕捉异常进行处理

protected virtual void OnException(ExceptionContext filterContext);

还有就是MVC最新的IOC思想,添加一个Filter进行异常捕捉进行处理

public class ExceptionHandleFilter : ExceptionFilterAttribute
{
/// <summary>
/// 系统发生异常时执行
/// </summary>
/// <param name="actionExecutedContext"></param>
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
Action() //处理异常
}
}
//运用
[ExceptionHandleFilter]
public class ServiceForAppController : BaseApiController
{
}

3.接口异常;

接口的处理方式同web处理方式类似,但是需要注意的就是在提供接口的时候最好能够添加一个回调机制,便于反馈解决调用端是否出现调用出现的异常。

4.守护系统如何监控其他系统的异常;

1.这种异常主要运用于守护程序中使用,就是A程序监控B/C程序的运行情况,这种也有2种方式进行处理

第一种方法(推荐)

采用应用程序之间的通信通道进行.B/C生成出异常,就直接交于中间的队列进行处理,然后消费者从队列中取出数据进行后续处理,比如

RabbitMQ
MSMQ

第二种方法

调用windos系统自带的WIND32接口获取程序运行的句柄指针,判断其运行状态进行后续处理。

上述方法只是个人在工作中运用比较多的一些捕捉机制,然后搭配现在比较成熟的日志组件进行处理,更加方便高效。

Log4
NLog

C#之系统异常处理机制的更多相关文章

  1. 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装

    23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTIO ...

  2. 第23章 SEH结构化异常处理(1)_系统SEH机制

    23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障.陷阱和终止三类. (2)两种异常处理机制: ...

  3. 深入理解java异常处理机制

       异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...

  4. C++中的异常处理机制

    C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作 ...

  5. Java之异常处理机制

    来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...

  6. ASP.NET(C#)中的try catch异常处理机制

    在开发一个Umbraco平台系统的过程中,遇到了问题. 写的代码如下 fileUrl = MediaHelper.GetMediaUrl(Convert.ToInt32(publishedConten ...

  7. 深入理解java的异常处理机制

     JAVA异常的概念    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...

  8. java中的异常处理机制

    java异常处理机制 1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语 ...

  9. Java异常处理机制 —— 深入理解与开发应用

    本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exceptio ...

随机推荐

  1. android开发学习——day3

    关于android开发的详细过程了解 Android App程序的四种重要组成类型:1.Activity 2.Service 3.Content Provider 4.Broadcast Receiv ...

  2. python 爬取的数据要如何展现(可视化)?

    我是把数据放在 mongodb ,然后单独一个脚本作分析,导出 json ,用 c3.js 画图,然后随便写个很简单的页面就好了. 展示在这里: http://107.170.207.236/job_ ...

  3. Beautiful Soup 定位指南

    Reference: http://blog.csdn.net/abclixu123/article/details/38502993 网页中有用的信息通常存在于网页中的文本或各种不同标签的属性值,为 ...

  4. Hibernate的一些事儿

    一.Hibernate的工作原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...

  5. wukong搜索引擎源码解读

    转自:https://ayende.com/blog/171745/code-reading-wukong-full-text-search-engine I like reading code, a ...

  6. 用JS添加文本框案例代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 关于自己封装Web前端框架的思考和探索

    一.引言 首先这些年关于前端技术层出不穷,从最早的只用js做简单验证,到现在发现好像大前端已经无所不能了的感觉.特别是为了降低前端开发复杂度,涌现了一大批 的MVC/MVVM模式的前端框架,不停了刷新 ...

  8. 如何在asp.net页面使用css和js

    一.如何在asp.net页面中使用css1.可以直接写在需要样式控制的控件里 例如:<div style="border:#ff6100 1px solid">< ...

  9. oracle与sqlserver利用函数生成年月日加流水号

    最近在做oracle相关的项目,刚接触oracle,与sqlserver语法上还是有区别的 sqlserver : 示例:FX+当前年月日+00001 如下图流水号实力所示 原理: 首先 'FX'是固 ...

  10. IOS解析XML

    XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱.iOS SDK本身就带有两种不同 ...