c# – 从事务中排除操作

给定启用事务流的事务感知绑定和具有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方法调用

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...