Функция Azure DurableOrchestration застряла (?) В состоянии «WaitingForActivation» при вызове CallActivityWithRetryAsync () - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь локально пройти (используя Visual Studio 2019) функцию Durable, но когда я вызываю вызов context.CallActivityWithRetryAsync ("MyActivity_Activity", retryOptions, myActivityParameters) из OrchestrationTrigger, этот вызов всегда возвращает следующее:

Id = [xxxx], Status = WaitingForActivation, Method = "{null}", Result = "{Еще не вычислено}" *

Мое первое предположение: где-то может быть тупик,но я перезагрузил свою машину и все еще вижу тот же результат.Кроме того, я попытался установить точку останова в первой строке действия (MyActivity_Activity), но это не было достигнуто.Любая помощь будет принята с благодарностью!


Использование следующего:

  • VS 2019 Pro
  • .Net Core 2.2
  • Microsoft.Azure.DurableTask.AzureStorage v1.6.2
  • Microsoft.Azure.WebJobs.Extensions.DurableTask v1.8.2
  • Microsoft.NET.Sdk.Functions v1.0.29

    ... и др.

Ниже приведены некоторые фрагменты кода:

    [FunctionName("MyOrchestrator_HttpStart")]
public static async Task<HttpResponseMessage> HttpStart(
    [HttpTrigger(AuthorizationLevel.Function, "post")]HttpRequestMessage req,
    [OrchestrationClient]DurableOrchestrationClient starter, ExecutionContext executionContext)
{
    string instanceId = string.Empty;
    MyOrchestratorParameters myOrchestratorParameters = await req.Content.ReadAsAsync<MyOrchestratorParameters>();

    instanceId = await starter.StartNewAsync("MyOrchestrator", myOrchestratorParameters);

    return starter.CreateCheckStatusResponse(req, instanceId);
}



   [FunctionName("MyOrchestrator")]
    public static async Task RunOrchestrator(
        [OrchestrationTrigger] DurableOrchestrationContext context, 
         ExecutionContext executionContext)
    {
        MyOrchestratorParameters myOrchestratorParameters = 
           context.GetInput<MyOrchestratorParameters>();
           ValidateParameters(myOrchestratorParameters);

        var delay = 3000;
        var retry = 3;
        var retryOptions = new 
            RetryOptions(TimeSpan.FromSeconds(delay), retry);        

        MyActivityParameters myActivityParameters = new 
        MyActivityParameters()
        {
            JobNumber = myOrchestratorParameters.JobNumber,
            Stage = myOrchestratorParameters.Stage,
            TemplateId = myOrchestratorParameters.TemplateId
        };
        myActivityResults = 
            context.CallActivityWithRetryAsync<MyActivityResult> 
            ("MyActivity_Activity", retryOptions, myActivityParameters);    

        ...
    }


[FunctionName("MyActivity_Activity")]
public static async Task<MyActivityResult> 
   RunActivity([ActivityTrigger] DurableActivityContext 
   activityContext, ExecutionContext executionContext)
{
    var _myActivityParameters = 
       activityContext.GetInput<MyActivityParameters>();

    //do some stuff & return MyActivityResult object
}   

1 Ответ

0 голосов
/ 25 июня 2019

Я думаю, что нашел ответ. В моих вызовах CallActivityWithRetryAsync мне нужно было предвидеть это с ожиданием. Как только я это сделал, он начал работать!

...