c#Entity Framework:使用DTC在同一服务器上的两个不同数据库上的TransactionScope

问题描述 投票:3回答:1

我和这里描述的情况基本相同qazxsw poi

喜欢:

Multiple databases(datacontext) on same server without MS DTC

ContextB和ContextA都位于同一个MS SQL Server(V.13.0.4206.0)上。 c#代码从远程Workstation执行。 Server和Worksation都在同一个域网络中。但是当ContextB尝试执行它的第一次操作时,它会引发以下错误:

由于通信问题,MSDTC事务管理器无法从源事务管理器中提取事务。可能的原因是:存在防火墙且MSDTC进程没有例外,两台计算机无法通过其NetBIOS名称找到对方,或者两个事务管理器之一未启用对网络事务的支持。 (HRESULT异常:0x8004D02B)

如果我改变任务的顺序,它没有任何区别;先说做smth。在ContextB上,然后在ContextA上:在这种情况下,当从ContextA操作数据库时,错误会引发。没有交易范围,一切正常(但当然没有交易)。我检查了服务器上的防火墙设置:为域和专用网络启用了分布式事务处理协调器的预定义规则。我也检查了DTC属性:

网络DTC访问:是的

允许入站:true

AllowOutbound:true

怎么了?它看起来很简单,我是否监督过某些事情?

谢谢您的回答。

c# entity-framework distributed-transactions
1个回答
2
投票

已解决:需要在Workstation上激活预定义的防火墙规则“分布式事务处理协调器”,c#代码也在其中运行。

我不知道数据库服务器会打开一个连接回事务初始化器(这是我的工作站)的连接。在这种情况下,似乎事务初始化器继承角色作为协调器 - 而不是服务器。

谢谢你给出的提示!

© www.soinside.com 2019 - 2024. All rights reserved.