public QueueException(QueueErrorCode errorCode, string message, Exception innerException = null, Dictionary <string, string> context = null) : base(message, innerException) { #region Initialization ErrorCode = errorCode; if (context != null) { foreach (var currentKeyValuePair in context) { Data.Add(currentKeyValuePair.Key, currentKeyValuePair.Value); } } #endregion }
/// <summary> /// Creates a new QueueErrorInfo from the given error code. /// </summary> /// <param name="errorCode">QueueErrorCode value.</param> /// <returns>QueueErrorInfo object.</returns> public static QueueErrorInfo FromErrorCode(QueueErrorCode errorCode) { var message = "An unexpected error occurred."; switch(errorCode) { case QueueErrorCode.ServerNotInitialized: message = "Server not initialized."; break; case QueueErrorCode.ServerInitializationFailed: message = "Server initialization failed."; break; case QueueErrorCode.ServerHostInitializationFailed: message = "Server host initialization failed."; break; case QueueErrorCode.CannotGetQueueInfo: message = "Cannot get queue info."; break; case QueueErrorCode.CannotCreateQueue: message = "Cannot create queue."; break; case QueueErrorCode.QueueAlreadyExists: message = "A queue with this name already exists."; break; case QueueErrorCode.CannotRemoveQueue: message = "Cannot remove queue."; break; case QueueErrorCode.QueueDoesNotExist: message = "A queue with this name does not exist."; break; case QueueErrorCode.CannotPurgeQueue: message = "Cannot purge queue."; break; case QueueErrorCode.CannotEnqueue: message = "Cannot put message on queue."; break; case QueueErrorCode.CannotDequeue: message = "Cannot take message from queue."; break; case QueueErrorCode.TransactionalQueueMustBePersisted: message = "To create a transactional queue, it must also be persisted."; break; } return new QueueErrorInfo {ErrorCode = errorCode, ErrorMessage = message}; }
/// <summary> /// Helper method to prepare and log queue exception. /// NOTE: If logger is null, exception will not be logged. /// </summary> public static QueueException PrepareAndLogQueueException(QueueErrorCode errorCode, string message, Exception innerException, string queueContext, string queueName = "", string address = "", Dictionary <string, string> context = null, IQueueLogger logger = null) { #region Preparing Queue Exception var queueException = new QueueException(errorCode, message, context: new Dictionary <string, string> { [CommonContextKeys.QueueContext] = queueContext }, innerException: innerException); if (!string.IsNullOrWhiteSpace(address)) { queueException.Data[CommonContextKeys.Address] = address; } if (!string.IsNullOrWhiteSpace(queueName)) { queueException.Data[CommonContextKeys.QueueName] = queueName; } if (context != null) { foreach (var currentItem in context) { queueException.Data[currentItem.Key] = currentItem.Value; } } #endregion #region Logging - Error logger?.Error(queueException, queueException.Message); #endregion #region Return return(queueException); #endregion }