Skip to content

Durable Entity creates NullReferenceException with Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer  #205

@Enlatic

Description

@Enlatic

Hi.

I have slight problem. Dont know if it a configuration issue on my side or something else.

Currently migrating our software from ..NET6 -> .NET8 and from InProc to Isolated. All good works as intended. The Null Reference Exception shows its self when I switch from AzureStorage to SQL Server.

A bit of code to exemplify the issue.

[Function(nameof(ProcessData))]
 public async Task RunOrchestrator(
     [OrchestrationTrigger] TaskOrchestrationContext context)
 {
     ILogger logger = context.CreateReplaySafeLogger(nameof(ProcessData));
     var input = context.GetInput<string>();


     var result = await context.CallActivityAsync<RegionMix>("ActProcessData", input);

     var countryKey = string.IsNullOrEmpty(result.CountryCode) ? result.Country : result.CountryCode;
     await context.Entities.SignalEntityAsync(new EntityInstanceId(nameof(Entities.EnergyMix), countryKey), "Add", result);


 }

var result is a POCO.
Running this code, I get the NullReferenceException on SignalEntify.

My config is:
Microsoft.Azure.Functions.Worker - 1.20.1
Microsoft.Azure.Functions.Worker.Extensions.DurableTask - 1.1.0
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer - 1.2.2
Microsoft.Azure.Functions.Worker.Sdk - 1.16.4

host.json :)

{
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": ""
    },
    "durableTask": {
      "hubName": "%TaskHubConfig%",
      "storageProvider": {
        "type": "mssql",
        "connectionStringName": "Durable_SQLDB_Connection",
        "createDatabaseIfNotExists": true
      }
    }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      },
      "enableLiveMetricsFilters": true
    },
    "logLevel": {
      "default": "Information",
      "DurableTask.SqlServer": "Debug",
      "DurableTask.Core": "Debug"
    }
  }
}

After a bit of debugging.
The exception originates OrchestrationEntityContext class on DurableTask.Core

 internal void AdjustOutgoingMessage(string instanceId, RequestMessage requestMessage, DateTime? cappedTime, out string eventName)
 {
     if (cappedTime.HasValue)
     {
         eventName = EntityMessageEventNames.ScheduledRequestMessageEventName(cappedTime.Value);
     }
     else
     {
         this.messageSorter.LabelOutgoingMessage(
             requestMessage,
             instanceId,
             this.innerContext.CurrentUtcDateTime,
             this.innerContext.EntityParameters.EntityMessageReorderWindow);

         eventName = EntityMessageEventNames.RequestMessageEventName;
     }
 }

The this.innerContext.EntityParameters is not populated and is NULL.

Is this intentionally? If yes, how do I fix it...

//Daniel

Metadata

Metadata

Assignees

Labels

P1Priority 1enhancementNew feature or requestexternalNot strictly related to this project

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions