Azure Durable Functions:Activity函数返回对象在Orchestrator中为空
Azure Durable Functions中Activity返回对象列表在Orchestrator中属性为空的问题
使用Azure Durable Functions时遇到一个问题:Activity函数返回自定义类CompanyModel的对象列表,在Activity函数返回前检查结果,所有数据都正确无误,但在Orchestrator中,仅能得到元素数量正确的初始化列表,列表中的对象本身为空——所有属性均无值。
尝试过使用IEnumerable和List作为返回类型,没有区别;也调整过JSON属性设置,但均未解决问题。自定义CompanyModel在Activity函数中能正确反序列化,但在Orchestrator中所有值丢失,仅对象被初始化。
相关代码如下:
Orchestrator
public static class OrchestratorFunc { [Function(nameof(OrchestratorFunc))] public static async Task RunOrchestrator([OrchestrationTrigger] TaskOrchestrationContext context) { ILogger logger = context.CreateReplaySafeLogger(nameof(OrchestratorFunc)); using (logger.BeginScope(new Dictionary<string, object> { ["OrchestrationInstanceId"] = context.InstanceId })) { logger.LogInformation($"OrchestratorFunc Executed. InstanceId={context.InstanceId}"); var accessToken = await context.CallActivityAsync<string>(nameof(RetrieveAccessTokenActivity)); var companies = await context.CallActivityAsync<IEnumerable<CompanyModel>>(nameof(GetCompaniesActivity), accessToken); logger.LogInformation($"OrchestratorFunc completed"); } } }
Activity Function(GetCompaniesActivity)
internal class GetCompaniesActivity { private readonly HttpClient _httpClient; public GetCompaniesActivity(IHttpClientFactory httpClientFactory) { _httpClient = httpClientFactory.CreateClient(); } [Function(nameof(GetCompaniesActivity))] public async Task<IEnumerable<CompanyModel>> Run([ActivityTrigger] string accessToken, string instanceId, FunctionContext executionContext) { ILogger logger = executionContext.GetLogger(nameof(GetCompaniesActivity)); var result = new List<CompanyModel>(); using (logger.BeginScope(new Dictionary<string, object> { ["OrchestrationInstanceId"] = instanceId })) { using var request = new HttpRequestMessage(HttpMethod.Get, "http://"); request.Headers.Add("Authorization", $"Bearer Authorization: {accessToken}"); var response = await _httpClient.SendAsync(request); if (response.IsSuccessStatusCode) { var jsonResponse = await response.Content.ReadAsStringAsync(); var companiesResponse = JsonConvert.DeserializeObject<CompanyResponse>(jsonResponse); if (companiesResponse != null && companiesResponse.Companies != null) { result.AddRange(companiesResponse.Companies); } } else { throw new TaskFailedException($"{response.StatusCode} {response.ReasonPhrase}"); } return result.AsEnumerable<CompanyModel>(); } } }
CompanyModel
[JsonObject(MemberSerialization.OptIn)] public class CompanyResponse { [JsonProperty("results")] public required List<CompanyModel> Companies; } [JsonObject(MemberSerialization.OptIn)] public class CompanyModel { [JsonProperty("id")] public Guid Id; [JsonProperty("companyName")] public required string CompanyName; [JsonProperty("street")] public required string Street; [JsonProperty("zip")] public required string Zip; [JsonProperty("city")] public required string City; [JsonProperty("country")] public required string Country; [JsonProperty("vat")] public required string VAT; [JsonProperty("sys")] public int? Sys; [JsonProperty("idExternal")] public required string IdExternal; public override string ToString() { return $"{CompanyName} - {Id} - {IdExternal}"; } }
- Activity函数返回值预览:列表中的
CompanyModel对象所有属性均填充了正确的值 - Orchestrator中返回的列表预览:列表元素数量与Activity返回的一致,但每个
CompanyModel对象的所有属性都为空值
请问是否有人遇到过此问题,或知道为何对象从Activity传递到Orchestrator时会被‘清零’?
内容的提问来源于stack exchange,提问作者rafastryk
相关产品推荐
相关产品推荐

