In a .NET 8.0 Azure Function V4, I am unable to acquire a valid instance of an IDurableClient
. Why?
[Function("ProcessFunction")]
public async Task<IActionResult>
Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[DurableClient] IDurableClient context)
{
var mycontext = context; // Null
// ...
}
Adding in a call to services.AddDurableClientFactory();
has no effect.
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>FunctionApp.Durable.Isolated._2</RootNamespace>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
...
"Microsoft.Azure.Functions.Worker" Version="1.22.0" />
"Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.2.0" />
"Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.3.1" />
"Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
"Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
"Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.4" />
"Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.13.4" />
"Microsoft.DurableTask.Client" Version="1.2.4" />
In .net 8 Isolated one needs to use DurableTaskClient
to get the Durable Client. To avoid namespace collisions with the non Isolated attribute, use the isolated specific package of Microsoft.Azure.Functions.Worker.Extensions.DurableTask
.
Below is the code which worked for me:
Function1.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Microsoft.DurableTask.Client;
using Microsoft.Azure.Functions.Worker.Http;
namespace FunctionApp184
{
public class Function1
{
private readonly ILogger<Function1> ri_log;
public Function1(ILogger<Function1> logger)
{
ri_log = logger;
}
[Function("Function1")]
public async Task<IActionResult>
Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData
, [DurableClient] DurableTaskClient rc)
{
ri_log.LogInformation("Hello Rithwik Bojja, the function started");
var rith_out = rc;
ri_log.LogInformation($"The Client is : {rith_out}");
return new OkObjectResult(rith_out);
}
}
}
My packages in csproj:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
<PackageReference Include="Microsoft.DurableTask.Client" Version="1.2.4" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.0" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
</ItemGroup>
Output: