private async Task <MessagingContext> HandleNotifyException(Exception exception, MessagingContext context) { Logger.Error(exception.Message); using (var dbContext = _createContext()) { var repository = new DatastoreRepository(dbContext); if (context.NotifyMessage.EntityType == typeof(InMessage) || context.NotifyMessage.EntityType == typeof(InException)) { var inException = InException.ForEbmsMessageId(context.EbmsMessageId, exception); repository.InsertInException(inException); if (context.NotifyMessage.EntityType == typeof(InMessage)) { Logger.Debug("Fatal fail in notification, set InMessage(s).Status=Exception"); repository.UpdateInMessage(context.EbmsMessageId, i => i.SetStatus(InStatus.Exception)); } } else if (context.NotifyMessage.EntityType != typeof(OutMessage) || context.NotifyMessage.EntityType == typeof(OutException)) { var outException = OutException.ForEbmsMessageId(context.EbmsMessageId, exception); repository.InsertOutException(outException); if (context.NotifyMessage.EntityType == typeof(OutMessage) && context.MessageEntityId != null) { Logger.Debug("Fatal fail in notification, set OutMessage.Status=Exception"); repository.UpdateOutMessage( context.MessageEntityId.Value, o => o.SetStatus(OutStatus.Exception)); } } if (context.MessageEntityId != null) { Logger.Debug("Abort retry operation due to fatal notification exception, set Status=Completed"); repository.UpdateRetryReliability( context.MessageEntityId.Value, r => r.Status = RetryStatus.Completed); } await dbContext.SaveChangesAsync(); } return(new MessagingContext(exception)); }
private async Task InsertReferencedInException( MessagingContext messagingContext, CancellationToken cancellation) { using (DatastoreContext context = _createContext()) { var repository = new DatastoreRepository(context); var exception = InException.ForEbmsMessageId( messagingContext.AS4Message?.FirstSignalMessage?.RefToMessageId, new Exception(messagingContext.ErrorResult.Description)); repository.InsertInException(exception); await context.SaveChangesAsync(cancellation).ConfigureAwait(false); } }
private async Task InsertInExceptionsForNowExceptionedInMessageAsync( IEnumerable <SignalMessage> signalMessages, ErrorResult occurredError, ReceivingProcessingMode receivePMode) { if (signalMessages.Any() == false) { return; } using (DatastoreContext dbContext = _createDatastoreContext()) { var repository = new DatastoreRepository(dbContext); foreach (SignalMessage signal in signalMessages.Where(s => !(s is PullRequest))) { var ex = InException.ForEbmsMessageId(signal.MessageId, occurredError.Description); await ex.SetPModeInformationAsync(receivePMode); Logger.Debug( $"Insert InException for {signal.GetType().Name} {signal.MessageId} with {{Exception={occurredError.Description}}}"); repository.InsertInException(ex); } IEnumerable <string> ebmsMessageIds = signalMessages.Select(s => s.MessageId).ToArray(); repository.UpdateInMessages( m => ebmsMessageIds.Contains(m.EbmsMessageId), m => { Logger.Debug($"Update {m.EbmsMessageType} InMessage {m.EbmsMessageId} Status=Exception"); m.SetStatus(InStatus.Exception); }); await dbContext.SaveChangesAsync(); } }