我有需要保存在两个组件(A,B)中的数据。 组件 C 使用 WCF 与 B 对话,并使用 .Net Remoting 与 A 对话。 由于 C 使用 WCF 与 B 对话,我正在使用 TransactionScope(使用 WCF 传递事务的问题)。 C和A在同一个系统中。 B 在不同的系统中。 只有在 A 和 B 中 Save 都成功时,才会发生数据提交。 代码如下所示:
`using(TransactionScope)
{
isSuccessX = serverB.Save(dataX);
isSuccessY = serverA.Save(dataY);
if(isSuccessX && isSuccessY)
{
TransactionScope.Complete();
}
}`
A、B、C在同一个系统时,数据保存没有问题。 当 (A,C) 和 B 在不同的系统中时,我们看到错误:“无法解组流动的事务。发生以下异常:与底层事务管理器的通信失败。内部异常:” 我已经允许防火墙中的所有程序\端口。 我允许远程客户端在组件服务中使用 DTC。 关于如何使这项工作有任何想法吗? 关于此工作流的替代方案的建议?
我尝试了 DTCPing,在组件服务中启用了远程客户端。
systemB 的主机名与systemA 的hosts 文件中提到的主机名不匹配。因此,系统 A 和系统 B 之间不会创建事务。事务是在不修改 ComponentServices 的 LocalDTC 属性中的任何内容的情况下创建的。