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