【问题标题】:Wcf transactionWcf 事务
【发布时间】:2010-04-07 13:47:47
【问题描述】:

有没有办法在 wcf 操作中知道事务已提交?

好的,第二次尝试更具体。

我获得了一个 WCF 服务,该服务具有允许事务流的操作。

现在,当客户端调用我的 wcf 服务时,它可以进行事务处理。但我的服务也对客户端上的交易成功这一事实感兴趣。因为在我的 wcf 服务级别上,如果一切顺利的话。它还有其他事情要做,但前提是所有事务都已提交......

有什么我可以订阅的活动之类的吗?

【问题讨论】:

  • pdiddy 我的男人!你厌倦了所有的歌声和东西,决定做一个 WCF 服务?尊重!
  • 你能说得更具体些吗
  • 你的问题甚至不押韵。

标签: c# .net wcf


【解决方案1】:

这取决于服务本身以及您处理交易的方式。如果你是在transactions in WCF through WS-Transaction,那么如果对客户端的调用无一例外地成功,你可以假设交易发生了。

但是,如果这是在另一个事务的上下文中,那么在包含事务完成之前,您无法确定该事务是否通过。

即使您使用TransactionScope class,如果您启用了使用交易的服务,您仍然必须考虑包含交易(如果有的话)。

您必须提供与通话相关的交易地点的更多信息,以获得更完整的答案。

【讨论】:

  • 是否有类似的事件我可以订阅以获得交易已提交的通知?
【解决方案2】:

尝试在允许 TransactionFlow 的操作中使用上面的操作行为属性:

[OperationBehavior(TransactionScopeRequired=true)]

如果事务从客户端流出,则服务将使用它。

【讨论】:

    【解决方案3】:
    bool isTransactionComplete = true;
    try
    {
        using (TransactionScope trScope = new TransactionScope(TransactionScopeOption.Required))
        {
            //some work
            trScope.Complete();
        }
    }
    catch (TransactionAbortedException e)
    {
        //Transaction holder got exception from some service
        //and canceled transaction
        isTransactionComplete = false;
    }
    catch//other exception
    {
        isTransactionComplete = false;
        throw;
    }
    
    if (isTransactionComplete)
    {
        //Success 
    }
    

    正如 casperOne 所写,它取决于设置。但是您应该注意像

    这样的复杂事务

    1) 一个服务实例的会话服务和同时事务

    2) 交易内的交易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2012-04-11
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      相关资源
      最近更新 更多