簡體   English   中英

asp.net 中的異常處理

[英]Exception handling in asp.net

只是嘗試使用企業庫 4.0 處理異常處理塊。 我的應用程序是具有 DAL、BLL 和 UI 的 asp.net 應用程序。

當發生異常時,我想記錄相關的場景/上下文,其中包括 DAL(sp、params、異常)、BLL(用戶、角色等)和 UI(會話內容)。 現在我想我需要用字典創建一個自定義異常。 當 DAL 中發生異常時,我會在異常冒出時在每一層使用相關數據填充字典。 最后,我將它記錄在 App_Error ..

web 上的示例建議將其記錄在 DAL 本身,然后進行傳播。 我們如何處理 BLL、UI 層的這種傳播異常? 這是否意味着,它與保存上下文相同,但每一層本身都會記錄相關數據。 然后在日志中,我們需要關聯每一層的日志語句以創建上下文。

請建議...

在我實施的所有具有這種性質的解決方案中,常識通常要求您簡單地從 DAL 報告錯誤。

通過以事務方式執行任何數據庫更改,您將確保執行回滾並用您自己的異常包裹實際異常,該異常表明發生了內部異常,因此沒有進行任何更改。

然后在 BLL 中捕獲異常,然后將其作為調用應用程序的自定義“BusinessProcessException”進一步拋出。 可選的 BLL 因為它在自己的“盒子”中,可以說有時有自己的日志機制來記錄與業務流程相關的異常。

無論是否在 BLL 層記錄它,您仍然需要通知 UI 層(客戶端應用程序)發生了異常並已記錄並傳回完整的異常樹。

UI 層中的客戶端應用程序代碼可能有自己的日志,但這不會是 BLL 使用的日志。

事件周期是這樣的......

應用程序調用 bll 方法 bll 方法調用 dal 方法 dal 方法在 db 上調用存儲過程 存儲過程錯誤拋出(例如)sql 異常 dal 拋出帶有 sqlexception 的新 dal 異常,因為內部 bll 處理 dal 異常並記錄 dal 失敗,如果有一些事務元素bll 方法被調用,bll 回滾其他調用。 bll 拋出新的 bll 框架異常內部是 dal 異常應用程序處理 bll 異常並決定如何從完整的異常樹中繼續用戶體驗。

這幾乎就是所有 .net 的工作原理。

注意事項:

如果我的業務 object 更新調用失敗,則該業務 object 可能有幾個子對象作為該調用的一部分進行更新。 這些子對象可以從不同服務器上的多個 dal 端點組裝,每個 dal 端點可能必須更新可能幾個數據庫中的多個記錄

因此,對於 bll 邏輯,您有一個事務,每個 dal 調用內部工作有 1 個事務,然后在每個存儲的 proc 調用中可能有 1 個事務。

.net 在后台所做的是以這樣的方式堆棧這些,如果 bll 級別的事務失敗並調用回滾,它應該回滾所有子事務,但是在事務跨越系統和通常網絡的現實世界中,這可能不是可能的。

因此,您必須假設您采取的操作可能會失敗,並且如果層次結構的任何部分失敗並且進行調用的代碼對此負責,則可以回滾。

這最終意味着您需要對所發生的事情進行完整的審計跟蹤。 作為一個 bll 開發人員,我無論如何都會記錄我的框架所做的一切,sql 也有事務日志,因此在這方面簡化了許多 dal 實現。

應用程序只有(對於 asp.net)服務器日志或自定義選項。

我唯一推薦的是每一層都記錄自己的活動並且日志是分開的(例如,與 ui 相關的錯誤實際上並不屬於 bll 日志)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM