在我们当前的项目中,我们使用 ADO.NET 实体框架作为应用程序的数据层。有些任务需要在事务中运行,因为数据库中有很多工作要做。我正在使用一个交易范围 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx围绕这些任务。
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
// Do something...
transactionScope.Complete();
}
问题是当我使用交易范围 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx出现异常:
System.Data.EntityException:底层提供程序在打开时失败。 ---> System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。 ---> System.Runtime.InteropServices.COMException (0x80004005): 调用 COM 组件返回了错误 HRESULT E_FAIL。
看来这个错误与MSDTC http://social.msdn.microsoft.com/Search/en-US?query=MSDTC(微软分布式事务协调器)。当我更改 MSDTC 的安全配置时,会引发另一个异常:
System.Data.EntityException:底层提供程序在打开时失败。 ---> System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 进行网络访问。
然而 MSDTC 是如何配置的,交易范围 http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx会导致错误。
有人知道这里出了什么问题吗?
默认情况下,MSDTC 禁用网络访问。为了让它工作,你应该去
控制面板->管理工具->组件服务->组件服务->计算机->我的电脑->右键->属性->MSDTC->安全配置
并选中以下复选框网络 DTC 访问、允许入站、允许出站。应根据您的环境选择身份验证。您可能还想看看调试分布式事务的工具。为了给你一个快捷方式 - 你可能需要修改你的注册表:
HKLM\软件\策略\Microsoft\Windows
NT\RPCRestrictRemoteClients=0
HKLM\Software\Policies\Microsoft\Windows NT\RPCEnableAuthEpResolution=1
让一切正常运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)