0

我一直在做大量的阅读,其中一些文档似乎与现实无关。一些潜在的原因在这里是合适的,但它们只与 2008 年或更早的时间有关。

我定义了一个事务范围。我在事务范围内使用了许多不同的 EF 上下文(在不同的方法调用中),但是除了其中一个之外,它们都仅用于数据读取。Context的最终用途是创建并添加一些新对象到上下文中,然后调用

context.SaveChanges()

IIS 在一台服务器上运行。DB (Sql2012) 正在另一台服务器 (WinServer 2012) 上运行。

当我执行此代码时,我收到错误:

分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

显然,如果我在 IIS 机器上启用 DTC,这就会消失。但是我为什么需要?

这个:

http://msdn.microsoft.com/en-us/library/ms229978.aspx

状态:

• 在事务中登记了至少一个不支持单阶段通知的持久资源。• 在事务中登记了至少两个支持单阶段通知的持久资源

我的理解不是这里的情况。

4

1 回答 1

0

好的。我不完全确定这是否应该发生(根据 MS doco),但我已经弄清楚了原因和解决方案。

我正在使用 ASPNet 成员资格提供程序,并且在我的 web.config 中有两个连接字符串。我认为他们指向同一个数据库这一事实足以让他们被认为是同一个“持久资源”。

但是我发现会员连接字符串也有:

Connection Timeout=60;App=EntityFramework

而实体框架连接字符串没有。

将这些值设置为相同的连接字符串意味着事务不会升级到 MSDTC。

于 2012-10-05T00:51:31.690 回答