У меня есть приложение asp.net MVC, которое работает около недели, а сегодня начало получать эту ошибку.
Работает в .net 4.0, Win 2K8 R2 общается с SQL Server 2K8 в Win 2K8 R2.
На всех серверах работает MS DTC.
Я делаю простое создание членства в aspnet, затем создаю дополнительные данные в моей собственной таблице пользователей внутри области действия.
Похоже, что как только один человек совершает ошибку, каждый получает ее, пытаясь после этого создать учетную запись. Другие функции базы данных работают.
Вот трассировка стека:
System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.Transactions.TransactionPromotionException: Failure while attempting to promote transaction. ---> System.Data.SqlClient.SqlException: The PROMOTE TRANSACTION request failed because there is no local transaction active.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
...
at System.Data.SqlClient.SqlConnection.Open()
at Elmah.SqlErrorLog.Log(Error error) in c:\builds\ELMAH\src\Elmah\SqlErrorLog.cs:line 158
at KeyesTechnology.DemandLaunch.BusinessEntities.LoginAccount.CreateAccount() in c:\Products\DemandLaunch\Staging\KeyesTechnology\DemandLaunch\BusinessEntities \LoginAccount.cs:line 141
at www.ViewModels.CreateAccountViewModel.Process() in c:\Products\DemandLaunch\Staging\mvc\www\ViewModels\CreateAccountViewModel.cs:line 89
at www.Controllers.AccountController.Create(CreateAccountViewModel model, String returnUrl) in c:\Products\DemandLaunch\Staging\mvc\www\Controllers\AccountController.cs:line 85
at lambda_method(Closure , ControllerBase , Object[] )
Код:
using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
{
try
{
//Create ASP.NET Membership User
if (success)
{
//Create Domain Specific User Object
// Forms Authenication call
}
else
{
throw Exception();
}
//Send Welcome Email
//Subscribe to Email List
scope.Complete();
}
catch(Exception exc)
{
Elmah.Error error = new Elmah.Error(exc, HttpContext.Current);
Elmah.ErrorLog log = Elmah.ErrorLog.GetDefault(HttpContext.Current);
log.Log(error); //Error throws on this line
result = false;
}
}
Я выяснил, что у меня последний улов, пишущий в ELMAH, основанный на SQL
и это после завершения объема, поэтому он никогда не будет работать. Я исправил эту ошибку, но
это не говорит мне, почему происходит ошибка.
Для тестирования я бросил исключения прямо перед и после оператора scope.Complete ()
Я сделал преднамеренную ошибку непосредственно перед областью действия. Complete (). Я не получаю ошибки на странице и не регистрируется ошибка ELMAH.
Я сделал преднамеренную ошибку сразу после scope.Complete (). Я получаю область уже завершена ошибка в окончательном улове, то.
Я не смог понять, что может заставить ПРОДВИНУТЬСЯ попытаться произойти и почему это произойдет, если это так.
Сайт работал нормально в течение 10 дней, затем мы получаем эту ошибку, и каждый потом получает ее, пытаясь создать учетную запись.
Хотя остальные части базы работают нормально. Просто эта функция не работает до тех пор, пока мы не перезагрузим SQL Server.