问题标签 [transactionscope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
49515 浏览

c# - 为什么 TransactionScope 不能与实体框架一起使用?

请参阅下面的代码。如果我初始化了多个实体上下文,那么我只会在第二组代码中得到以下异常。如果我注释掉第二组它会起作用。

{“底层提供程序在打开时失败。”}

内部:{“与底层事务管理器的通信失败。”}

内部:{“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。”}

请注意,这是一个示例应用程序,我知道连续创建 2 个上下文没有意义。但是,生产代码确实有理由在同一个 中创建多个上下文TransactionScope,这是无法更改的。

编辑

这是我之前尝试设置 MS-DTC 的问题。它似乎在服务器和客户端上都启用了。我不确定它是否设置正确。另请注意,我尝试这样做的原因之一是TransactionScope使用 ADO.NET 和 Linq 2 Sql 中的现有代码......我希望那些也使用相同的事务。(这可能听起来很疯狂,但如果可能的话,我需要让它工作)。

如何在 C# 中使用 TransactionScope?

解决方案

Windows 防火墙阻止了与 MS-DTC 的连接。

0 投票
1 回答
1266 浏览

windows-vista - MSMQ Vista x64

我在我的系统上运行 Vista Ultimate x64。我有一个在远程服务器上运行良好的应用程序,可以将消息发送到在其上运行的 MSMQ 实例。当我将应用程序带到本地系统并尝试发送消息时,它不会发送,但也不会出错。我什至尝试设置一个本地 MSMQ 实例,同样的情况也发生在那个实例上——没有错误,但也没有消息。队列是事务性的,代码本身是基于事务的。

有什么建议么?我尝试实现日志选项(假设这就像日志记录)并且它没有记录任何内容。

我通过事件查看器挖掘,我看到的唯一错误(实际上是警告)是:

MSDTC 在尝试与系统 [ComputerName] 建立安全连接时遇到错误 (HR=0x80000171)

所有标准的东西都经过检查,如防火墙、MSMQ 是否正在运行等,当我将应用程序原封不动地放在远程服务器上时,它 100% 的时间都在工作。

0 投票
3 回答
1306 浏览

c# - 后台线程上的新 System.Transactions.TransactionScope() 停止程序

我有一些使用 a 的代码System.Transactions.TransactionScope,创建事务范围的新实例只会停止程序。

没有异常或消息,程序只是停止,Visual Studio 返回到代码编辑模式。这个过程完全没有了。事件查看器中没有异常、消息或事件。

我有另一个使用 TransactionScope 没有问题的测试应用程序,所以它不应该是环境问题。

我只是不知道如何获取异常详细信息。我在 Visual Studio 的 Debug->Exceptions 对话框中打开了所有“抛出”复选框,希望 VS 在抛出异常时自动中断,但事实并非如此。

谁能帮我找出程序退出的原因?

编辑:我刚刚发现了一些新东西。TransactionScope 正在通过在后台线程上运行的方法中创建ThreadPool.QueueUserWorkItem。如果我只是直接在主应用程序线程上调用该方法,这个问题就会消失。所以现在我的问题是“在线程池线程上使用 TransactionScope 有什么问题?”。注意在调用新线程之前没有启动事务范围,它都在线程池线程上运行的一个方法中。

0 投票
3 回答
10564 浏览

c# - 有没有办法将 TransactionScope 与现有连接一起使用?

我有一些代码类似于建议使用 TransactionScope,但有环境连接而不是环境事务。

有没有办法将 TransactionScope 对象与现有连接一起使用,或者.Net 框架中是否有用于此目的的替代方法?

0 投票
5 回答
6534 浏览

c# - 将 TransactionScope 与 MySQL 和读锁一起使用

我有以下情况:

如果有一个带有 InnoDB 表的 MySQL 数据库,我用它来存储唯一的数字。我开始一个事务,读取值(例如 1000471),将该值存储在另一个表中并更新增量值(100472)。现在我想避免其他人甚至在我的事务运行时读取该值。

如果我使用普通的 MySQL,我会做这样的事情:

执行(“锁定 tbl1 读取”);
执行(“从 tbl1 中选择 ...”);
执行(“插入到 tbl2”);
执行(“解锁表”);

但由于我使用 SubSonic 作为 DAL 并且代码应该独立于 mysql,所以我必须使用 TransactionScope。

我的代码:

根据 TransactionOptions 的帮助

system.transactions.isolationlevel

我想要达到的效果可以用 IsolationLevel.ReadCommitted 来实现,但是我仍然可以从事务外部读取行(如果我尝试更改它,我会得到一个锁,所以事务正在工作)

有人有建议吗?TransactionScope 甚至可以实现读锁吗

0 投票
3 回答
12673 浏览

c# - 如何知道代码是否在 TransactionScope 内?

知道代码块是否在 TransactionScope 内的最佳方法是什么?
Transaction.Current 是一种可行的方法还是有什么微妙之处?
是否可以通过反射访问内部 ContextData.CurrentData.CurrentScope(在 System.Transactions 中)?如果是,如何?

0 投票
5 回答
11253 浏览

c# - 在 SQL Server 2005 上使用 System.Transactions 的 TransactionInDoubtException

这篇文章的基本问题是“为什么非推广的 LTM 交易会受到质疑?”

我收到 System.Transactions.TransactionInDoubtException ,我无法解释原因。不幸的是,我无法重现此问题,但根据跟踪文件,它确实发生了。我正在使用 SQL 2005,连接到一个数据库并使用一个 SQLConnection,所以我不希望进行升级。错误消息指示超时。但是,有时我会收到一条超时消息,但例外是事务已中止而不是有疑问,这更容易处理。

这是完整的堆栈跟踪:

有任何想法吗?为什么我会怀疑,当我得到它时应该怎么做?

编辑以获取更多信息

我实际上仍然没有这个答案。我确实意识到事务实际上是部分提交的。一个表得到插入,但另一个没有得到更新。代码被大量追踪,我没有太多的空间可以遗漏一些东西。

有没有办法可以很容易地找出交易​​是否已被促进。我们可以从堆栈跟踪中判断它是否存在吗?单阶段提交(在 strack 跟踪中)似乎对我没有任何提升,但也许我错过了一些东西。如果它没有得到提升,那它怎么可能有疑问。

另一个有趣的难题是我创建了当前事务的克隆。我这样做是为了解决这个问题。 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=914869&SiteID=1

不幸的是,我不知道这个问题是否已经解决。也许创建克隆会导致问题。这是相关代码

谢谢

0 投票
3 回答
4060 浏览

c# - 为什么以下 SQL Server 在事务中运行时会插入死锁?

我目前正在向 SQL Server 表中插入一条记录,然后选择自动增量 ID,如下所示:

(这是使用 Linq-to-SQL 生成的)。出于某种原因,当我使用具有可序列化隔离级别的 TransactionScope 对象在事务中运行此代码时,SQL Server 会引发死锁错误。我分析了死锁图事件,发现涉及的两个进程都在等待对方执行转换操作,据我了解以下信息:

我的理解是事务范围会阻止第二个进程执行插入,直到第一个进程完成插入和选择身份。然而,情况似乎并非如此。任何人都可以阐明以线程安全的方式实现我所要求的最佳方法吗?

--更新--

只是要注意; 我 99% 确定两个进程之间没有共享连接,因为每个进程都创建了一个新的 DataContext 来与数据库通信。

--再次更新--

Remus Rusanu 指出,一些遗漏的信息与问题有关,我尝试根据死锁图报告简化场景,但我在此处扩展了解释。在执行插入之前,我对相关表执行存在查询以确定标记是否已存在。如果是,我结束交易。如果不是,则插入应该继续,然后我在具有Some_Int作为主键的表上执行更新(此处未显示),尽管更新纯粹是针对最后修改的值。Tag 表有一个由 auto inc ID 和 Some_Int 组成的聚集索引也很重要。我不认为这最后一条信息是相关的,因为我尝试将表更改为仅将 auto inc 字段作为主键/聚集索引无济于事。

谢谢。

0 投票
1 回答
1312 浏览

.net - 将 TransactionScope 与类型化数据集一起使用

我有一个使用类型化数据集表适配器查询 SqlCe 数据库的 WinForm 应用程序。我有一个主窗体程序集和一个处理每个数据库操作的数据库程序集。我在事务中使用 tableadapter 更新时遇到问题,如果有人能给我任何想法,我将不胜感激。

Update() 方法给出了这个错误:

这是我的代码:

0 投票
4 回答
28191 浏览

asp.net - 分布式事务完成。在新事务或 NULL 事务中登记此会话

只是好奇是否有其他人遇到此特定错误并知道如何解决?

场景如下...

我们有一个 ASP.NET Web 应用程序,它使用在连接到 SQL Server 2008 集群后端的 Windows Server 2008 IIS 场上运行的企业库。MSDTC 已打开。数据库连接是池化的。

我的怀疑是,沿线某处发生了失败的 MSDTC 事务,连接返回到池中,并且不同页面上的下一个查询正在拾取行为不端的连接并得到这个特定的错误。有趣的是,我们在一个不需要分布式事务(提交到两个数据库等)的查询中遇到了这个错误。当我们得到错误时,我们只做选择查询(无事务)。

我们进行了 SQL Profiling,查询在 SQL Server 上运行,但从未返回(因为 MSDTC 事务已在连接中中止)。

伴随此的其他一些相关错误是:

  • 不允许启动新请求,因为它应该带有有效的事务描述符。
  • 内部 .Net Framework 数据提供程序错误 60。