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
        }
Beispiel #2
0
        /// <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
        }