0

我想从我的计时器触发的天蓝色函数中调用另一个(不是计时器触发的)天蓝色函数。它可以编译,但在运行时出现错误:

System.ArgumentException: 'The function 'HelloWorld' doesn't exist, is disabled, or is not an orchestrator function. Additional info: No orchestrator functions are currently registered!'

我将其简化为这个小代码片段。

    [FunctionName("HelloWorld")]
    public static string HelloWorld([ActivityTrigger] string name, ILogger log)
    {
        return $"Hello {name}!";
    }

    [FunctionName("DownloadLiveList")]
    public async void DownloadLiveList([DurableClient] IDurableOrchestrationClient client, [TimerTrigger("0 0 0 * * *", RunOnStartup = true)]TimerInfo myTimer, ILogger log)
    {
        await client.StartNewAsync<string>("HelloWorld", "Magdeburg");
    }

当我从微软官方示例中获得这种天蓝色函数级联的想法时,我不知道为什么函数“HelloWorld”没有注册。上传到 azure 后,该函数在 azure 门户中与该类中的所有其他函数一样可见。

4

1 回答 1

1

您的时间触发函数需要调用使用 Durable Function Framework 编写的启动函数。这是一个示例:

[FunctionName("Function1")]
public async Task Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

    var url = "http://localhost:7071/api/Durable_Starter";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.AutomaticDecompression = DecompressionMethods.GZip;

    using (HttpWebResponse response = (HttpWebResponse) await request.GetResponseAsync())
    using (Stream stream = response.GetResponseStream())
    using (StreamReader reader = new StreamReader(stream))
    {
        var html = reader.ReadToEnd();
        log.LogInformation(html);
    }
}

[FunctionName("Durable_Starter")]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequest req, [DurableClient] IDurableClient starter, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string instanceId = await starter.StartNewAsync("Durable_Orchestrator");

    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

    var checkStatusResponse = starter.CreateCheckStatusResponse(req, instanceId);

    return checkStatusResponse;
}


[FunctionName("Durable_Orchestrator")]
public async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
{
    var message = await context.CallActivityAsync<string>("HelloWorld", "Thiago");
    log.LogInformation(message);
}

[FunctionName("HelloWorld")]
public string HelloWorldActivity([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}
于 2020-03-05T19:40:31.693 回答