protected virtual bool CallHandler(object message, object handler, MsgHandlerInfo mhi, IMessageBus bus) { if (handler is SagaBase) { if (SagaHandler == null) { throw new PermanentMessageProcessingException("Saga support has not been enabled"); } string id = null; if (bus != null && bus.CurrentMessageInfo != null) { id = bus.CurrentMessageInfo.CorrelationId; } bool isInitiator = mhi.InitiatedByGenericType.IsAssignableFrom(handler.GetType()); var b = SagaHandler.DispatchToSaga(id, message, isInitiator, false, (SagaBase)handler, delegate(SagaBase saga) { mhi.HandleMethod(saga, message); }); if (b == Sagas.SagaStateHelper.SagaDispatchResult.ConcurrentUpdateHandleLater) { //bus.HandleCurrentMessageLater(DateTime.Now.AddSeconds(1)); //throw new Exception("Should not happen"); throw new RetryMessageProcessingException(DateTime.Now.AddSeconds(1), "saga locked"); } return(true); } else { mhi.HandleMethod(handler, message); return(true); } }
protected virtual bool CallHandler(object message, object handler, MsgHandlerInfo mhi, IMessageBus bus) { if (handler is SagaBase) { if (SagaHandler == null) throw new PermanentMessageProcessingException("Saga support has not been enabled"); string id = null; if (bus != null && bus.CurrentMessageInfo != null) { id = bus.CurrentMessageInfo.CorrelationId; } bool isInitiator = mhi.InitiatedByGenericType.IsAssignableFrom(handler.GetType()); var b = SagaHandler.DispatchToSaga(id, message, isInitiator, false, (SagaBase)handler, delegate(SagaBase saga) { mhi.HandleMethod(saga, message); }); if (b == Sagas.SagaStateHelper.SagaDispatchResult.ConcurrentUpdateHandleLater) { //bus.HandleCurrentMessageLater(DateTime.Now.AddSeconds(1)); //throw new Exception("Should not happen"); throw new RetryMessageProcessingException(DateTime.Now.AddSeconds(1), "saga locked"); } return true; } else { mhi.HandleMethod(handler, message); return true; } }