/// <inheritdoc /> public void End(Exception ex = null) { if (ex != null) { log.Debug("Exception occurred - skipping operation auditing"); return; } log.Debug("Processing incoming message"); var now = DateTime.Now; var operationId = GetCurrentOperationId(); log.DebugFormat("Current operation ID = {0}", operationId); if (string.IsNullOrEmpty(operationId)) { return; } var operation = operationProvider.Find(operationId); if (operation == null) { log.WarnFormat("Unable to find an operation with ID = {0}. Some tracking " + "information may be lost.", operationId); return; } Operation.Current = operation; var messageTypes = GetEnclosedMessageTypes(); foreach (var receivedMessageType in messageTypes) { var typeName = receivedMessageType.FullName; var stage = new OperationStage(typeName, now); log.DebugFormat("Pushing operation stage, received message type = {0}", typeName); operation.Push(stage); } }