public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger Test Storing a message!");

            var message = new ArchivedMessage(new TestMessage()
            {
                Description = "This is a test message with a random value of " + new Random().Next(0, int.MaxValue)
            });

            ICosmosDbContainer cosmosContainer = await _cosmosClient.GetContainer <ArchivedMessage>();

            CosmosDbResponse <ArchivedMessage> cosmosResponse = await cosmosContainer.Add(message.Id, message);

            return(new OkObjectResult($"Cosmos Response: {cosmosResponse.IsSuccessful}"));
        }
        public async Task Run([ServiceBusTrigger("%ServiceBusTopic%", "%ServiceBusSubscription%", Connection = "ServiceBusConnectionString")] string messageString, ILogger log)
        {
            MessageBase originalMessage = null;

            try
            {
                originalMessage = _messageReader.ReadMessage(messageString);
                var archivedMessage = new ArchivedMessage(originalMessage);

                if (archivedMessage.MessageTypeName.Equals(nameof(HealthCheckRequest)))
                {
                    await HandleHealthCheckRequest(_messageReader.ReadMessage <HealthCheckRequest>(messageString));
                }

                ICosmosDbContainer cosmosContainer = await _cosmosClient.GetContainer <ArchivedMessage>();

                CosmosDbResponse <ArchivedMessage> cosmosResponse =
                    await cosmosContainer.Add(archivedMessage.Id, archivedMessage);

                if (!cosmosResponse.IsSuccessful)
                {
                    throw new ApplicationException(
                              $"MessageStorage failed to write message {archivedMessage.Message.MessageId} of type {archivedMessage.Message.MessageType}. {cosmosResponse.ErrorMessage}");
                }
            }
            catch (Exception storeException)
            {
                try
                {
                    log.LogError(storeException, "exception saving to MessageStorage. OriginalMessage: " + messageString);
                    await _messageSender.SendException(storeException, originalMessage);
                }
                catch (Exception sendException)
                {
                    log.LogCritical(sendException, "Exception attempting to save an error message to the bus! This is very bad!");
                }
                throw;
            }
        }