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绑定并且是单向的 解决方法
您可以在TransactionScope中使用TransactionScopeOption.Suppress:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) { AuditServiceProxy.Write("Authentication failed for user " + username); } 或将此抑制代码放入NonTransactionalLoggingService方法调用中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |