I’ve recently been working with Azure Isolated Functions for .Net 6. This is a kind of getting started guide - especially if you’re coming across from non-isolated.
What’s an Isolated Function
As is explained here, an isolated function is a function that runs out of process and self-hosted. Previously, there were issues with dependency conflicts because you were married to the function host.
What’s the Difference Between an Isolated an Non-Isolated Function?
A non-isolated function can have just one file in the project; for example:
And in that file, you can have a single method, decorated with a Function attribute:
[FunctionName("Function1")]
public async Task<HttpResponseData> Run(. . .
However, for an Isolated Function, you’ll need a Program.cs, with something along the lines of the following as a minimum:
public static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
await host.RunAsync();
}
Further, the dependency libraries change; Isolated Functions use the following libraries (these obviously depend slightly on your bindings, but are a good start):
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Abstractions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.3.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.6.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
Finally, you’ll need to change your decorator to:
[Function("Function1")]
From:
[FunctionName("Function1")]
FunctionName uses the old WebJobs namespace.
Some possible errors…
At least one binding must be declared.
This error typically happens in the following scenario: the method has a [Function] decorator, but within the method signature, there are no valid Bindings - that is, nothing that the Azure Function ecosystem understands. For example; the following signature would give that error:
[Function("Function1")]
public void MyFunc()
{
}
Specified condition ”$(SelfContained)” evaluates to "" instead of a boolean.
For this, you need to specify the output type to be an executable:
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
<Nullable>enable</Nullable>
</PropertyGroup>