示例#1
0
        public async Task <OrchestrationResultModel> RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            //Retrieve message from trigger to consume
            var orchestratorAction = context.GetInput <OrchestrationActionModel>();

            OrchestrationResultModel result = null;

            try
            {
                //Determine the action to take and generate a result
                var activity = orchestratorAction.Event switch
                {
                    SubscriptionEvent.Create => Constants.DurableActivity.Create,
                    SubscriptionEvent.Update => Constants.DurableActivity.Update,
                    SubscriptionEvent.Suspend => Constants.DurableActivity.Suspend,
                    SubscriptionEvent.Delete => Constants.DurableActivity.Delete,
                    SubscriptionEvent.Reinstate => Constants.DurableActivity.Reinstate,
                    _ => throw new NotImplementedException("No handler for orchestration event.")
                };

                //Call the correct activity based on the orchestration event
                result = await context.CallActivityAsync <OrchestrationResultModel>(activity, orchestratorAction);
            }
            catch (Exception ex)
            {
                //Catch any exceptions so that a response can be sent back to Stactize.
                //This ensures the system is up to date and relevent client/administrator emails are sent
                result = orchestratorAction.CreateFailedResult(new FailureMessageModel
                {
                    FriendlyMessage = $"Oops! Something went wrong while trying to action against subscription with Id {orchestratorAction.SubscriptionId}",
                    DetailedMessage = ex.Message
                });
            }

            //Call the CompleteAction activity to send the response back to Stactize
            await context.CallActivityAsync(Constants.DurableActivity.CompleteAction, result);

            //Return result for logging and information purposes
            return(result);
        }
示例#2
0
        public async Task CompleteOrchestratorAction([ActivityTrigger] OrchestrationResultModel orchestrationResult, ILogger log)
        {
            log.LogInformation($"Completing orchestration action for subscription with Id {orchestrationResult.SubscriptionId}");

            await _serviceBusService.SendResultToStactize(orchestrationResult);
        }
示例#3
0
 public async Task SendResultToStactize(OrchestrationResultModel result)
 {
     await _queueClient.SendAsync(new Message(UTF8Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(result))));
 }