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

Enterprise Library 實戰系列(十二):異常處理應用程式區塊——進階篇

     編輯:關於.NET

一、將異常資訊記錄至資料庫

1. 建立資料庫環境

使用區塊內建 SQL 腳本(路徑:C:\Program Files\Microsoft Enterprise Library\src\Logging\Sinks\Database\Scripts),執行 CreateLoggingDatabase.cmd 建立資料庫、資料表與預存程序 WriteLog。

2. 組態設定 Database Sink

Database Sink 設定

關鍵:StoredProcName 設為 WriteLog。

3. 建立 Category 並關聯 Sink

新增 Category 命名為 DataException,Sink 指向 Database Sink。

4. 設定 Logging Handler

Logging Handler 設定

將 LogCategory 設為 DataException。程式碼無需修改,體現組態驅動優勢。

5. 程式碼呼叫

private void btn_Log_Click(object sender, System.EventArgs e)
{
    try { throw new Exception(); }
    catch (Exception ex)
    {
        bool Flag = ExceptionPolicy.HandleException(ex, "Log Policy");
        if (Flag) throw;
    }
}

注意:專案需參考 Microsoft.Practices.EnterpriseLibrary.Logging.Sinks.Database.dll。

二、異常傳播機制

  • 自動傳播:不攔截,直接往上拋
  • 同層捕獲再拋出:catch { throw; } 保留堆疊
  • 捕獲、包裝、拋出新異常:隱藏敏感資訊(推薦)

區塊提供後處理動作:

  • None:不重拋
  • NotifyRethrow:建議呼叫端重拋
  • ThrowNewException:拋出最終異常(不一定是原始異常)

三、異常格式化

  • TextExceptionFormatter:純文字格式,適合螢幕/記錄檔顯示
  • XMLExceptionFormatter:XML 格式,每個屬性對應一個元素

自訂 TextExceptionFormatter 範例

public class AppTextExceptionFormatter : TextExceptionFormatter
{
    public AppTextExceptionFormatter(TextWriter writer, Exception exception) 
        : base(writer, exception) { }

    protected override void WriteDescription()
    {
        string line = String.Format("An exception of type {0} occurred and was caught.", 
            base.Exception.GetType().FullName);
        this.Writer.WriteLine(line);
    }

    protected override void WriteExceptionType(Type exceptionType)
    {
        base.Indent();
        base.Writer.WriteLine("Type : {0}", exceptionType.FullName);
    }

    public override void Format()
    {
        this.WriteDescription();
        base.WriteMessage(base.Exception.Message);
    }
}

四、建立自訂異常處理器

繼承抽象類別 ExceptionHandler(實作 IExceptionHandler、繼承 ConfigurationProvider)。

自訂處理器範例:顯示錯誤對話框

public class AppMessageExceptionHandler : ExceptionHandler
{
    public override void Initialize(ConfigurationView configurationView) { }

    public override Exception HandleException(Exception exception, string policyName, Guid correlationID)
    {
        DialogResult result = this.ShowThreadExceptionDialog(exception);
        if (result == DialogResult.Abort) Application.Exit();
        return exception;
    }

    private DialogResult ShowThreadExceptionDialog(Exception e)
    {
        string errorMsg = e.Message + Environment.NewLine + Environment.NewLine;
        return MessageBox.Show(errorMsg, "Application Error", 
            MessageBoxButtons.OK, MessageBoxIcon.Stop);
    }
}

結語

異常處理進階篇涵蓋資料庫記錄、傳播策略、格式化客製化與自訂處理器開發,展現區塊的靈活擴展能力。

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