altmann / FluentResults

A generalised Result object implementation for .NET/C#
MIT License
2.04k stars 114 forks source link

Unexpected behavior during deserialization in Azure Durable Function's ActivityTrigger response #209

Closed rtellez91 closed 3 months ago

rtellez91 commented 3 months ago

I have the following code in an Azure Durable Function (just pasted relevant code) Orchestrator:

            var result = await context.CallActivityAsync<Result<Workflow>>(
                nameof(GetWorkflowFunction.GetWorkflow), 
                new GetWorkflowRequest(Guid.Parse(context.InstanceId)));

On my activity function code, the following lines give different results:

            AssessmentWorkflow participantAssessmentWorkflow = new AssessmentWorkflow();
            participantAssessmentWorkflow.Id = getParticipantAssessmentWorkflowRequest.participantWorkflowId;

            return Result.Fail<AssessmentWorkflow>("error"); //fails with exception, see below
            return Result.Ok(participantAssessmentWorkflow); //returns Result.Ok but value is null
            return participantAssessmentWorkflow; // returns Result.Ok but value is null

Exception when Result.Fail is invoked:

[2024-06-28T00:42:49.414Z] An error occurred while executing the orchestrator function 'WorkflowOrchestratorFunction'. [2024-06-28T00:42:49.415Z] Result: An error occurred while executing the orchestrator function 'WorkflowOrchestratorFunction'. Exception: System.Text.Json.JsonException: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:42:49.416Z] at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType) [2024-06-28T00:42:49.417Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2024-06-28T00:42:49.417Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) [2024-06-28T00:42:49.418Z] at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) [2024-06-28T00:42:49.419Z] at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) [2024-06-28T00:42:49.419Z] at System.Text.Json.JsonSerializer.ReadFromSpanAsObject(ReadOnlySpan1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable1 actualByteCount) [2024-06-28T00:42:49.420Z] at System.Text.Json.JsonSerializer.Deserialize(ReadOnlySpan1 utf8Json, Type returnType, JsonSerializerOptions options) [2024-06-28T00:42:49.421Z] at Azure.Core.Serialization.JsonObjectSerializer.Deserialize(Stream stream, Type returnType, CancellationToken cancellationToken) [2024-06-28T00:42:49.422Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.ObjectConverterShim.Deserialize(String data, Type targetType) in //src/Worker.Extensions.DurableTask/ObjectConverterShim.cs:line 32 [2024-06-28T00:42:49.423Z] at Microsoft.DurableTask.Worker.Shims.JsonDataConverterShim.Deserialize(String data, Type objectType) [2024-06-28T00:42:49.424Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskInternal(String name, String version, String taskList, Type resultType, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 123 [2024-06-28T00:42:49.425Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskToWorker[TResult](String name, String version, String taskList, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 92 [2024-06-28T00:42:49.426Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTask[TResult](String name, String version, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 84 [2024-06-28T00:42:49.426Z] at Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName name, Object input, TaskOptions options) [2024-06-28T00:42:49.427Z] at WorkflowPOC.WorkflowOrchestratorFunction.RunOrchestrator(TaskOrchestrationContext context) in C:\source\repos\WorkflowPOC\WorkflowPOC\WorkflowOrchestratorFunction.cs:line 23 [2024-06-28T00:42:49.428Z] at WorkflowPOC.DirectFunctionExecutor.ExecuteAsync(FunctionContext context) in C:\source\repos\WorkflowPOC\WorkflowPOC\obj\Debug\net8.0\Microsoft.Azure.Functions.Worker.Sdk.Generators\Microsoft.Azure.Functions.Worker.Sdk.Generators.FunctionExecutorGenerator\GeneratedFunctionExecutor.g.cs:line 32 [2024-06-28T00:42:49.429Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2024-06-28T00:42:49.430Z] at Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore.FunctionsHttpProxyingMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\extensions\Worker.Extensions.Http.AspNetCore\src\FunctionsMiddleware\FunctionsHttpProxyingMiddleware.cs:line 34 [2024-06-28T00:42:49.430Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.EnsureSynchronousExecution(FunctionContext functionContext, FunctionExecutionDelegate next, FunctionsOrchestrationContext orchestrationContext) in //src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 81 [2024-06-28T00:42:49.431Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.RunAsync(TaskOrchestrationContext context, Object input) in //src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 51 Stack: at System.Text.Json.ThrowHelper.ThrowJsonExceptionDeserializeUnableToConvertValue(Type propertyType) [2024-06-28T00:42:49.432Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2024-06-28T00:42:49.433Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) [2024-06-28T00:42:49.433Z] at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) [2024-06-28T00:42:49.434Z] at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) [2024-06-28T00:42:49.435Z] at System.Text.Json.JsonSerializer.ReadFromSpanAsObject(ReadOnlySpan1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable1 actualByteCount) [2024-06-28T00:42:49.435Z] at System.Text.Json.JsonSerializer.Deserialize(ReadOnlySpan`1 utf8Json, Type returnType, JsonSerializerOptions options) [2024-06-28T00:42:49.436Z] at Azure.Core.Serialization.JsonObjectSerializer.Deserialize(Stream stream, Type returnType, CancellationToken cancellationToken) [2024-06-28T00:42:49.437Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.ObjectConverterShim.Deserialize(String data, Type targetType) in //src/Worker.Extensions.DurableTask/ObjectConverterShim.cs:line 32 [2024-06-28T00:42:49.438Z] at Microsoft.DurableTask.Worker.Shims.JsonDataConverterShim.Deserialize(String data, Type objectType) [2024-06-28T00:42:49.443Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskInternal(String name, String version, String taskList, Type resultType, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 123 [2024-06-28T00:42:49.443Z] Executed 'Functions.WorkflowOrchestratorFunction' (Failed, Id=14f1e0fe-8a4d-45af-a487-b074b031d192, Duration=151ms) [2024-06-28T00:42:49.444Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskToWorker[TResult](String name, String version, String taskList, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 92 [2024-06-28T00:42:49.444Z] System.Private.CoreLib: Exception while executing function: Functions.WorkflowOrchestratorFunction. Microsoft.Azure.WebJobs.Extensions.DurableTask: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:42:49.445Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTask[TResult](String name, String version, Object[] parameters) in /_/src/DurableTask.Core/TaskOrchestrationContext.cs:line 84 [2024-06-28T00:42:49.446Z] at Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName name, Object input, TaskOptions options) [2024-06-28T00:42:49.447Z] at WorkflowPOC.WorkflowOrchestratorFunction.RunOrchestrator(TaskOrchestrationContext context) in C:\source\repos\WorkflowPOC\WorkflowPOC\WorkflowOrchestratorFunction.cs:line 23 [2024-06-28T00:42:49.448Z] 2caccb7f-9a6b-470d-9933-dc940c65a6ff: Function 'WorkflowOrchestratorFunction (Orchestrator)' failed with an error. Reason: Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: Functions.WorkflowOrchestratorFunction [2024-06-28T00:42:49.448Z] at WorkflowPOC.DirectFunctionExecutor.ExecuteAsync(FunctionContext context) in C:\source\repos\WorkflowPOC\WorkflowPOC\obj\Debug\net8.0\Microsoft.Azure.Functions.Worker.Sdk.Generators\Microsoft.Azure.Functions.Worker.Sdk.Generators.FunctionExecutorGenerator\GeneratedFunctionExecutor.g.cs:line 32 [2024-06-28T00:42:49.448Z] ---> DurableTask.Core.Exceptions.OrchestrationFailureException: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:42:49.449Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2024-06-28T00:42:49.450Z] at Microsoft.Azure.WebJobs.Extensions.DurableTask.RemoteOrchestratorContext.ThrowIfFailed() in D:\a_work\1\s\src\WebJobs.Extensions.DurableTask\ContextImplementations\RemoteOrchestratorContext.cs:line 58 [2024-06-28T00:42:49.450Z] at Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore.FunctionsHttpProxyingMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\extensions\Worker.Extensions.Http.AspNetCore\src\FunctionsMiddleware\FunctionsHttpProxyingMiddleware.cs:line 34 [2024-06-28T00:42:49.451Z] at Microsoft.Azure.WebJobs.Extensions.DurableTask.OutOfProcMiddleware.<>cDisplayClass10_0.<b_0>d.MoveNext() in D:\a_work\1\s\src\WebJobs.Extensions.DurableTask\OutOfProcMiddleware.cs:line 145 [2024-06-28T00:42:49.452Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.EnsureSynchronousExecution(FunctionContext functionContext, FunctionExecutionDelegate next, FunctionsOrchestrationContext orchestrationContext) in //src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 81 [2024-06-28T00:42:49.453Z] --- End of stack trace from previous location --- [2024-06-28T00:42:49.459Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.RunAsync(TaskOrchestrationContext context, Object input) in /_/src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 51. [2024-06-28T00:42:49.460Z] at Microsoft.Azure.WebJobs.Host.Executors.TriggeredFunctionExecutor`1.<>cDisplayClass7_0.<b__0>d.MoveNext() in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\TriggeredFunctionExecutor.cs:line 51 [2024-06-28T00:42:49.463Z] --- End of stack trace from previous location --- [2024-06-28T00:42:49.463Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeWithTimeoutAsync(IFunctionInvoker invoker, ParameterHelper parameterHelper, CancellationTokenSource timeoutTokenSource, CancellationTokenSource functionCancellationTokenSource, Boolean throwOnTimeout, TimeSpan timerInterval, IFunctionInstance instance) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 581 [2024-06-28T00:42:49.465Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstanceEx instance, ParameterHelper parameterHelper, ILogger logger, CancellationTokenSource functionCancellationTokenSource) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 527 [2024-06-28T00:42:49.466Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 306 [2024-06-28T00:42:49.468Z] --- End of inner exception stack trace --- [2024-06-28T00:42:49.469Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 352 [2024-06-28T00:42:49.475Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.TryExecuteAsync(IFunctionInstance functionInstance, CancellationToken cancellationToken) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 108. IsReplay: False. State: Failed. RuntimeStatus: Failed. HubName: TestHubName. AppName: . SlotName: . ExtensionVersion: 2.13.1. SequenceNumber: 8. TaskEventId: -1 [2024-06-28T00:44:22.872Z] Executing 'Functions.WorkflowStarterFunction' (Reason='This function was programmatically called via the host APIs.', Id=ee1b5400-a7df-4f7d-871f-82c6618a05d5) [2024-06-28T00:44:22.886Z] WorkflowStartRequest { ProcessId = 2caccb7f-9a6b-470d-9933-dc940c65a6ff } [2024-06-28T00:44:22.886Z] Scheduling new WorkflowOrchestratorFunction orchestration with instance ID '2caccb7f-9a6b-470d-9933-dc940c65a6ff' and 0 bytes of input data. [2024-06-28T00:44:22.918Z] Started orchestration with ID = '2caccb7f-9a6b-470d-9933-dc940c65a6ff'.[2024-06-28T00:44:22.929Z] Executed 'Functions.WorkflowStarterFunction' (Succeeded, Id=ee1b5400-a7df-4f7d-871f-82c6618a05d5, Duration=57ms)

[2024-06-28T00:44:22.941Z] Executing 'Functions.WorkflowOrchestratorFunction' (Reason='(null)', Id=6a0c0a64-fdf8-43ba-b84c-303420222f3b) [2024-06-28T00:44:22.947Z] Retrieving workflow [2024-06-28T00:44:22.951Z] Executed 'Functions.WorkflowOrchestratorFunction' (Succeeded, Id=6a0c0a64-fdf8-43ba-b84c-303420222f3b, Duration=10ms) [2024-06-28T00:44:22.994Z] Executing 'Functions.GetWorkflow' (Reason='(null)', Id=ce5171e5-91e1-401c-b60a-5dbf07cd81ea) [2024-06-28T00:44:22.998Z] Getting workflow state from cosmos db, sql, etc. [2024-06-28T00:44:22.998Z] Serialized Workflow: {"Id":"2caccb7f-9a6b-470d-9933-dc940c65a6ff"} [2024-06-28T00:44:22.999Z] Serialized Workflow: {"ValueOrDefault":{"Id":"2caccb7f-9a6b-470d-9933-dc940c65a6ff"},"Value":{"Id":"2caccb7f-9a6b-470d-9933-dc940c65a6ff"},"IsFailed":false,"IsSuccess":true,"Reasons":[],"Errors":[],"Successes":[]} [2024-06-28T00:44:23.003Z] Executed 'Functions.GetWorkflow' (Succeeded, Id=ce5171e5-91e1-401c-b60a-5dbf07cd81ea, Duration=9ms) [2024-06-28T00:44:23.043Z] Executing 'Functions.WorkflowOrchestratorFunction' (Reason='(null)', Id=4c1f035e-eb42-4806-ad01-ac05b92f162e) [2024-06-28T00:44:23.140Z] An error occurred while executing the orchestrator function 'WorkflowOrchestratorFunction'. [2024-06-28T00:44:23.148Z] Result: An error occurred while executing the orchestrator function 'WorkflowOrchestratorFunction'. Exception: System.Text.Json.JsonException: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:44:23.151Z] Executed 'Functions.WorkflowOrchestratorFunction' (Failed, Id=4c1f035e-eb42-4806-ad01-ac05b92f162e, Duration=107ms) [2024-06-28T00:44:23.151Z] at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType) [2024-06-28T00:44:23.154Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2024-06-28T00:44:23.155Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) [2024-06-28T00:44:23.156Z] at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) [2024-06-28T00:44:23.152Z] System.Private.CoreLib: Exception while executing function: Functions.WorkflowOrchestratorFunction. Microsoft.Azure.WebJobs.Extensions.DurableTask: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:44:23.157Z] at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) [2024-06-28T00:44:23.160Z] 2caccb7f-9a6b-470d-9933-dc940c65a6ff: Function 'WorkflowOrchestratorFunction (Orchestrator)' failed with an error. Reason: Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: Functions.WorkflowOrchestratorFunction [2024-06-28T00:44:23.160Z] at System.Text.Json.JsonSerializer.ReadFromSpanAsObject(ReadOnlySpan1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable1 actualByteCount) [2024-06-28T00:44:23.168Z] at System.Text.Json.JsonSerializer.Deserialize(ReadOnlySpan1 utf8Json, Type returnType, JsonSerializerOptions options) [2024-06-28T00:44:23.169Z] at Azure.Core.Serialization.JsonObjectSerializer.Deserialize(Stream stream, Type returnType, CancellationToken cancellationToken) [2024-06-28T00:44:23.170Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.ObjectConverterShim.Deserialize(String data, Type targetType) in /_/src/Worker.Extensions.DurableTask/ObjectConverterShim.cs:line 32 [2024-06-28T00:44:23.171Z] at Microsoft.DurableTask.Worker.Shims.JsonDataConverterShim.Deserialize(String data, Type objectType) [2024-06-28T00:44:23.172Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskInternal(String name, String version, String taskList, Type resultType, Object[] parameters) in /_/src/DurableTask.Core/TaskOrchestrationContext.cs:line 123 [2024-06-28T00:44:23.161Z] ---> DurableTask.Core.Exceptions.OrchestrationFailureException: The JSON value could not be converted to FluentResults.Result1[WorkflowPOC.Model.Workflow]. Path: $ | LineNumber: 0 | BytePositionInLine: 67. [2024-06-28T00:44:23.173Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskToWorker[TResult](String name, String version, String taskList, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 92 [2024-06-28T00:44:23.175Z] at Microsoft.Azure.WebJobs.Extensions.DurableTask.RemoteOrchestratorContext.ThrowIfFailed() in D:\a_work\1\s\src\WebJobs.Extensions.DurableTask\ContextImplementations\RemoteOrchestratorContext.cs:line 58[2024-06-28T00:44:23.176Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTask[TResult](String name, String version, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 84

[2024-06-28T00:44:23.185Z] at Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName name, Object input, TaskOptions options) [2024-06-28T00:44:23.185Z] at Microsoft.Azure.WebJobs.Extensions.DurableTask.OutOfProcMiddleware.<>cDisplayClass10_0.<b__0>d.MoveNext() in D:\a_work\1\s\src\WebJobs.Extensions.DurableTask\OutOfProcMiddleware.cs:line 145 [2024-06-28T00:44:23.187Z] at WorkflowPOC.WorkflowOrchestratorFunction.RunOrchestrator(TaskOrchestrationContext context) [2024-06-28T00:44:23.188Z] --- End of stack trace from previous location --- [2024-06-28T00:44:23.190Z] at WorkflowPOC.DirectFunctionExecutor.ExecuteAsync(FunctionContext context) [2024-06-28T00:44:23.191Z] at Microsoft.Azure.WebJobs.Host.Executors.TriggeredFunctionExecutor`1.<>cDisplayClass7_0.<b_0>d.MoveNext() in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\TriggeredFunctionExecutor.cs:line 51 [2024-06-28T00:44:23.192Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2024-06-28T00:44:23.197Z] --- End of stack trace from previous location --- [2024-06-28T00:44:23.199Z] at Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore.FunctionsHttpProxyingMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\extensions\Worker.Extensions.Http.AspNetCore\src\FunctionsMiddleware\FunctionsHttpProxyingMiddleware.cs:line 34 [2024-06-28T00:44:23.200Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeWithTimeoutAsync(IFunctionInvoker invoker, ParameterHelper parameterHelper, CancellationTokenSource timeoutTokenSource, CancellationTokenSource functionCancellationTokenSource, Boolean throwOnTimeout, TimeSpan timerInterval, IFunctionInstance instance) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 581 [2024-06-28T00:44:23.202Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.EnsureSynchronousExecution(FunctionContext functionContext, FunctionExecutionDelegate next, FunctionsOrchestrationContext orchestrationContext) in //src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 81 [2024-06-28T00:44:23.204Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstanceEx instance, ParameterHelper parameterHelper, ILogger logger, CancellationTokenSource functionCancellationTokenSource) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 527 [2024-06-28T00:44:23.206Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.RunAsync(TaskOrchestrationContext context, Object input) in /_/src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 51 Stack: at System.Text.Json.ThrowHelper.ThrowJsonExceptionDeserializeUnableToConvertValue(Type propertyType) [2024-06-28T00:44:23.208Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 306 [2024-06-28T00:44:23.216Z] --- End of inner exception stack trace --- [2024-06-28T00:44:23.215Z] at System.Text.Json.Serialization.Converters.ObjectDefaultConverter1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) [2024-06-28T00:44:23.218Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithLoggingAsync(IFunctionInstanceEx instance, FunctionStartedMessage message, FunctionInstanceLogEntry instanceLogEntry, ParameterHelper parameterHelper, ILogger logger, CancellationToken cancellationToken) in D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 352 [2024-06-28T00:44:23.219Z] at System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) [2024-06-28T00:44:23.221Z] at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.TryExecuteAsync(IFunctionInstance functionInstance, CancellationToken cancellationToken) in D:\a_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:line 108. IsReplay: False. State: Failed. RuntimeStatus: Failed. HubName: TestHubName. AppName: . SlotName: . ExtensionVersion: 2.13.1. SequenceNumber: 14. TaskEventId: -1 [2024-06-28T00:44:23.222Z] at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) [2024-06-28T00:44:23.229Z] at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) [2024-06-28T00:44:23.230Z] at System.Text.Json.JsonSerializer.ReadFromSpanAsObject(ReadOnlySpan1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable1 actualByteCount) [2024-06-28T00:44:23.232Z] at System.Text.Json.JsonSerializer.Deserialize(ReadOnlySpan`1 utf8Json, Type returnType, JsonSerializerOptions options) [2024-06-28T00:44:23.233Z] at Azure.Core.Serialization.JsonObjectSerializer.Deserialize(Stream stream, Type returnType, CancellationToken cancellationToken) [2024-06-28T00:44:23.234Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.ObjectConverterShim.Deserialize(String data, Type targetType) in //src/Worker.Extensions.DurableTask/ObjectConverterShim.cs:line 32 [2024-06-28T00:44:23.235Z] at Microsoft.DurableTask.Worker.Shims.JsonDataConverterShim.Deserialize(String data, Type objectType) [2024-06-28T00:44:23.239Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskInternal(String name, String version, String taskList, Type resultType, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 123 [2024-06-28T00:44:23.245Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTaskToWorker[TResult](String name, String version, String taskList, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 92 [2024-06-28T00:44:23.246Z] at DurableTask.Core.TaskOrchestrationContext.ScheduleTask[TResult](String name, String version, Object[] parameters) in //src/DurableTask.Core/TaskOrchestrationContext.cs:line 84 [2024-06-28T00:44:23.248Z] at Microsoft.DurableTask.Worker.Shims.TaskOrchestrationContextWrapper.CallActivityAsync[T](TaskName name, Object input, TaskOptions options) [2024-06-28T00:44:23.249Z] at WorkflowPOC.WorkflowOrchestratorFunction.RunOrchestrator(TaskOrchestrationContext context) [2024-06-28T00:44:23.251Z] at WorkflowPOC.DirectFunctionExecutor.ExecuteAsync(FunctionContext context) [2024-06-28T00:44:23.252Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2024-06-28T00:44:23.253Z] at Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore.FunctionsHttpProxyingMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a_work\1\s\extensions\Worker.Extensions.Http.AspNetCore\src\FunctionsMiddleware\FunctionsHttpProxyingMiddleware.cs:line 34 [2024-06-28T00:44:23.260Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.EnsureSynchronousExecution(FunctionContext functionContext, FunctionExecutionDelegate next, FunctionsOrchestrationContext orchestrationContext) in //src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 81 [2024-06-28T00:44:23.262Z] at Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsOrchestrator.RunAsync(TaskOrchestrationContext context, Object input) in /_/src/Worker.Extensions.DurableTask/FunctionsOrchestrator.cs:line 51. [2024-06-28T02:06:06.314Z] Language Worker Process exited. Pid=23404. [2024-06-28T02:06:06.315Z] C:\Program Files\dotnet\dotnet.exe exited with code -1 (0xFFFFFFFF). .

I believe that Value is set to null probably because a serialization issue. If I serialize the objects using JsonSerializer.Serialize, they are correctly serialized into JSON. But I don't know why it wouldn't be serialized when passing the result back to the Orchestrator.

altmann commented 3 months ago

Short answer is that I introduce since v1 a safety net - throwing an exception if you access die .Value property of a failed result because accessing it makes absolutely no sense.

Long answer see #55