2015-11-24 163 views
1

我有一个BizTalk服务器和BizTalk通过WCF-SQL向其发送消息的SQL服务器。 BizTalk服务器已经调用了该服务器超过一年没有问题。我今天早上突然不能来(星期五工作)。由于通讯问题,MSDTC事务管理器无法将事务推送到目标事务管理器

完整的错误调用WCF-SQL端点时,我得到的是:

A message sent to adapter "WCF-SQL" on send port "MyPort" with URI "mssql://mySQLServer" is suspended. 
Error details: System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException: 
The MSDTC transaction manager was unable to push the transaction to the destination transaction manager due to communication problems. 
Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers. (Exception from HRESULT: 0x8004D02A) 
at System.Transactions.Oletx.ITransactionShim.Export(UInt32 whereaboutsSize, Byte[] whereabouts, Int32& cookieIndex, UInt32& cookieSize, CoTaskMemHandle& cookieBuffer) 
at System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts) 

我已经按照从下列线说明: MSDTC on server 'server is unavailable

我已经运行msdtc -uninstall然后msdtc -install并重新启动服务数次。

我重新启动了服务器几次。

我可以连接到使用SQL Server Management Studio中的数据库试图从SQL服务器连接到在BizTalk Server结果时

DTCPing(当DTCPing上在BizTalk运行):

Problem:fail to invoke remote RPC method 
Error(0x6BA) at dtcping.cpp @303 
-->RPC pinging exception 
-->1722(The RPC server is unavailable.) 
RPC test failed 

从BizTalk将SQL当我得到这个(甚至认为DTCPing是在另一端运行)

Please refer to following log file for details: 
C:\Temp\DTCPing\myserv.log 
Invoking RPC method on dbaditest 
RPC test is successful 
++++++++++++RPC test completed+++++++++++++++ 
Please start PING from dbaditest to complete the test 

既不服务器正在运行防火墙

我完全没有办法尝试。

编辑:我可以确认其他服务器/计算机可以连接到SQL服务器。所以我必须假设它是BizTalk服务器是问题所在。

编辑2:我试图从BizTalk Server连接到网络上的另一个SQL服务器,并得到相同的错误。我瞬间从投掷我的手,重建我的开发环境了 - 雪地:(

编辑3:我可以从BizTalk到SQL Server telnet到135端口,所以没有什么阻止它

编辑4: DTCTester结果:

tablename= #dtc24449 
Creating Temp Table for Testing: #dtc24449 
Warning: No Columns in Result Set From Executing: 'create table #dtc24449 (ival int)' 
Initializing DTC 
Beginning DTC Transaction 
Enlisting Connection in Transaction 
Error: 
SQLSTATE=25S12,Native error=-2147168242,msg='[Microsoft][ODBC SQL Server Driver]Distributed transaction error' 
Error: 
SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Invalid cursor state 
Typical Errors in DTC Output When 
a. Firewall Has Ports Closed 
-OR- 
b. Bad WINS/DNS entries 
-OR- 
c. Misconfigured network 
-OR- 
d. Misconfigured SQL Server machine that has multiple netcards. 
Aborting DTC Transaction 
Releasing DTC Interface Pointers 
Successfully Released pTransaction Pointer. 
+0

要确认,您已经重新启动了BizTalk和SQL服务器? – Gruff

+0

当此问题开始时BizTalk或SQL服务器端发生任何更改,如修补程序或其他内容后重新启动。您是否可以验证MSDTC配置,如链接所示:https://msdn.microsoft.com/zh-cn/library/aa544733(v=cs.70).aspx –

+0

我添加了一个编辑。这是BizTalk服务器的问题。据我所知,没有任何改变。这是一个开发环境,当我离开它时,所有的东西都还在(我所有的窗口,Visual Studio仍然打开)。 – Bensonius

回答

0

哇,我终于想通了。正如大多数人所说,它必须是某种网络问题(我并不反对)。踢球者是,我的电脑被允许从DTC到SQL,但运行在我的电脑上的虚拟机没有。最终结果是我们被迫在上周安装了Symantec Endpoint Protection(就在我离开周末之前)。

我卸载它和所有它现在的工作。

0

不知道这是否会帮助,但认为我会提到它。

从这两个服务器:

开始 - >管理工具 - >组件服务

展开组件服务 - >计算机 - >我的电脑 - >分布式事务处理协调器并右键单击本地DTC。进入安全标签并检查那里的设置。

  • 启用网络DTC访问
  • 允许远程客户端
  • 允许进/出所需
  • 选择正确的验证
  • 启用XA事务的要求

MSDTC服务应该自动重新启动。这些设置可能会在周五以后发生变化?我有原因不明这种情况发生前

+0

我在每台服务器上都做了几次这样的操作。 – Bensonius

1
  1. 是您的BizTalk/SQL计算机名称独特之处? (与其他机器不冲突)

  2. 您可以通过BizTalk服务器将DTC连接到另一台SQL服务器吗?我建议您使用DTCTester 测试DTC连接而不是DTCPing。

+0

是的,名字是唯一的。不,我不能将DTC从我的BizTalk服务器连接到另一个SQL服务器(请参阅原始问题中的编辑) – Bensonius

+0

我将DTCTester结果添加到原始问题。 – Bensonius

+0

1722错误通常表示它是网络连接问题。所以我不认为重建你的BizTalk服务器环境将解决你的问题。你可以尝试一下:1.联系你的公司的网络团队,看看他们是否阻止了网络基础设施中的一些端口。 2.使用Wireshark捕获biztalk服务器中的所有网络包以查看发生了什么。祝你好运。 – Zee

1

您已经在此处采取了一些措施,但请仔细阅读MSDN Article on Troubleshooting MSDTC

我担心有人将您的另一台服务器镜像到您的设备上,但卸载并重新安装MSDTC应该修复此问题。也可能需要检查这些注册表值(从上面的链接):

Windows通过要求对RPC接口进行身份验证调用来增强安全性。该功能可通过EnableAuthEpResolution和RestrictRemoteClients注册表键进行配置。要确保远程计算机能够访问RPC接口,请按照下列步骤操作:

单击开始,单击运行,键入regedit.exe,然后单击确定以启动注册表编辑器。

定位到HKEY_LOCAL_MACHINE \ SOFTWARE \政策\微软\ Windows NT的

在RPC项,创建记载值以下DWORD项。如果RPC密钥不存在,那么它必须被创建。

DWORD entry    Default value Recommended value 
EnableAuthEpResolution 0 (disabled) 1 
RestrictRemoteClients 1 (enabled) 0 

关闭注册表编辑器。

重新启动MSDTC服务。

+0

我做了一些Windows更新,然后我做了这个,没有改变。我仍然收到原始问题中发布的相同错误。 – Bensonius