Exemple #1
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "POST", Route = "orders")]
            //DTOs.Order newOrder, // there is a bug with deserialization: https://github.com/Azure/azure-functions-host/issues/3370
            HttpRequest req,

            [ServiceBus("neworders", Connection = "ServiceBus")]
            IAsyncCollector <Messages.NewOrderMessage> messages,

            ILogger log)
        {
            log.LogInformation("SubmitNewOrder HTTP trigger function processed a request.");

            if (!await req.CheckAuthorization("api"))
            {
                return(new UnauthorizedResult());
            }

            var newOrder = req.Deserialize <DTOs.Order>();

            newOrder.Id      = Guid.NewGuid();
            newOrder.Created = DateTime.UtcNow;

            var identity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
            var userId   = identity.Name;

            var newOrderMessage = new Messages.NewOrderMessage
            {
                Order  = Mapper.Map <Messages.Order>(newOrder),
                UserId = userId
            };

            try
            {
                await messages.AddAsync(newOrderMessage);

                await messages.FlushAsync();
            }
            catch (ServiceBusException sbx)
            {
                // TODO: retry policy...
                log.LogError(sbx, "Service Bus Error");
                throw;
            }

            return(new OkResult());
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "POST", Route = "api/orders")]
            HttpRequest req,

            [ServiceBus("neworders", Connection = "ServiceBus")]
            IAsyncCollector <Messages.NewOrderMessage> messages,

            ILogger log)
        {
            log.LogInformation("SubmitNewOrder HTTP trigger function processed a request.");

            if (!await req.CheckAuthorization("api"))
            {
                return(new UnauthorizedResult());
            }

            var newOrder = req.Deserialize <DTOs.Order>();

            newOrder.Id      = Guid.NewGuid();
            newOrder.Created = DateTime.UtcNow;

            var identity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
            var userId   = identity.Name;

            var newOrderMessage = new Messages.NewOrderMessage
            {
                Order  = Mapper.Map <Entities.Order>(newOrder),
                UserId = userId
            };

            try
            {
                await messages.AddAsync(newOrderMessage);

                await messages.FlushAsync();
            }
            catch (ServiceBusException sbx)
            {
                // TODO: think about retry policy (e.g. https://github.com/jeffhollan/functions-csharp-queue-exponential/blob/master/ExponentialRetry.cs)
                log.LogError(sbx, "Service Bus Error");
                throw;
            }

            return(new OkResult());
        }
Exemple #3
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "POST", Route = "orders")]
            //DTOs.Order newOrder, // there is a bug with deserialization: https://github.com/Azure/azure-functions-host/issues/3370
            HttpRequest req,

            [ServiceBus("neworders", Connection = "ServiceBus")]
            IAsyncCollector <Messages.NewOrderMessage> messages,

            ILogger log)
        {
            log.LogInformation("SubmitNewOrder HTTP trigger function processed a request.");

            var newOrder = req.Deserialize <DTOs.Order>();

            newOrder.Id      = Guid.NewGuid();
            newOrder.Created = DateTime.UtcNow;

            var newOrderMessage = new Messages.NewOrderMessage
            {
                Order = Mapper.Map <Entities.Order>(newOrder)
            };

            try
            {
                log.LogInformation("Sending new order message to Queue: {0}", newOrderMessage);
                await messages.AddAsync(newOrderMessage);

                await messages.FlushAsync();
            }
            catch (ServiceBusException sbx)
            {
                // TODO: retry policy...
                log.LogError(sbx, "Service Bus Error");
                throw;
            }

            return(new OkResult());
        }