2010-01-11 58 views
2

我必须保持我的应用程序的分布式事务凡MSDTC需要安装在分布式事务的情况下

假设服务1安装在Server1上

[ServiceContract] 
IService1 
{ 
    [OperationContract] 
    Operation1(); 
} 

安装在Server2上

[ServiceContract] 
IService2 
{ 
    [OperationContract] 
    Operation2(); 
} 
客服2

和客户端正在使用这两种服务

using (TransactionScope ts = new TransactionScope()) 
{ 
    Service1Proxy.Operation1(); 
    Service2Proxy.Operation2(); 
} 

我应该在哪里正好安装MSDTC,做到这一点需要要在 服务器1,服务器安装和客户端

是它需要在这种情况下,任何额外的配置?

回答

1

你将不得不对客户端和服务器1,服务器2

使MSDTC你应该允许出境的MSDTC的客户端上的安全配置。
您应该允许服务器上的入站和出站。
如果您的数据库位于单独的计算机上,则应允许入站。

我跑到使用MSDTC的一个问题是不要忘记在防火墙的例外列表中允许MSDTC。

查看您的代码片段,您还需要在操作界面上添加Transactionflow attribut。

这里是交易一个很好的链接,WCF:Foundation: Transaction Propagation

+0

嗨pididdy, 感谢您回应我的查询。 我已经在配置文件中设置了transaflow设置 transactionFlow =“true” 没关系,我需要事务流属性为服务接口中的每个方法。 – Brainchild 2010-01-12 05:28:32

+0

是的,你需要把每个服务操作的属性。阅读我的答案中的文章,这是一个很好的开始。 – pdiddy 2010-01-12 13:41:57

+0

当然,您只需要将操作中的属性设置为事务性操作即可。 – pdiddy 2010-01-12 16:00:49

0

我会小心这个设置。我已经使用“TransactionScope”以编程方式执行我想为测试目的运行的SQL命令,然后回滚,但我没有尝试通过WCF调用传播“TransactionScope”。

粗略的Google搜索在MSDN上发现了此文档:http://msdn.microsoft.com/en-us/magazine/cc163432.aspx。本文档说明您需要服务接口上的特殊属性来使您的TransactionScope跨服务边界。

至于“安装”MSDTC,你不会安装它。它应该已经成为Windows安装的一部分。但是,默认情况下,MSDTC不能与网络上的远程客户端一起使用;此设置是出于安全目的。以下链接显示如何在Windows Server 2003中启用MSDTC以与远程客户端协同工作:http://support.microsoft.com/kb/817064。对于其他版本的Windows,请尝试使用谷歌搜索“MSDTC网络访问”。我相信您需要在托管要包含在远程事务中的服务的每台服务器上设置此配置。

WCF服务配置所有不同的可能设置非常棘手。我希望这可以帮助你开始。

相关问题