C# WCF中的TransactionScope

C# WCF中的TransactionScope,c#,wcf,wcf-security,C#,Wcf,Wcf Security,下面是我的示例代码。它们都是来自客户端的同步服务调用。我这里的问题是,我的远程服务如何知道调用->ts.Complete() 我正在使用WSHttpbinding。我的问题是: WSHttpbinding和basicHttpBinding都支持事务吗 在“ts.Complete()”调用期间,或者在客户端范围内的异常期间,远程WCF服务是否会发生请求调用,以使事务管理器提交/回滚其作业 TransactionScope使用MSDTC: MSDTC是Microsoft分布式事务协调器的首字母缩写。

下面是我的示例代码。它们都是来自客户端的同步服务调用。我这里的问题是,我的远程服务如何知道调用->ts.Complete()

我正在使用WSHttpbinding。我的问题是:

  • WSHttpbinding和basicHttpBinding都支持事务吗
  • 在“ts.Complete()”调用期间,或者在客户端范围内的异常期间,远程WCF服务是否会发生请求调用,以使事务管理器提交/回滚其作业
    TransactionScope使用MSDTC:

    MSDTC是Microsoft分布式事务协调器的首字母缩写。 顾名思义,MSDTC是一个提供事务的Windows服务 分布式系统的基础设施。在本例中,是一个事务 指构建自治系统之间交互的一般方式 分布式系统中的代理。每个事务都是一个状态 具有四个关键属性的转换-酸属性:原子 (全部或无)、一致(合法)、孤立(独立于 并发事务)和持久性(一旦发生,就不能 废除)。有不同的技术可以实现ACID 属性,但最著名的是两阶段提交


    您应该从这篇文章开始:

    WSHttpbinding和basicHttpBinding都支持事务吗?

    您需要使用WSHttpBinding来使用TransactionScope,因为BasicHttpBinding不支持事务所需的WS-*标准

    在“ts.Complete()”调用期间或在客户端作用域中发生异常期间,远程wcf服务是否会发生请求调用,以使事务管理器提交/回滚其作业

    完整的调用不能保证所有内容都已提交。这会告诉事务管理器您已经完成了。正是对事务所有者的完整调用导致事务管理器通知各方提交或回滚。如果它不能与各方通信,它将抛出异常


    因此,为了回答这个问题,对子参与者(即不是所有者)的完整调用不会导致对事务管理器的调用,但是来自所有者参与者的完整调用会调用事务管理器,然后事务管理器将尝试提交。

    我问客户机将如何通知远程服务器有关事务范围的信息?在“ts.Complete()”调用期间?
    using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
    {
        try
        {
            ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
            obj.UpdateData();
            ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
            obj1.UpdateData();
            ts.Complete();
        }
        catch (Exception ex)
        {
            ts.Dispose();
        }
    }