2015-04-01 64 views
2
[ServiceContract] 
public interface Iservice2 
{ 
    [OperationContract] 
    [TransactionFlow(TransactionFlowOption.Allowed)] 
    void UpdateService2(); 
} 

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

} 

客户端代码的2期或3阶段提交的作品在WCF


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

    Iservice2 test = new Iservice2Client(); 

    test.UpdateService2(); 

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

    scope.Complete(); 
} 

内部细节我想明白了2期或3期详细了WCF提交。

我从理论上理解2阶段提交的体系结构。

理解

  1. 服务1和服务2在不同的网址
  2. 托管上面做了分布式事务

问题

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

  2. 那么从客户那里直到交易完成的状态会一直保持吗? - 它是否保留数据库事务的参考?

  3. 当你得到并发请求时,WCF保证2请求将有2个不同的事务并且不会将它们聚集在一起 - 如果是的话它怎么知道它是2个不同的请求?

这个问题可能是基本的,但我期待了解上述概念,为我的项目设计解决方案。

+0

我找到了分布式事务如何工作的答案http://stackoverflow.com/a/494593/799329 – user799329 2015-04-07 11:20:19

回答

1

您的问题包含6个问题。我会尽量一次解决它们。

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

WCF使用WS-AtomicTransaction或OleTransaction通过MSDTC编排事务,并且这两个标准仅支持两阶段提交。

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

发生你问能大概只有谁写的WCF开发人员回答的问题。

做它暂时保存状态会话,这样,当实际提交被称为它可以承诺

类似于你描述必须在逻辑上发生,但它是如何工作的内部是一个过程不重要。那它确实工作重要。这由服务所在机器上的资源管理器进行管理。从msdn

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

原来是国家的会话保持从客户端活着,直到交易完成? - 它是否保留数据库事务的参考?

查看上述问题的答案。

当你并发请求做WCF保证2请求将有2个不同的交易并不会俱乐部在一起

它做的更好。

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

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

我期待理解上述概念设计一个解决方案,我的项目

也许你会更好试图了解分布式事务的窗口是如何工作的:

从临WCF 4:实用微软SOA实现通过Nishith帕塔克:

两阶段提交协议允许参与的所有节点分布式事务以原子方式参与......(并且)具有 三个阶段:活动阶段,阶段1和阶段2.在活动阶段,创建了 事务。上级资源经理(创建者的资源 )征募了其他资源经理,他们在交易中变得活跃。在阶段1中,创建者针对该事务发出提交命令 ,并且征募资源管理器 对它们是否准备提交做出响应。如果管理人员准备提交 ,则交易将移至阶段2,否则其将中止 。

在阶段2中,上级资源管理器会将一个 持久条目写入内部日志,然后向 征募资源管理器发出提交。一旦完成,上级资源管理器将开始发送提交到征募资源管理器,并且不管任何错误...将继续,直到所有 征募资源管理器已经被发送提交消息。然后 上级资源管理器将等待来自登记的资源管理器的提交 的确认以获得错误消息,或者直到发生超时。如果所有参与资源管理器都积极响应 ,上级资源管理器将清除日志条目 ,事务将结束。

+0

感谢您的回答汤姆。但是,我知道分布式事务的工作原理已经过测试。但是,我的这个问题的目的是为了更深入地理解它是如何工作的,例如2个请求在逻辑上是如何区分的等等。 – user799329 2015-04-01 23:39:01

+0

@ user799329 - 你说你想为你的项目设计一个解决方案。我假设你对web服务和事务有要求。如果是这种情况,那么你是否需要更深入的了解,因为你还没有决定使用WCF呢?我很想知道,一旦你发现了这些信息,你打算如何使用这些信息。谢谢 – 2015-04-02 07:44:07