首页 > 解决方案 > 使用 MSDTC 时 Windows 2019 上的实体框架异常

问题描述

我们有 2 台服务器。一个盒子是在 Windows Server 2016 上运行的 MS SQL Server 2017 (14.0.3192.2)。另一个是运行 EF 6.2.0 的 Web 服务的 Windows Server 2019 盒子。2019 年的盒子是新的,生产 Web 服务正在 Win 2k12 R2 服务器上运行,目前没有问题。当 EF 需要在一个调用中执行多个事务时,听起来该调用被提升为使用 MS 分布式事务协调器。在新的 2019 服务器上,我们看到这些请求被中止。我们在代码中看到的异常是“该操作对于当前的登记状态无效”。我已经完成了所有的 DTC 故障排除,但似乎一切都检查出来了。我们不使用 Windows 防火墙,服务器之间也没有防火墙。本地 DTC 配置与我们现有的服务器和 dtcping 匹配。exe 工具报告服务器之间的通信没有问题。如果我们关闭导致多个事务的代码,那么问题就会消失,所以一切都指向 EF 和 MSDTC 之间的问题。

我们也无法在我们的开发计算机上运行多个事务(Windows 10)。在较新版本的 Windows 中,EF 和 DTC 是否可能出现问题,或者我们是否遗漏了什么?

我在 EF github 项目中询问,并被告知这可能比 EF 更适合 sql-client 团队。我也在这上面标记了 sqlclient。

标签: entity-frameworkentity-framework-6msdtcsqlclient

解决方案


我们试图拉下 Entity Framework 6.3.0 preview 9 nuget 包并在新的 Windows 2019 服务器上对其进行测试,并且 DTC 神奇地与 Scoped Transactions 一起工作(不会中止)。EF 6.3.0 版本中的某些内容必须解决我们在使用 EF 6.2.0 公共 nuget 版本中止 DTC 事务时遇到的问题。

由于 6.3.0 仍处于预览阶段,我们同时回滚到 6.2.0 并关闭了我们的范围事务,直到 6.3.0 完全发布。我将更新有关此问题的 github 问题,以便开发团队知道。


推荐阅读