C# 我收到了一封信;升级事务请求失败,因为没有活动的本地事务";在System.Transaction.TransactionScope中
我有一个asp.net MVC应用程序运行了大约一周,然后今天开始出现这个错误 运行在.net 4.0上的Win 2K8 R2在Win 2K8 R2上与SQL Server 2K8对话 所有服务器上都运行MS DTC 我正在做一个简单的aspnet成员创建,然后在范围内的我自己的用户表中创建附加数据 似乎一旦一个人犯了错误,每个人都会得到它,然后尝试创建一个帐户。数据库的其他功能正在发挥作用 以下是堆栈跟踪:C# 我收到了一封信;升级事务请求失败,因为没有活动的本地事务";在System.Transaction.TransactionScope中,c#,sql-server,transactions,ado.net,C#,Sql Server,Transactions,Ado.net,我有一个asp.net MVC应用程序运行了大约一周,然后今天开始出现这个错误 运行在.net 4.0上的Win 2K8 R2在Win 2K8 R2上与SQL Server 2K8对话 所有服务器上都运行MS DTC 我正在做一个简单的aspnet成员创建,然后在范围内的我自己的用户表中创建附加数据 似乎一旦一个人犯了错误,每个人都会得到它,然后尝试创建一个帐户。数据库的其他功能正在发挥作用 以下是堆栈跟踪: System.Transactions.TransactionAbortedExcep
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[] )
代码:
我发现我最后一个抓到的是写ELMAH,它是基于SQL的而且它是在范围完成之后,所以它永远不会工作。我已修复了该错误,但
它没有告诉我发生错误的原因。
为了测试,我在scope.Complete()语句前后抛出了异常
我在scope.Complete()之前犯了一个故意错误。我在页面中没有错误,也没有记录ELMAH错误。
我在scope.Complete()之后立即犯了一个故意错误。我得到的范围已经完成,在最终捕获中出现错误。
我无法弄清楚是什么导致促销尝试发生,以及如果是这样的话为什么会发生。
该网站运行了10天,然后我们得到了这个错误,每个人都得到了它之后,试图创建一个帐户。
尽管数据库的其他部分工作正常。在我们重新启动SQL Server之前,此功能一直处于混乱状态。请尝试为您的日志调用执行此操作:
using(TransactionScope scope
= new TransactionScope(TransactionScopeOption.Suppress))
{
log.Log(error); //Error throws on this line
}
我认为您的日志调用正在尝试升级为分布式事务(当您尝试点击错误记录器时)。此代码将使日志记录调用退出事务。我在做分布式工作时遇到了与记录器相同的问题。我会得到一个错误,失败,然后记录,然后退出范围并回滚所有内容。这是一个相当糟糕的文本墙。如果你稍微降低一点,你可能会得到更多的回应。此外,您执行此操作时是否有活动事务?也许你应该在你的帖子中添加一些代码。
using(TransactionScope scope
= new TransactionScope(TransactionScopeOption.Suppress))
{
log.Log(error); //Error throws on this line
}