我在我的C#代碼中使用事務。在TransactionScope中,我幾乎記錄了所有內容,以確保所有內容都在測試中完成。但是如果在事務中發生什麼事情,並且它會去捕捉我的日誌類不寫任何東西。在本地主機上,我將TransactionScopeOption更改爲「Suppress」,因爲數據庫不在我的服務器中。當我在調試時一切正常,我可以寫入日誌文件。但是當我更改爲「必需」,如果它給出錯誤,它會像往常一樣取消所有內容,但它也不能寫入第一個日誌。 我該如何解決這個問題?在C#中的TransactionScope嘗試/捕獲#
我的代碼示例:
所有的TransactionOptions tr = new TransactionOptions();
tr.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, tr, System.Transactions.EnterpriseServicesInteropOption.Automatic))//System.TimeSpan.MaxValue))
{
bool status = false;
// this log must be written anyway but it won't when it gives an error.
LogProcess log = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction begun.");
try
{
// process 1
// process 2
.
.
.
if(status)
{
LogProcess log1 = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction will complete soon.");
scope.Complete();
LogProcess log1 = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction completed.");
}
else
{
LogProcess log2 = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction will dispose.");
scope.Dispose();
LogProcess log2 = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction disposed.");
}
}
catch(Exception ex)
{
LogProcess log1 = new LogProcess(Ssession["DBNAME"], new Guid(), "Transaction exception. Error: " + ex.Message);
scope.Dispose();
}
}
日誌是否寫入數據庫?如果是的話,那就是你的問題。當出現錯誤時,日誌也正在回滾。您需要將日誌包裝到另一個事務中,或者將日誌記錄到其他地方,如文本文件。 – tucaz
@tucaz謝謝,你是對的。但即使在scope.Complete()之後一切都可以,但它也不能寫入日誌。 – Kadir
這聽起來像是日誌記錄的問題。什麼是「LogProcess」?我不熟悉它。它在你的應用程序的其他地方工作嗎 –