public static async Task <List <string> > RunOrchestrator(
        [OrchestrationTrigger] IDurableOrchestrationContext context)
    {
        // param into orchestrator
        OrchestratorInput oi = context.GetInput <OrchestratorInput>();
        // call activity function
        await context.CallActivityAsync <List <string> >(nameof(MyActivityFunction), oi.Url);

        // call durable entity
        List <string> result = await ContactDurableEntity(context);

        // call http
        var request = new DurableHttpRequest(HttpMethod.Post, new Uri(oi.Url), content: "myContent");
        DurableHttpResponse response = await context.CallHttpAsync(request);

        return(result);
    }
示例#2
0
        public static async Task <IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
            HttpRequest req, ILogger log,
            ExecutionContext executionContext,
            [DurableClient] IDurableOrchestrationClient starter)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            var     requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data        = JsonConvert.DeserializeObject(requestBody);

            name ??= data?.name;
            if (name == null)
            {
                return(new BadRequestObjectResult("Please pass a name on the query string or in the request body"));
            }

            var orchestratorInput = new OrchestratorInput
            {
                CorrelationId = new Guid(),
                Name          = name.ToString()
            };

            var instanceId = await starter.StartNewAsync(nameof(DynamicOrchestrator), orchestratorInput);

            DurableOrchestrationStatus durableOrchestrationStatus = await starter.GetStatusAsync(instanceId);

            while (durableOrchestrationStatus.RuntimeStatus != OrchestrationRuntimeStatus.Completed)
            {
                await Task.Delay(200);

                durableOrchestrationStatus = await starter.GetStatusAsync(instanceId);
            }

            return((ActionResult) new OkObjectResult(durableOrchestrationStatus.Output));
        }