加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从事务中排除操作

发布时间:2020-12-16 01:47:56 所属栏目:百科 来源:网络整理
导读:给定启用事务流的事务感知绑定和具有TransactionFlowOption.Allowed的操作Op1,是否可以使从操作Op1调用的不同操作Op2不参与事务,使得任何操作Op2永远不会回滚以防万一操作失败Op1 插图 // Op1: LogOnUserOperationBehavior(TransactionScopeRequired = true)
给定启用事务流的事务感知绑定和具有TransactionFlowOption.Allowed的操作Op1,是否可以使从操作Op1调用的不同操作Op2不参与事务,使得任何操作Op2永远不会回滚以防万一操作失败Op1

插图

// Op1: LogOnUser
OperationBehavior(TransactionScopeRequired = true)]
public bool LogOnUser(String username,String password)
{
    // AuditWriteProxy declaration and instantiation
    var valid = false;

    /* Validation logic */

    // If validation failed
    if(!valid)
    {
        // Invoke an op in an Audit Service. 
         // Op2 = AuditService.Write
        // **MUST NOT BE ROLLED BACK EVEN AFTER WE [throw]**
       AuditServiceProxy.Write("Authentication failed for user " + username);

        throw new FaultException<AuthenticationFault>("Validation failed");
        // After throw,we expect everything transactional to rollback
    }

    AuditServiceProxy.Write("User " + username + " authenticated successfully");

    return true;
}

笔记:

> AuditService.Write操作使用msmq绑定并且是单向的
>我在AuditService.Write操作合同上尝试了TransactionFlowOption.NotAllowed,在实现上尝试了TransactionScopeRequired = false.

解决方法

您可以在TransactionScope中使用TransactionScopeOption.Suppress:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) 
{ 
   AuditServiceProxy.Write("Authentication failed for user " + username); 
}

或将此抑制代码放入NonTransactionalLoggingService方法调用中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读