问题标签 [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 投票
1 回答
2730 浏览

nhibernate - NServiceBus / NHibernate 是否需要 MSDTC?

我正在编写 NServiceBus 解决方案并尝试使用 DBSubcriptionStorage。这使用 NHibernate 进行数据访问,我得到以下异常:

合作伙伴事务管理器已禁用对远程/网络事务的支持

我可以启用 MSDTC,但我的问题是:这个要求来自哪里,我可以删除它吗?

我不熟悉 NHibernate,我不知道它是否需要 MSDTC 或 NServiceBus 是否需要。NServiceBus 订阅数据库中只有一个平面表,在这种情况下我几乎看不到 MSDTC 的使用。

我可以删除 MSDTC 要求吗?我是否必须为此编写自己的订阅持久层?

谢谢

0 投票
1 回答
401 浏览

transactions - WF4:持久性和 DTC

我正在构建一个将管理WorkflowApplication实例的工作流主机。

实例将使用 SqlWorkflowInstanceStore。

SqlWorkflowInstanceStore 的表和逻辑与我与持久性参与者一起写入的其他表和逻辑位于同一数据库中。

我没有使用 AppFabric。

我的问题是:我需要运行 DTC 吗?

注意:在 WF3/3.5 中,同样的配置需要 DTC(不知道具体原因,看起来很奇怪,因为只有一个服务器和数据库)。

0 投票
4 回答
749 浏览

linq-to-sql - 简单交易

我有 2 个 linq 2 SQL 语句我想在一个事务中(SQL 服务器是远程的,在防火墙之外等)所有其他通信工作但是当我将这 2 个语句包装在 TransactionScope() 中时,我开始不得不配置 MSDTC我们做到了,但是有防火墙问题(我认为)有没有更简单的方法?

我想做的基础知识归结为:(两者都是存储在引擎盖下的过程)

实现这一目标的最简单方法是什么?

编辑:
首先我得到了这个:事务管理器已禁用对远程/网络事务的支持。(来自 HRESULT 的异常:0x8004D024)在我们的服务器上,我按照此处的说明进行了更正。但是,这些说明似乎不适用于 Windows 7(我的开发箱),请参阅我对上述答案的评论。

更正问题后(在非 win7 框中)我得到这个:事务已经隐式或显式提交或中止(HRESULT 异常:0x8004D00E),一些谷歌搜索建议可能是防火墙问题。

编辑
我刚刚发现远程数据库是 SQL 2000

0 投票
2 回答
1328 浏览

.net - 抑制只读 EF 上下文的 TransactionScope 登记?

我有一个场景,我需要打开多个指向不同数据库的数据上下文。我只是写入其中一个数据库并从其他数据库中读取......所以从技术上讲,事务应该只针对其中一个数据库。

我想避免将 TransactionScope 升级为分布式事务,因此我不必担心 MSDTC ...有没有办法让事务中只有一个上下文登记?

0 投票
1 回答
202 浏览

wcf - 具有事务支持的 WCF 自定义消息写入

我正在使用继承 System.Servicemodel.Channels.Message 的自定义消息。
我的自定义消息获取从数据库中提取的 IEnumerable 集合。
WCF 服务是事务性的(已经过测试)。

MS-DTC 已启用。

问题是,当在自定义消息处执行受保护的覆盖 void OnWriteBodyContents(XmlDictionaryWriter writer)方法时,没有事务。
System.Transactions.Transaction.Current 为空。在执行服务时,事务流工作正常,但是当消息由 WCF 机制写入时,似乎它超出了事务,导致 DB 命令(拉数据)在没有事务的情况下执行。
请注意,如果我传递的是简单数组而不是 IEnumerable,则 DB 操作将在事务下执行,但我希望它与响应写入并行执行。

请有任何想法,为什么交易丢失以及可以做些什么来激活它?

非常感谢!
塔米尔。

0 投票
1 回答
978 浏览

timeout - SqlConnection 和 TransactionScope 超时

我有一个超时时间为 60 分钟的 TransactionScope(通过 DTC,读取已提交)。在 TransactionScope 中,我打开了连接(我希望加入事务),但 30 秒后我得到了超时。

在 machine.config 中,我将 system.transaction maxTimeout 更改为 60 分钟。

为什么超时会在 30 秒后发生?

0 投票
1 回答
2805 浏览

entity-framework - 实体框架 4 的交易问题

我正在尝试使用实体框架 4 实现事务。根据我的阅读,下面的代码是正确的。SaveChanges 工作正常,但只要我点击第一个 ExecuteFunction 调用,我就会得到以下异常:

基础提供程序在打开时失败。---> System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

我已登录到数据库服务器,但没有看到名为 Distributed Transaction Manager 的服务,但确实看到了 Distributed Transaction Coordinator 并且它已启动。我不确定我需要进行哪些更改才能使其正常工作。有人知道吗?谢谢。

这是代码。

0 投票
1 回答
852 浏览

c# - 如何调试 DTC 问题?

我对某些代码进行了单元测试,这些代码偶尔会抛出“事务已被隐式或显式提交或中止”。例外。谷歌给了我很多精彩的文章,但我读过的似乎都没有。

如果我在本地运行单元测试,则永远不会抛出异常。
如果我在构建服务器上手动运行它,则永远不会抛出异常。

事实上,似乎唯一一次抛出异常是在晚上的自动构建和测试过程中,大约 80% 的时间会抛出异常。

这几乎排除了关于该主题的所有 Google 结果,因为这些问题通常是由事务或防火墙中的数据库连接问题引起的。

任何事件日志(在运行测试的构建机器或开发数据库服务器上)都没有表明存在问题的事件。事实上,我看到的唯一相关事件消息是在数据库机器上——“MSDTC: Session idle timeout over, tearing down the session”。事件在我运行测试后不久发生。

我不确定如何继续尝试查找此问题。

有什么方法可以从代码中生成有关事务状态的详细信息(我正在使用带有 .NET 3.5 的 C#)?

有没有办法让事件日志给我更多信息来帮助追踪?

如果这有助于找到正确的工具,则涉及的机器是 Windows 2000 Server (db) 和 Windows Serer 2003 (build)。

0 投票
1 回答
1098 浏览

nservicebus - NServiceBus - 我想要 AsA_Server 配置,但不参与 MSDTC 事务

我有一项服务,我不想在服务启动时从其输入队列中清除消息,并且我不希望它参与 MSDTC 事务。我正在将它的端点配置为运行 AsA_Server,但我看不到任何禁用启动 MSDTC 事务的方法。我正在使用 NServiceBus.Host.exe。

有没有人这样做过?

0 投票
3 回答
2926 浏览

msmq - 发往群集 MSMQ 实例的 MSMQ 消息卡在传出队列中

我们已经为一组 NServiceBus 服务集群了 MSMQ,并且一切都运行良好,直到它没有。一台服务器上的传出队列开始填满,很快整个系统就会挂起。

更多细节:

我们在服务器 N1 和 N2 之间有一个集群 MSMQ。其他集群资源只是作为本地直接在集群队列上运行的服务,即 NServiceBus 分发器。

所有工作进程都位于不同的服务器上,Services3 和 Services4。

对于那些不熟悉 NServiceBus 的人,工作进入由分发服务器管理的集群工作队列。Service3 和 Services4 上的工作应用程序将“我准备好工作”消息发送到由同一分发器管理的集群控制队列,分发器通过向工作进程的输入队列发送一个工作单元来响应。

在某些时候,此过程可能会完全挂起。这是系统挂起时集群 MSMQ 实例上的传出队列的图片:

处于挂起状态的群集 MSMQ 传出队列

如果我将集群故障转移到另一个节点,就好像整个系统都受到了影响。这是故障转移后不久的同一群集 MSMQ 实例的图片:

故障转移后的群集 MSMQ 传出队列

谁能解释这种行为,以及我能做些什么来避免它,以保持系统平稳运行?