当前位置:  开发笔记 > 开发工具 > 正文

MSDTC问题与ADO.NET实体框架中的事务

如何解决《MSDTC问题与ADO.NET实体框架中的事务》经验,为你挑选了1个好方法。

在我们当前的项目中,我们使用ADO.NET Entity Framework作为应用程序的数据层.有些任务需要在事务中运行,因为在数据库中有很多工作要做.我正在使用TransactionScope来包围这些任务.

using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    // Do something...
    transactionScope.Complete();
}

问题是我在使用TransactionScope时发生异常:

System.Data.EntityException:基础提供程序在Open上失败.---> System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败.---> System.Runtime.InteropServices.COMException(0x80004005):错误HRESULT E_FAIL已从调用COM组件返回.

似乎此错误必须与MSDTC(Microsoft分布式事务处理协调器)执行某些操作.当我更改MSDTC的安全配置时,会抛出另一个异常:

System.Data.EntityException:基础提供程序在Open上失败.---> System.Transactions.TransactionManagerCommunicationException:已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具在MSDTC的安全配置中启用DTC以进行网络访问.

但是,MSDTC已配置,TransactionScope将导致错误.有人知道这里出了什么问题吗?



1> Nikolay R..:

默认情况下,MSDTC禁用网络访问.为了让它工作,你应该去

控制面板 - >管理工具 - >组件服务 - >组件服务 - >计算 - >我的电脑 - >右键单击 - >属性 - > MSDTC->安全配置

并选中以下复选框Network DTC Access,Allow Inbound,Allow Outbound.应根据您的环境选择认证.您可能还想查看DTCPing工具来调试分布式事务.为了给你一个捷径 - 你可能需要修改你的注册表:

HKLM\Software\Policies\Microsoft\Windows NT\RPCRestrictRemoteClients = 0 HKLM\Software\Policies\Microsoft\Windows NT\RPCEnableAuthEpResolution = 1

让一切运转起来.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有