这甚至是一个有效的问题吗?我有一个使用MSTDC的.NET Windows应用程序,它抛出异常:
System.Transactions.TransactionManagerCommunicationException:已禁用分布式事务管理器(MSDTC)的网络访问。请启用DTC MSDTC安全配置中的网络访问使用组件服务管理工具---> System.Runtime.InteropServices.COMException(0x8004D024):事务管理器已禁用其对远程/网络的支持 交易。 (来自HRESULT的异常:0x8004D024)在System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32) propgationTokenSize,Byte [] propgationToken,IntPtr managedIdentifier, GUID&安培; transactionIdentifier,OletxTransactionIsolationLevel& isolationLevel,ITransactionShim& transactionShim)......
我在安装了应用的PC上关注了the Kbalertz guide to enable MSDTC,但仍然出现错误。
我想知道这是否是数据库问题?如果是这样,我该如何解决?
答案 0 :(得分:111)
将此用于Windows Server 2008 r2和Windows Server 2012 R2
点击开始,点击运行,输入 dcomcnfg ,然后点击确定以打开组件服务。
在控制台树中,单击以展开组件服务,单击以展开计算机,单击以展开我的电脑,单击展开分布式事务处理协调器,然后单击本地DTC 。
右键单击本地DTC ,然后点击属性以显示本地DTC属性对话框。
点击安全标签。
勾选“网络DTC访问权限”复选框。
最后勾选“允许入站”和“允许出站”复选框。
点击应用,确定。
会弹出一条关于重新启动服务的消息。
点击确定即可。
参考:https://msdn.microsoft.com/en-us/library/dd327979.aspx
注意:有时本地计算机或服务器上的网络防火墙可能会中断您的连接,因此请务必为“允许入站”和创建规则允许C:\Windows\System32\msdtc.exe
答案 1 :(得分:101)
你甚至需要MSDTC吗?您遇到的升级通常是由在单个TransactionScope中创建多个连接引起的。
如果确实需要,则需要按照错误消息中的说明启用它。在XP上:
答案 2 :(得分:17)
我发现最好的调试方法是使用名为DTCPing的微软工具
我在旧公司网络上遇到过各种问题,我有一些提示:
根据我的经验,如果DTCPing能够设置从客户端发起并从服务器启动的DTC连接,那么您的交易不再是问题。
答案 3 :(得分:6)
还可以看到here如何从控制面板的services.msc打开MSDTC。
在触发器所在的服务器上,您需要转动MSDTC 服务。您可以点击START>设置>控制面板>行政工具>服务。找到名为“分布式事务处理协调器”的服务和右键单击(在其上和 选择)>启动。
答案 4 :(得分:4)
必须在服务器和客户端两个系统上启用MSDTC。
另外,请确保阻止RPC的系统之间没有防火墙
DTCTest是一个很好的小应用程序,可以帮助您解决任何其他问题。
答案 5 :(得分:4)
@丹,
我是否需要启用msdtc 交易工作?
仅限分布式事务 - 涉及多个连接的事务。请务必确保您只在交易中打开一个连接,并且不会升级 - 性能也会好得多。
答案 6 :(得分:0)
MSDTC 可以使用 MsDtc PowerShell 模块进行配置,例如:
# Import the module
Import-Module -Name MsDtc
# Set the DTC config
$dtcNetworkSetting = @{
DtcName = 'Local'
AuthenticationLevel = 'NoAuth'
InboundTransactionsEnabled = $true
OutboundTransactionsEnabled = $true
RemoteClientAccessEnabled = $true
RemoteAdministrationAccessEnabled = $true
XATransactionsEnabled = $false
LUTransactionsEnabled = $true
}
Set-DtcNetworkSetting @dtcNetworkSetting
# Restart the MsDtc service
Get-Service -Name MsDtc | Restart-Service
在将支持分布式事务的每台机器上运行(即运行 MSDTC 服务的机器)。