Я использую транзакцию в моем коде C#. В TransactionScope я регистрирую почти все, чтобы убедиться, что все сделано в тестировании. Но если что-то происходит в транзакции, и оно идет, чтобы поймать мой класс журнала, ничего не пишет. В localhost я меняю TransactionScopeOption на «Подавить», потому что базы данных не на моем сервере. Когда я отлаживаю все в порядке, я могу записать в файл журнала. Но когда я перехожу на «Обязательный», если он дал ошибку, он отменил все как обычно, но также не может записать первый журнал. Как я могу это исправить?try/catch в TransactionScope в C#
Мой пример кода:
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 все нормально. Завершить() он также не может записывать в журнал. – Kadir
Это звучит как проблема с протоколированием. Что такое «LogProcess»? Я не знаком с ним. Работает ли он в другом месте вашего приложения? –