entity-framework - 使用 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 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 问题,以便开发团队知道。
推荐阅读
- reactjs - React hooks - 如何在检查状态和道具的功能组件中实现 shoulComponentUpdate 方法?
- mysql - 根据共享的外国 ID 选择相同的项目
- java - 如何使用嵌套的 json 数组反序列化 json 对象
- c# - 无法在 Web 服务 wcf 中发送或接收大尺寸数组
- java - 我在哪里可以在 Eclipse 中找到这个小部件?
- linux - 非法选项 -p /bin/sh: 1: Usage:: not found
- java - Gigya SDK v4 Facebook 登录问题
- c# - 如何使用功能区上的按钮在资源管理器中对电子邮件进行绿色检查?
- corda - Corda — 使用 FilteredTransaction 与交易对手共享状态子集
- angular - 如何使用 TypeScript 提取接口的属性(最好没有 3rd 方库)