我需要在我的应用程序中维护分布式事务
假设Service1安装在Server1上
[ServiceContract]
IService1
{
[OperationContract]
Operation1();
}
Service2安装在Server2上
[ServiceContract]
IService2
{
[OperationContract]
Operation2();
}
并且客户端正在使用这两项服务
using (TransactionScope ts = new TransactionScope())
{
Service1Proxy.Operation1();
Service2Proxy.Operation2();
}
我应该在哪里准确安装MSDTC,是否需要安装 Server1,Server2和客户端
在这种情况下是否需要任何其他配置?
答案 0 :(得分:1)
您必须在客户端和服务器1,服务器2上启用MSDTC。
您应该在客户端的MSDTC安全配置中允许出站
您应该允许服务器上的入站和出站
如果您的数据库位于单独的计算机上,则应允许入站。
我使用MSDTC遇到的一个问题是,不要忘记在防火墙例外列表中允许MSDTC。
查看您的代码段,您还需要在操作界面上添加Transactionflow attribut。
以下是WCF与交易的良好链接:Foundation: Transaction Propagation
答案 1 :(得分:0)
我对这个设置要小心。我已经使用“TransactionScope”以编程方式执行我想要运行的SQL命令以进行测试然后回滚,但我还没有尝试通过WCF调用传播“TransactionScope”。
粗略的Google搜索在MSDN上找到了此文档:http://msdn.microsoft.com/en-us/magazine/cc163432.aspx。此文档说明您需要在Service接口上使用特殊属性才能使TransactionScope跨服务边界。
就“安装”MSDTC而言,您不需要安装它。它应该已经是Windows安装的一部分。但是,默认情况下,MSDTC不能与网络上的远程客户端一起使用;此设置用于安全目的。这是一个链接,显示如何启用MSDTC以使用Windows Server 2003中的远程客户端:http://support.microsoft.com/kb/817064。对于其他版本的Windows,请尝试使用Google搜索“MSDTC网络访问”。我相信您需要在托管要包含在远程事务中的服务的每台服务器上设置此配置。
使用所有不同的可能设置配置WCF服务非常棘手。我希望这可以帮助你开始。