问题标签 [msdtc]

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 投票
3 回答
4866 浏览

.net - 如何确定分布式事务超时的原因

我正在使用 LINQ to SQL 和支持分布式事务的第三方 SDK。当我意识到挂起的更新将同时更新 SQL 记录和第三方 SDK 中的记录时,我正在创建一个超时为 0(可能是无限)的 TransactionScope(尽管我也尝试了 12 小时作为时间跨度参数)。然后我在环境事务(由 transactionscope 创建)上使用 GetDtcTransaction 来获取 DTC 事务以链接到第三方 SDK。事情在大约 10 分钟内运行良好,但 10 分钟后,事务消失并发生错误。我如何确定交易消失的原因。我怀疑这是一个超时,因为它经常在 10 分钟后发生,即使此时已经完成了略有不同程度的工作。但是我'

我尝试使用 SQL 探查器跟踪以下事件:

  1. 所有错误和警告事件
  2. 除“审计架构对象”事件外的所有安全事件
  3. 除 SQLTransaction 和 TransactionLog 事件外的所有事务事件

我在错误发生时得到的只是这些事件:

DTCTransaction 事件上的 EventSubClass 16 指示“事务正在中止”。

0 投票
1 回答
1138 浏览

c# - MS States remote proc trans 选项将在 SQL SERVER 的下一个版本中删除

不知道在这里问是否合适...我在网上搜索了答案,但是徒劳无功...所以我只是想在这里碰碰运气。

这是微软网站http://msdn.microsoft.com/en-us/library/ms189322(SQL.90).aspx的摘录

远程 proc trans 选项

使用 remote proc trans 选项通过 Microsoft 分布式事务协调器 (MS DTC) 事务保护服务器到服务器过程的操作。将 remote proc trans 设置为 1 以提供 MS DTC 协调的分布式事务,以保护事务的 ACID(原子、一致、隔离和持久)属性。将此选项设置为 1 后开始的会话继承配置设置作为其默认设置。

此功能将在 Microsoft SQL Server 的下一版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

提供此选项是为了与使用远程存储过程的应用程序的早期版本的 Microsoft SQL Server 兼容。不要发出远程存储过程调用,而是使用引用链接服务器的分布式查询,这些链接服务器是使用 sp_addlinkedserver 定义的。

这是否意味着,我们需要避免在将事务范围对象提升为 MSDTC 的情况下使用它?

注意:这是 SQL Server 2005 的消息,但 SQL Server 2008 也会出现相同的消息。

0 投票
3 回答
7356 浏览

.net - 使用 TransactionScope 和 MS DTC 时的常见问题

我刚刚开始使用 TransactionScope,我发现我总是遇到一些意想不到的事情,需要永远调试。

我认为拥有这些综合列表对于那些“奇怪的错误”情况非常有用,并且可以扩展我们对平台中奇怪的知识。

关于我将如何使用事务范围的一些上下文:

  • Web应用程序
  • 多个 Web 服务器、应用程序服务器和 sql 服务器
  • 事务将主要是数据库事务,但有些事务将被提升以写入 MSMQ。
0 投票
4 回答
2456 浏览

c# - 了解 Windows 中的 MSDTC

要在 Subsonic 中使用事务构造(如下),MSDTC 需要在 Windows 机器上运行。正确的?

  1. MS-DTC 是 Windows 系统(XP、Vista、Windows 7、服务器等)上的默认服务吗?
  2. 如果未启用,我如何确保在我的应用程序安装过程中启用它?
0 投票
1 回答
1088 浏览

oracle - 处理“异步”提交的好方法是什么?

我有一个 WCF 服务,它使用ODP.NET从 Oracle 数据库中读取数据。该服务也写入数据库,但间接地,因为所有更新和插入都是通过我通过 COM+ 访问的旧业务逻辑层实现的,我将其包装在TransactionScope中。旧层通过 ODBC 而不是 ODP.NET 连接到 Oracle。

我遇到的问题是,因为 Oracle 使用两阶段提交,并且由于较旧的业务层使用的是 ODBC 而不是 ODP.NET,所以事务有时会TransactionScope.Commit()在数据实际可用于从服务层读取之前返回。

我在 Stack Overflow 上看到了一个类似的帖子,关于一个 Java 用户遇到这样的问题。

Oracle 的一位代表发帖称,我对这个问题无能为力:

这可能是由于 OLETx ITransaction::Commit() 方法的行为方式。在 2PC 的第 1 阶段(即准备阶段)之后,如果一切成功, 即使资源管理器实际上还没有提交,提交也可以返回. 毕竟,成功的“准备”是保证资源管理器在此之后不能任意中止。因此,即使资源管理器因为没有收到来自 MSDTC 的“提交”通知(由于通信失败)而无法提交,组件的提交请求也会成功返回。如果您立即从表中选择行,您有时可能会在执行选择后看到实际提交发生在数据库中。因此,由于一致的读取语义,您的选择将不会看到新行。在 Oracle 中我们对此无能为力,因为“在第 1 阶段成功后提交成功”优化是 MSDTC 实施的一部分。

所以,我的问题是:

我应该如何处理可能的延迟(通过标题“asyc”)的问题,以确定 2PC 的第二部分何时实际发生,所以我可以确定我插入(间接)的数据实际上可以被选择Commit()通话返回后?

大型系统如何处理数据可能无法立即读取的事实?

0 投票
1 回答
2536 浏览

c# - 为什么 TransactionScope 使用实体框架会导致问题?

我有一个问题,我知道是本地的,与事务范围有关,可能是 MSDTC(我不太了解)。

另一个项目开发人员(相同的代码库,所有提交的内容)执行整个解决方案,但是当我尝试从数据库中获取一些数据时(并非总是如此),出现以下错误:

如果我评论 using 事务范围、complete() 和所有内容,它会按预期工作。

你以前有过这个问题吗?

编辑:

引发此错误的查询非常简单,例如:

编辑,解决:

服务器的 lmhosts 已过时。

0 投票
3 回答
3008 浏览

.net - 是什么导致此 MS DTC 错误在 .NET 中偶尔发生?

我一整天都偶尔收到此错误。根据堆栈,它是在入伍期间抛出的。如果每次我都能进行故障排除和修复(通常是防火墙或 LMHOSTS 问题)时都会出现此错误。由于它是随机发生的,我无法终生思考会发生什么。

有任何想法吗?

0 投票
2 回答
1496 浏览

sql-server-2008 - TransactionScope 问题 - 我怎样才能让 DTC 不参与其中?

(我知道围绕 DTC 和促进交易的情况对于我们这些不知情的人来说可能有点神秘,但让我向您展示我的公司是如何做事的,如果您能告诉我为什么 DTC 参与其中,如果可能的话,我能做些什么来避免它,我将不胜感激。)

我有在 ASP.Net 网络服务器上运行的代码。我们有一个数据库,SQL 2008。

我们的数据访问代码看起来像这样——我们有一个数据访问层,它使用 SQLConnections 和 SQLCommands 的包装对象。典型用法如下所示:

所以确实,SqlClient、SqlConnection 等的一个非常薄的包装器。我想在一个事务中运行几个存储的过程,而包装器类不允许我访问 SqlTransaction,所以我不能将它从一个组件传递到下一个组件. 这导致我使用 TransactionScope:

当我这样做时,DTC 参与其中,不幸的是,我们的网络服务器没有在 MSDTC 设置中启用“允许远程客户端”——让 IT 允许这将是一场斗争。

我很想避免 DTC 卷入其中,但我可以这样做吗?我可以省略 methods1-3() 中的事务调用,让 TransactionScope 弄清楚吗?

0 投票
4 回答
3465 浏览

c# - ADO 实体框架是否支持非 DTC 事务?一个 EntityContext 和一个 TransactionScope 内的多个查询导致 DTC 提升

我有一个使用实体框架的 Web 应用程序 - 我们使用 TransactionScope 类来提供环境事务。

有没有办法告诉 EF 使用标准 T-SQL 事务而不是 DTC 事务?我们经常对一个 EntityContext 和一个 TransactionScope 实例中的不同表进行多次查询,但这似乎总是将事务提升为 DTC

我已经把一个简短的例子放在一起,见下文。对单个表的查询正确地启动了一个 T-SQL 事务并且在连接 SPID 54 上然后对 ContactUs 表进行查询,并且 EF 在另一个连接 (SPID 53) 上执行此操作,这具有促进事务的连锁效应到 DTC 交易。**

0 投票
2 回答
1606 浏览

.net - 分布式事务案例中需要安装MSDTC的地方

我需要在我的应用程序中维护分布式事务

假设 Service1 安装在 Server1 上

Service2 安装在 Server2 上

并且客户端正在使用这两项服务

我应该在哪里准确安装 MSDTC,是否需要安装在 Server1、Server2 和客户端上

在这种情况下是否需要任何额外的配置?