context.GetInput<T> 在 Durable Function 中获取 null

context.GetInput<T> getting null in Durable Function

我遇到了一个奇怪的问题。搜索了多个问题,但没有真正解决这个问题。我有以下默认模板代码。

 [FunctionName("OrchFunction_HttpStart")]
    public async Task<HttpResponseMessage> HttpStart(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
    {
        // Function input comes from the request content.
        string instanceId = await starter.StartNewAsync("OrchFunction", null);

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

        return starter.CreateCheckStatusResponse(req, instanceId);
    }

在 Orchstrator 函数中我有以下代码

[FunctionName("OrchFunction")]
        public  async Task<List<string>> RunOrchestrator(
            [OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var outputs = new List<string>();
            var data = context.GetInput<JobPayload>();
            var inst=context.InstanceId;
           

            // returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
            return outputs;
        }

这里的问题是我在 var data = context.GetInput<JobPayload>(); 中得到 NULL。不知道为什么,因为它是我传入 HttpRequestMessage 的 T 类型。我知道它错了但是尝试了 var data = context.GetInput<HttpResponseMessage>(); ,仍然是空的。这里有什么问题?我得到 context.InstanceId 值。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.webjobs.extensions.durabletask.idurableorchestrationclient.startnewasync?view=azure-dotnet#Microsoft_Azure_WebJobs_Extensions_DurableTask_IDurableOrchestrationClient_StartNewAsync_System_String_System_String_

以下是 StartNewAsync 的不同重载。您正在使用的那个不会将任何输入传递给 orchestrator,因此您不会在 orchestrator 中有任何输入。 以此为首

 [FunctionName("OrchFunction_HttpStart")]
    public async Task<HttpResponseMessage> HttpStart(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
    {
        var payload = new JobPayload()
        {
          //Fill with data
        }
        // Function input comes from the request content.
        string instanceId = await starter.StartNewAsync<JobPayload>("OrchFunction", payload);

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

        return starter.CreateCheckStatusResponse(req, instanceId);
    }

注意:JobPayload 必须是可序列化的