【问题标题】:Internal details of how 2 phase or 3 phase commit works over WCF2 阶段或 3 阶段提交如何通过 WCF 工作的内部细节
【发布时间】:2015-06-05 16:26:03
【问题描述】:
[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. 上面做了一个分布式事务

问题

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

  2. 那么在事务完成之前,状态会话是否从客户端保持活动状态? - 是否保留数据库事务的引用?

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

这个问题可能是初级的,但是我希望了解上述概念来为我的项目设计解决方案。

【问题讨论】:

标签: .net wcf transactions


【解决方案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:Nishith Pathak 的实用 Microsoft SOA 实施:

两阶段提交协议允许所有节点参与 分布式事务以原子方式参与......(并且)有 三个阶段:活动,阶段 1 和阶段 2。在活动阶段 事务被创建。上级资源经理(资源 创建者的经理)招募其他资源经理,他们 在交易中变得活跃。在第 1 阶段,创建者发出 事务的提交命令,以及登记的资源管理器 回应他们是否准备承诺。如果管理人员是 准备提交,事务将进入阶段 2,否则 将中止。

在第 2 阶段,上级资源经理将编写一个 持久进入内部日志,然后向 入伍的资源经理。一旦完成,上级资源 manager 将开始将提交发送到登记的资源 经理们,无论有什么错误……将一直持续到所有 已登记的资源管理器已收到提交消息。然后 上级资源管理器将等待提交的确认 从登记的资源管理器中获取错误消息,或直到 发生超时。所有入伍的资源经理都应该做出回应吗 对提交持积极态度,上级资源经理将擦除 日志条目,事务将结束。

【讨论】:

  • 感谢汤姆的回答。但是,我知道分布式事务有效并且已经对其进行了测试。但是,我提出这个问题的目的是更深入地了解它是如何工作的,例如 2 个请求如何在逻辑上进行区分等等。
  • @user799329 - 你说你想为你的项目设计一个解决方案。我假设您需要 Web 服务和事务。如果是这种情况,那么您是否因为尚未决定使用 WCF 而寻求更深入的了解?我很想知道您在发现这些信息后打算如何使用它。谢谢
猜你喜欢
  • 2021-10-08
  • 2013-12-07
  • 1970-01-01
  • 2012-07-20
  • 2011-11-15
  • 2012-06-27
  • 2012-08-14
  • 2011-11-24
相关资源
最近更新 更多