Beispiel #1
0
        public override void OnEvent(MsgEnlistTransactionEvent e)
        {
            CoordinatorEnlistment coordinator = e.Coordinator;

            if (!base.state.TransactionManager.Settings.NetworkInboundAccess)
            {
                base.ForwardEnlistmentEventToSubordinate(e);
                coordinator.StateMachine.ChangeState(base.state.States.CoordinatorInitializationFailed);
            }
            else
            {
                CoordinationContext currentContext = e.Body.CurrentContext;
                RegistrationProxy   proxy          = base.state.TryCreateRegistrationProxy(currentContext.RegistrationService);
                if (proxy == null)
                {
                    coordinator.ContextManager.Fault = base.state.Faults.RegistrationProxyFailed;
                    coordinator.StateMachine.ChangeState(base.state.States.CoordinatorInitializationFailed);
                }
                else
                {
                    try
                    {
                        coordinator.SetRegistrationProxy(proxy);
                        EnlistmentOptions options = coordinator.CreateEnlistmentOptions(currentContext.Expires, currentContext.ExpiresPresent, currentContext.IsolationLevel, currentContext.IsolationFlags, currentContext.Description);
                        base.state.TransactionManagerSend.EnlistTransaction(coordinator, options, e);
                        e.StateMachine.ChangeState(base.state.States.CoordinatorEnlisting);
                    }
                    finally
                    {
                        proxy.Release();
                    }
                }
            }
        }
 public void SendFault(Microsoft.Transactions.Wsat.Messaging.RequestAsyncResult result, Fault fault)
 {
     if (DebugTrace.Warning)
     {
         DebugTrace.Trace(TraceLevel.Warning, "Sending {0} fault to registration participant", fault.Code.Name);
     }
     this.state.Perf.FaultsSentCountPerInterval.Increment();
     RegistrationProxy.SendFaultResponse(result, fault);
 }
        public void SendRegisterResponse(Microsoft.Transactions.Wsat.Protocol.TransactionEnlistment enlistment, Microsoft.Transactions.Wsat.Messaging.RequestAsyncResult result, ControlProtocol protocol, EndpointAddress coordinatorService)
        {
            RegisterResponse response = new RegisterResponse(this.state.ProtocolVersion)
            {
                CoordinatorProtocolService = coordinatorService
            };

            if (DebugTrace.Info)
            {
                DebugTrace.TxTrace(TraceLevel.Info, enlistment.EnlistmentId, "Sending RegisterResponse for {0}", protocol);
            }
            RegistrationProxy.SendRegisterResponse(result, ref response);
        }