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
值。
以下是 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 必须是可序列化的
我遇到了一个奇怪的问题。搜索了多个问题,但没有真正解决这个问题。我有以下默认模板代码。
[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
值。
以下是 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 必须是可序列化的