首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Enterprise Library 實戰系列(十一):異常處理應用程式區塊——入門篇

     編輯:關於.NET

一、概述

異常處理應用程式區塊讓開發人員與決策者能針對企業應用架構各層的異常建立一致處理策略,特色:

  • 支援跨架構層的異常處理,不限於服務介面
  • 策略可由管理層定義維護,無需修改程式碼
  • 內建記錄、替換、包裝三種處理器
  • 支援串聯多個處理器形成處理鏈
  • 可開發自訂處理器
  • 統一呼叫介面 ExceptionPolicy.HandleException

二、核心概念

策略
定義一組異常類型的攔截與處理方式;一個應用程式可有多個策略
異常類型
繼承自 System.Exception 的類型;每個類型可掛載多個處理器
處理器
處理方式:記錄、包裝、替換;可修改原始異常、傳遞資訊給下一個處理器

三、建立範例程式

1. 定義自訂包裝異常類別

[Serializable]
public class ExceptionHelper : ApplicationException
{
    public ExceptionHelper() : base() { }
    public ExceptionHelper(string message) : base(message) { }
    public ExceptionHelper(string message, Exception inner) : base(message, inner) { }
    protected ExceptionHelper(SerializationInfo info, StreamingContext context) : base(info, context) { }
}

2. 組態工具建立策略與處理器

  • 新增 Exception Handling Application Block
  • 建立策略 Wrap Policy、Replace Policy、Log Policy
  • 各策略加入對應異常類型與處理器(Wrap/Replace/Logging Handler)
  • Log Policy 需相依 Logging Application Block

新增區塊 建立策略 策略命名 異常類型 Wrap Handler 設定

3. 複製組態檔至輸出目錄

copy "$(ProjectDir)\*.config" "$(TargetDir)"

4. 程式碼呼叫

// 包裝策略
private void btn_Wrap_Click(object sender, EventArgs e)
{
    try { throw new Exception(); }
    catch (DllNotFoundException ex) { Handle("Wrap Policy", ex); }
    catch (Exception ex) { Handle("Wrap Policy", ex); }
}

// 替換策略
private void btn_Replace_Click(object sender, EventArgs e)
{
    try { throw new Exception(); }
    catch (Exception ex) { Handle("Replace Policy", ex); }
}

// 記錄策略
private void btn_Log_Click(object sender, EventArgs e)
{
    try { throw new Exception(); }
    catch (Exception ex) { Handle("Log Policy", ex); }
}

private void Handle(string policy, Exception ex)
{
    bool flag = ExceptionPolicy.HandleException(ex, policy);
    if (flag) throw;
}

5. 執行並查看事件檢視器記錄

事件檢視器

結語

異常處理區塊相對簡單,入門篇介紹三大基本策略的建立與使用。進階篇將深入資料庫記錄、傳播機制、格式化與自訂處理器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved