问题标签 [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.
c# - MSDTC 的 WCF Windows 服务问题
我有一个 .net 3.5 windows 服务,它使用在 2008 应用程序服务器上运行的 msmq。该服务与数据库服务器上的 sql 2005 数据库通信。
在 2008 Web 服务器上从我的 aspx 页面调用此服务时,我收到下面提到的错误:
“分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 进行网络访问。事务管理器已禁用其对远程/网络事务的支持。(来自 HRESULT 的异常: 0x8004D024)"
我遵循了这个指示,但没有运气。
当我调试代码时,在我的 Windows 服务代码中的一行尝试使用 ExecuteNonQuery 方法执行存储过程时会抛出上述错误。
我在这里想念什么?
仅供参考,我在网络服务器上的 web.config 看起来像:
msdtc - 分布式事务协调器
我正在尝试跨多个系统进行数据库事务(插入记录)。所以,我决定在 .net 中使用 System.Transaction 命名空间。我在两个系统上都配置了 MSDTC(但我不知道我是否配置正确)。我的事务有两个插入查询,一个将在本地系统执行。另一个,将在本地网络中的某个其他系统上执行。第一个插入查询成功,但第二个引发错误,例如: Message = "事务已被隐式或显式提交或中止。"
这是我的代码
c# - 在什么情况下,来自 ac# 应用程序的 MSDTC 事务会导致 SQL 复制部分(并且静默)失败
我们有一个特别奇怪的问题;让我设置场景。找到的解决方案见下文
我们有三个 SQL Server 2005 数据库,为了论证,我们称之为:Alpha、Beta和Gamma。
这些数据库之间定义了一种复制关系,如下所示:
所有三个数据库都有一个名为“AnExample”的表,具有相同的模式。复制设置为Alpha是提供者,其他两个数据库是订阅者。
- 使用 MSDTC 事务(由 TransactionScope 处理)的 c#.Net 3.5 应用程序同时读取和写入数据库:Alpha 和 Beta。
- 此事务中的表“AnExample”仅在 Alpha 上更新。
- MSDTC 事务成功提交。
- “AnExample”表可能在Alpha中更新,更改立即复制到Gamma
- Beta上没有发生任何变化(分析器确认数据库上没有发生任何活动),SQL 日志或事件日志中也没有出现任何错误
- 使用相同的凭据重新运行在 Management Studio 中更新“AnExample”的相同查询成功(复制到Beta)
- 运行 MSDTC 事务 在Beta上写入另一个表,然后使用主应用程序 DAL、连接字符串和配置的测试应用程序对 Alpha 的“AnExample”表进行完全相同的写入(复制到Beta发生)
这使我们相信主应用程序中发生了一些变化,这些变化不是孤立发生的。
可能的线索/红鲱鱼
我们可以看到的成功测试与主应用程序使用的实际查询之间的唯一区别是隔离级别发生了某种变化。在成功的查询中,它被设置为仅读取已提交的事务隔离级别,而在失败的情况下它被设置为可序列化(尽管没有显式调用来更改代码库或存储过程中的隔离级别)。
我们确实觉得这在某种程度上是一个红鲱鱼,因为在 Management Studio 中使用此隔离级别运行查询再次成功而没有问题。但事实上,这可能是我们尚未发现的另一个问题的征兆。
为了完整起见,这里是无法复制到 Beta(但复制到 Gamma)的查询的设置。
这有点让人头疼。
.net - 为什么使用 TransactionScope 和 MSDTC 的 VS 数据库单元测试会失败?
我们使用DatabaseTestFixture类针对 SQL Server 2000 数据库运行了一些单元测试,该类使用未提交的 TransactionScope,因此所有更改都会回滚。测试针对本地数据库运行,没有问题。
然后,我们将单元测试指向一个通用数据库服务器,并在运行单元测试的机器上设置 MSDTC,这台机器一切正常。
现在虽然我们已经设置了一台新机器,它将针对相同的公共数据库运行单元测试。单元测试不在这台机器上运行,我们得到以下错误:
System.Transactions.TransactionException :事务已被隐式或显式提交或中止。
MSDTC 设置与正在运行的设置完全相同,我们逐屏比较。
有没有人经历过这样的事情?或者得到任何关于我们可以在哪里寻找可能导致它的线索的指示?
我们检查了 Windows 版本和服务包、防火墙选项、msdtc 选项、VS 版本和服务包。
transactions - MSDTC(分布式事务协调器)首次启动缓慢
我注意到非常简单的分布式事务在第一次运行时需要很长时间(3-4 秒)才能完成。但是如果再次调用相同的事务范围,它会快得多(30ms)。似乎 MSDTC 在一小时后进入睡眠状态。一个小时过去后,下一个要运行的事务将需要 3-4 秒。
我预计网站上的流量不会很大,因此单个交易之间可能会经过很多小时。
我认为这可能是由于 MSDTC 服务设置为手动启动,但我确保 MSDTC 服务都自动运行。
猜测某处有一个注册表设置,但我没有在 MSDN 中找到任何东西。
谢谢!
.net - 跨不同数据库连接的多个 SQL 事务命令
我正在为我的应用程序使用 .NET 2.0/3.5 框架。我需要跨多个连接运行多个 SQL 命令,并且每个连接都在不同的服务器(Oracle、SQL Server)上。我需要确保这些命令是事务性的。
例如:我需要在 Oracle 和 SQL Server 数据库上的表中执行 INSERT,然后在没有引发异常的情况下提交它们。如果有异常,如果需要,我想在两台服务器上回滚。
我怀疑我需要使用 System.Transactions 和 TransactionScope。这将要求我在数据库服务器和应用程序服务器上设置 Microsoft 分布式事务协调器 (MSDTC)。
我看了高低,找不到任何描述逐步设置 MSDTC 和相互身份验证的文章(包括配置防火墙设置和 MSDTC 设置。)完全记录(除非你能找到我关于如何设置它的非常好的 MSDN 文章。)
使用 MSDTC 是完成工作的唯一方法吗?
如果是这样,我该如何正确配置它?
编辑:
- 我在所有机器上都使用 Windows Server 2003。
- 我有两个 SQL Server。一个是 SQL Server 2000,另一个是 2005。
- 我有一台 Oracle 服务器,它是 11g 版本
- 我们正在开发的应用程序有时必须以事务方式在所有三个数据库中更改/创建记录。
- 键盘和椅子之间不是问题。我们阅读了 MSDN 上有关如何设置有关 MSDTC 的所有内容的文章,但我们无法让 DTCPing 和其他测试应用程序正常工作。我们正在寻找详细说明该过程的分步文章。我不止一次遇到过 MSDN 文档,其中“省略”了执行某些操作的步骤。
security - MSDTC 是否存在任何固有的安全风险?
是否存在与启用 MSDTC 相关的一般安全风险?
我的一位团队成员告诉我,启用它存在安全风险,但我想知道它们是什么,如果有的话。
asp.net - 分布式事务完成。在新事务或 NULL 事务中登记此会话
只是好奇是否有其他人遇到此特定错误并知道如何解决?
场景如下...
我们有一个 ASP.NET Web 应用程序,它使用在连接到 SQL Server 2008 集群后端的 Windows Server 2008 IIS 场上运行的企业库。MSDTC 已打开。数据库连接是池化的。
我的怀疑是,沿线某处发生了失败的 MSDTC 事务,连接返回到池中,并且不同页面上的下一个查询正在拾取行为不端的连接并得到这个特定的错误。有趣的是,我们在一个不需要分布式事务(提交到两个数据库等)的查询中遇到了这个错误。当我们得到错误时,我们只做选择查询(无事务)。
我们进行了 SQL Profiling,查询在 SQL Server 上运行,但从未返回(因为 MSDTC 事务已在连接中中止)。
伴随此的其他一些相关错误是:
- 不允许启动新请求,因为它应该带有有效的事务描述符。
- 内部 .Net Framework 数据提供程序错误 60。
sql-server - MSDTC - 尝试建立安全连接时出错(独立)
首先,我不知道这是否可能,但让我描述一下我的情况。
我有一组 WCF 服务,一个 SQL Server 2008 数据库,都在 Windows Server 2008 上运行。当我连接到我的 LAN 时,所有这些都可以正常工作,但是我将使用这个盒子进行演示,我想要使其在独立模式下工作(即,未连接到任何网络)。
当我尝试在独立模式下执行此操作时,SQL Server 数据库似乎正在工作(我能够检索数据)。但是,当我尝试从 WCF 服务的事务范围内插入数据时,在客户端我遇到了通信故障异常。检查 Windows 事件日志,我看到一条消息类似于“MSDTC 在尝试与系统建立安全连接时遇到错误”。
有谁知道需要在 DTC 上设置什么才能使其正常工作
c# - MSDTC 第一次交易失败
我有一个应用程序,它每天检索一次数据并将其存储到数据库中。直到最近,该应用程序一直与 SQL Server 驻留在同一台机器上,但由于某些必需外围设备的一些硬件问题,它已被移至运行 Windows XP 的单独机器上。
我们在这里遇到的问题是,当早上的第一个事务运行时,我们会收到以下堆栈跟踪:
System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。---> System.Runtime.InteropServices.COMException (0x80004005):对 COM 组件的调用已返回错误 HRESULT E_FAIL。
但是,立即再次重新运行事务是成功的。似乎 MSDTC 响应第一个事务的时间过长,因此失败,但随后准备好进行第二个事务。我在互联网上发现了几个关于这种情况的参考,但没有找到真正的解决方案。有没有人遇到过这个?如果是这样,有没有办法阻止 MSDTC 从内存中卸载,或者是否有其他解决方案,例如延长超时?