Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我收到了一封信;升级事务请求失败,因为没有活动的本地事务";在System.Transaction.TransactionScope中_C#_Sql Server_Transactions_Ado.net - Fatal编程技术网

C# 我收到了一封信;升级事务请求失败,因为没有活动的本地事务";在System.Transaction.TransactionScope中

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

我有一个asp.net MVC应用程序运行了大约一周,然后今天开始出现这个错误

运行在.net 4.0上的Win 2K8 R2在Win 2K8 R2上与SQL Server 2K8对话

所有服务器上都运行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[] )  
代码:

我发现我最后一个抓到的是写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
}