2阶段或3阶段提交如何在WCF上工作的内部细节

时间:2015-04-01 05:54:43

标签: .net wcf transactions

[ServiceContract]
public interface Iservice2
{
    [OperationContract]
    [TransactionFlow(TransactionFlowOption.Allowed)]
    void UpdateService2();
}

[ServiceContract]
public interface Iservice1
{
    [OperationContract]
    [TransactionFlow(TransactionFlowOption.Allowed)]
    void upload();

}

客户代码


using (var scope = new TransactionScope())
{
    IserviceClient client = new Iservice1Client();
    client.upload();

    Iservice2 test = new Iservice2Client();

    test.UpdateService2();

    MessageBox.Show("All is well!!!");

    scope.Complete();
}

我希望通过WCF详细了解2阶段或3阶段提交。

我理论上理解了2阶段提交的架构。

了解

  1. service1和service2托管在不同的URL中
  2. 以上是分布式交易
  3. 问题

    1. 当WCF配置为PerCall时,分布式事务如何在WCF内部发生 - 它是否会暂时将状态保存到会话中,以便在调用实际提交时它可以提交?

    2. 州内的会议是否一直存在,直到交易完成为止? - 它是否保留了DB事务的引用?

    3. 当您收到并发请求时,WCF会保证2个请求会有2个不同的交易,并且不会将它们组合在一起 - 如果是这样,它如何知道它是2个不同的请求?

    4. 问题可能是基本问题,但我希望了解上述概念,为我的项目设计解决方案。

1 个答案:

答案 0 :(得分:1)

您的问题包含大约6个问题。我将尝试一次解决一个问题。

我想通过WCF详细了解2阶段或3阶段提交。

WCF通过MSDTC使用WS-AtomicTransaction或OleTransaction来协调事务,这两个标准仅支持两阶段提交。

当WCF配置为PerCall时,分布式事务如何在WCF内部发生

您提出的问题可能只能由编写WCF的开发人员来回答。

会暂时将状态保存到会话中,以便在调用实际提交时提交

与您描述的过程类似的过程必须在逻辑上发生,但其工作方式的内部并不重要。它实际上工作 非常重要。这由该服务所在的机器上的资源管理器管理。来自msdn

  

对于分布式事务,每台计算机都有一个本地事务   经理。当一个事务在多台计算机上工作时,   事务管理器通过与其他事务管理器交互   无论是上级还是下级关系。这些关系是   仅与特定交易相关。

那么各州的会议是否一直存在,直到交易完成为止? - 它是否保留了数据库交易的参考?

见上述问题的答案。

当您收到并发请求时,WCF会保证2个请求将有2个不同的交易并且不会将它们联合起来

最好。

如果是这样,它是如何知道它是2个不同的请求?

当请求进入时,将调度线程以服务该请求。如果WCF无法区分两个不同的传入请求,那么我不认为Microsoft会将其作为企业级Web服务平台发布。

我希望了解上述概念,为我的项目设计解决方案

也许您最好不要试图了解分布式事务如何在Windows上运行:

来自Pro WCF 4:实用的Microsoft SOA实现作者:Nishith Pathak:

  

两阶段提交协议允许所有节点参与   分布式事务以原子方式参与...(和)具有   三个阶段:活跃阶段,阶段1阶段和阶段2.在活跃阶段   交易已创建。优秀的资源管理器(资源   创建者的经理)征求其他资源经理的意见   在交易中变得活跃。在阶段1中,创建者发布   事务的commit命令和登记的资源管理器   回答他们是否准备承诺。如果经理是   准备提交,交易将转移到第2阶段,否则它   会中止。

     

在第2阶段,优秀的资源管理器将编写一个   持久进入内部日志,然后发出提交   入伍的资源管理者。一旦完成,优越的资源   经理将开始将提交发送到登记的资源   管理人员,无论有任何错误......都将持续到所有人   已登记的资源管理器已发送提交消息。那么   优秀的资源管理器将等待提交的确认   来自登记的资源管理器,出现错误消息,或者直到a   超时发生。是否所有入伍的资源管理者都应对   积极的提交,优秀的资源管理器将擦除   日志条目,交易将结束。