2

我需要在我的应用程序中维护分布式事务

假设 Service1 安装在 Server1 上

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

Service2 安装在 Server2 上

[ServiceContract]
IService2
{
    [OperationContract]
    Operation2();
}

并且客户端正在使用这两项服务

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

我应该在哪里准确安装 MSDTC,是否需要安装在 Server1、Server2 和客户端上

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

4

2 回答 2

1

您必须在客户端和服务器 1、服务器 2 上启用 MSDTC。

您应该在客户端上的 MSDTC 安全配置中允许出站。
您应该在您的服务器上允许入站和出站。
如果您的数据库在单独的机器上,它应该允许入站。

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

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

这是 WCF 与事务的一个很好的链接:Foundation: Transaction Propagation

于 2010-01-11T20:12:12.023 回答
0

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

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

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

使用所有不同的可能设置配置 WCF 服务可能非常棘手。我希望这可以帮助您入门。

于 2010-01-11T15:46:00.220 回答