Migrera .NET-appar från den pågående modellen till den isolerade arbetsmodellen

Viktigt!

Supporten upphör för den pågående modellen den 10 november 2026. Vi rekommenderar starkt att du migrerar dina appar till den isolerade arbetsmodellen genom att följa anvisningarna i den här artikeln.

Den här artikeln beskriver hur du migrerar .NET-funktionsappen på ett säkert sätt från den pågående modellen till den isolerade arbetsmodellen. Mer information om skillnaderna på hög nivå mellan dessa modeller finns i jämförelsen av körningsläge.

Den här guiden förutsätter att din app körs på version 4.x av Functions-körningen. Annars bör du i stället följa guiderna för att uppgradera din värdversion:

De här migreringsguiderna för värdversion hjälper dig också att migrera till den isolerade arbetsmodellen när du arbetar med dem.

Identifiera funktionsappar som ska migreras

Använd följande Azure PowerShell-skript för att generera en lista över funktionsappar i din prenumeration som för närvarande använder den pågående modellen.

Skriptet använder en prenumeration som Azure PowerShell för närvarande är konfigurerat att använda. Du kan ändra prenumerationen genom att <YOUR SUBSCRIPTION ID> först köra Set-AzContext -Subscription '<YOUR SUBSCRIPTION ID>' och ersätta med ID:t för den prenumeration som du vill utvärdera.

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

foreach ($App in $FunctionApps)
{
     if ($App.Runtime -eq 'dotnet')
     {
          $AppInfo.Add($App.Name, $App.Runtime)
     }
}

$AppInfo

Välj din .NET-målversion

I version 4.x av Functions-körningen riktar sig .NET-funktionsappen mot .NET 6 när du använder inprocessmodellen.

När du migrerar funktionsappen har du möjlighet att välja målversionen av .NET. Du kan uppdatera C#-projektet till någon av följande versioner av .NET som stöds av Functions version 4.x:

.NET-version Versionstyp för .NET Official Support Policy Funktionsprocessmodell1,2
.NET 9 Förhandsversion3 Isolerad arbetsmodell
.NET 8 LTS (support upphör 10 november 2026) Isolerad arbetsmodell,
Processmodell2
.NET 6 LTS (support upphör 12 november 2024) Isolerad arbetsmodell,
Processmodell2
.NET Framework 4.8 Se princip Isolerad arbetsmodell

1 Den isolerade arbetsmodellen stöder versioner av .NET (Long Term Support) och Standard Term Support (STS) samt .NET Framework. Den processbaserade modellen stöder endast LTS-versioner av .NET, som slutar med .NET 8. En fullständig funktionsjämförelse och funktionsjämförelse mellan de två modellerna finns i Skillnader mellan processer och isolera arbetsprocess .NET Azure Functions.

2 Supporten upphör för den pågående modellen den 10 november 2026. Mer information finns i det här supportmeddelandet. Om du vill ha fortsatt fullständigt stöd bör du migrera dina appar till den isolerade arbetsmodellen.

3 Se Förhandsversioner av .NET i den isolerade arbetsmodellen för mer information om support, aktuella begränsningar och instruktioner för att använda förhandsversionen.

Dricks

Vi rekommenderar att du uppgraderar till .NET 8 på den isolerade arbetsmodellen. Detta ger en snabb migreringssökväg till den fullständigt släppta versionen med det längsta supportfönstret från .NET.

Den här guiden innehåller inte några specifika exempel för .NET 9 (förhandsversion) eller .NET 6. Om du behöver rikta in dig på dessa versioner kan du anpassa .NET 8-exemplen.

Förbereda för migrering

Om du inte redan har gjort det kan du identifiera listan över appar som måste migreras i din aktuella Azure-prenumeration med hjälp av Azure PowerShell.

Innan du migrerar en app till den isolerade arbetsmodellen bör du noggrant granska innehållet i den här guiden. Du bör också bekanta dig med funktionerna i den isolerade arbetsmodellen och skillnaderna mellan de två modellerna.

Om du vill migrera programmet gör du följande:

  1. Migrera ditt lokala projekt till den isolerade arbetsmodellen genom att följa stegen i Migrera ditt lokala projekt.
  2. När du har migrerat projektet testar du appen lokalt med version 4.x av Azure Functions Core Tools.
  3. Uppdatera funktionsappen i Azure till den isolerade modellen.

Migrera ditt lokala projekt

I avsnittet beskrivs de olika ändringar som du behöver göra i ditt lokala projekt för att flytta det till den isolerade arbetsmodellen. Vissa av stegen ändras baserat på målversionen av .NET. Använd flikarna för att välja de instruktioner som matchar din önskade version. De här stegen förutsätter ett lokalt C#-projekt, och om din app i stället använder C#-skript (.csx filer) bör du konvertera till projektmodellen innan du fortsätter.

Dricks

Om du flyttar till en LTS- eller STS-version av .NET kan .NET Upgrade Assistant användas för att automatiskt göra många av de ändringar som nämns i följande avsnitt.

Konvertera först projektfilen och uppdatera dina beroenden. Precis som du ser byggfel för projektet. I efterföljande steg gör du motsvarande ändringar för att ta bort dessa fel.

Projektfil

Följande exempel är en .csproj projektfil som använder .NET 6 på version 4.x:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <RootNamespace>My.Namespace</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

Använd någon av följande procedurer för att uppdatera XML-filen så att den körs i den isolerade arbetsmodellen:

De här stegen förutsätter ett lokalt C#-projekt, och om din app i stället använder C#-skript (.csx filer) bör du konvertera till projektmodellen innan du fortsätter.

Följande ändringar krävs i .csproj XML-projektfilen:

  1. Ange värdet PropertyGroupför .TargetFramework till net8.0.

  2. Ange värdet PropertyGroupför .AzureFunctionsVersion till v4.

  3. Lägg till följande OutputType element i PropertyGroup:

    <OutputType>Exe</OutputType>
    
  4. ItemGroupI .PackageReference ersätter du paketreferensen till Microsoft.NET.Sdk.Functions med följande referenser:

      <FrameworkReference Include="Microsoft.AspNetCore.App" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
      <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
      <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    

    Anteckna eventuella referenser till andra paket i Microsoft.Azure.WebJobs.* namnrymderna. Du ersätter dessa paket i ett senare steg.

  5. Lägg till följande nya ItemGroup:

    <ItemGroup>
      <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
    </ItemGroup>
    

När du har genomfört de här ändringarna bör ditt uppdaterade projekt se ut som i följande exempel:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <RootNamespace>My.Namespace</RootNamespace>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.17.2" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" />
    <!-- Other packages may also be in this list -->
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/>
  </ItemGroup>
</Project>

Att ändra projektets målramverk kan också kräva ändringar i delar av verktygskedjan, utanför projektkoden. I VS Code kan du till exempel behöva uppdatera tilläggsinställningen azureFunctions.deploySubpath via användarinställningar eller projektets .vscode/settings.json fil. Kontrollera om det finns beroenden för den ramverksversion som kan finnas utanför projektkoden, som en del av byggstegen eller en CI/CD-pipeline.

Paketreferenser

När du migrerar till den isolerade arbetsmodellen måste du ändra paketen som dina programreferenser refererar till.

Om du inte redan har gjort det uppdaterar du projektet så att det refererar till de senaste stabila versionerna av:

Beroende på vilka utlösare och bindningar som appen använder kan din app behöva referera till en annan uppsättning paket. I följande tabell visas ersättningarna för några av de vanligaste tilläggen:

Scenario Ändringar i paketreferenser
Timerutlösare Lägg till
Microsoft.Azure.Functions.Worker.Extensions.Timer
Lagringsbindningar Replace
Microsoft.Azure.WebJobs.Extensions.Storage
med
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs,
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues och
Microsoft.Azure.Functions.Worker.Extensions.Tables
Blobbindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
Köbindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.Storage.Queues
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
Tabellbindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.Tables
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.Tables
Cosmos DB-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.CosmosDB
och/eller
Microsoft.Azure.WebJobs.Extensions.DocumentDB
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
Service Bus-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.ServiceBus
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus
Event Hubs-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.EventHubs
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.EventHubs
Event Grid-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.EventGrid
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.EventGrid
SignalR Service-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.SignalRService
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.SignalRService
Bestående funktioner Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.DurableTask
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Bestående funktioner
(SQL-lagringsprovider)
Ersätt referenser till
Microsoft.DurableTask.SqlServer.AzureFunctions
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
Bestående funktioner
(Netherite Storage-provider)
Ersätt referenser till
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
SendGrid-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.SendGrid
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
Kafka-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.Kafka
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.Kafka
RabbitMQ-bindningar Ersätt referenser till
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
med den senaste versionen av
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
Beroendeinmatning
och startkonfiguration
Ta bort referenser till
Microsoft.Azure.Functions.Extensions
(Den isolerade arbetsmodellen tillhandahåller den här funktionen som standard.)

Se Bindningar som stöds för en fullständig lista över tillägg att överväga och läs dokumentationen för varje tillägg för fullständiga installationsinstruktioner för den isolerade processmodellen. Se till att installera den senaste stabila versionen av alla paket som du riktar in dig på.

Dricks

Eventuella ändringar av tilläggsversioner under den här processen kan kräva att du även uppdaterar host.json filen. Läs dokumentationen för varje tillägg som du använder. Service Bus-tillägget har till exempel icke-bakåtkompatibla ändringar i strukturen mellan versionerna 4.x och 5.x. Mer information finns i Azure Service Bus-bindningar för Azure Functions.

Ditt isolerade arbetsmodellprogram bör inte referera till några paket i Microsoft.Azure.WebJobs.* namnrymderna eller Microsoft.Azure.Functions.Extensions. Om du har några återstående referenser till dessa bör de tas bort.

Dricks

Din app kan också vara beroende av Azure SDK-typer, antingen som en del av dina utlösare och bindningar eller som ett fristående beroende. Du bör också ta tillfället i akt att uppdatera dessa. De senaste versionerna av Functions-tilläggen fungerar med de senaste versionerna av Azure SDK för .NET, nästan alla paket som är formuläret Azure.*.

Program.cs fil

När du migrerar för att köras i en isolerad arbetsprocess måste du lägga till en Program.cs fil i projektet med följande innehåll:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services => {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
    })
    .Build();

host.Run();

Det här exemplet omfattar ASP.NET Core-integrering för att förbättra prestanda och tillhandahålla en välbekant programmeringsmodell när din app använder HTTP-utlösare. Om du inte tänker använda HTTP-utlösare kan du ersätta anropet till ConfigureFunctionsWebApplication med ett anrop till ConfigureFunctionsWorkerDefaults. Om du gör det kan du ta bort referensen till Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore från projektfilen. Men för bästa prestanda, även för funktioner med andra utlösartyper, bör du behålla FrameworkReference till ASP.NET Core.

Filen Program.cs ersätter alla filer som har FunctionsStartup attributet, vilket vanligtvis är en Startup.cs fil. På platser där koden FunctionsStartup refererar IFunctionsHostBuilder.Servicestill kan du i stället lägga till instruktioner i .ConfigureServices() -metoden HostBuilder i i .Program.cs Mer information om hur du arbetar med Program.csfinns i Start-up and configuration in the isolated worker model guide (Start-up and configuration in the isolated worker model guide).

Standardexemplen Program.cs ovan är installation av Application Insights-integrering för den isolerade arbetsmodellen. I måste Program.csdu även konfigurera loggfiltrering som ska gälla för loggar som kommer från kod i projektet. I den isolerade arbetsmodellen host.json styr filen endast händelser som genereras av Functions-värdkörningen. Om du inte konfigurerar filtreringsregler i Program.cskan du se skillnader i loggnivåerna för olika kategorier i telemetrin.

Även om du kan registrera anpassade konfigurationskällor som en del av HostBuilder, bör du tänka på att dessa på samma sätt endast gäller för kod i projektet. Utlösar- och bindningskonfiguration krävs också av plattformen, och detta bör tillhandahållas via funktionerna för programinställningar, Key Vault-referenser eller appkonfigurationsreferenser .

När du har flyttat allt från alla befintliga FunctionsStartup till Program.cs filen kan du ta bort FunctionsStartup attributet och den klass som det tillämpades på.

Ändringar i funktionssignatur

Vissa nyckeltyper ändras mellan den processbaserade modellen och den isolerade arbetsmodellen. Många av dessa gäller attribut, parametrar och returtyper som utgör funktionssignaturen. För var och en av dina funktioner måste du göra ändringar i:

  • Funktionsattributet (som också anger funktionens namn)
  • Hur funktionen hämtar en ILogger/ILogger<T>
  • Utlösar- och bindningsattribut och parametrar

Resten av det här avsnittet beskriver vart och ett av de här stegen.

Funktionsattribut

Attributet Function i den isolerade arbetsmodellen ersätter attributet FunctionName . Det nya attributet har samma signatur och den enda skillnaden är i namnet. Du kan därför bara utföra en strängersättning i projektet.

Loggning

I den processbaserade modellen kan du inkludera en valfri ILogger parameter i funktionen, eller så kan du använda beroendeinmatning för att hämta en ILogger<T>. Om din app redan har använt beroendeinmatning fungerar samma mekanismer i den isolerade arbetsmodellen.

För funktioner som förlitade sig på ILogger metodparametern måste du dock göra en ändring. Vi rekommenderar att du använder beroendeinmatning för att hämta en ILogger<T>. Använd följande steg för att migrera funktionens loggningsmekanism:

  1. I funktionsklassen lägger du till en private readonly ILogger<MyFunction> _logger; egenskap som ersätter MyFunction med namnet på din funktionsklass.

  2. Skapa en konstruktor för din funktionsklass som tar in ILogger<T> som en parameter:

    public MyFunction(ILogger<MyFunction> logger) {
        _logger = logger;
    }
    

    Ersätt båda instanserna av MyFunction i föregående kodfragment med namnet på din funktionsklass.

  3. För loggningsåtgärder i funktionskoden ersätter du referenser till parametern ILogger med _logger.

  4. Ta bort parametern ILogger från funktionssignaturen.

Mer information finns i Loggning i den isolerade arbetsmodellen.

Utlösar- och bindningsändringar

När du ändrade paketreferenserna i ett tidigare steg introducerade du fel för dina utlösare och bindningar som du nu ska åtgärda:

  1. Ta bort alla using Microsoft.Azure.WebJobs; instruktioner.

  2. Lägg till en using Microsoft.Azure.Functions.Worker; instruktion.

  3. För varje bindningsattribut ändrar du attributets namn enligt beskrivningen i referensdokumentationen, som du hittar i indexet Bindningar som stöds. I allmänhet ändras attributnamnen enligt följande:

    • Utlösare förblir vanligtvis namngivna på samma sätt. Är till exempel QueueTrigger attributnamnet för båda modellerna.
    • Indatabindningar behöver vanligtvis "Input" läggas till i deras namn. Om du till exempel använde indatabindningsattributet CosmosDB i inprocessmodellen skulle attributet nu vara CosmosDBInput.
    • Utdatabindningar behöver vanligtvis "Output" läggas till i namnet. Om du till exempel använde utdatabindningsattributet Queue i in-process-modellen skulle det här attributet nu vara QueueOutput.
  4. Uppdatera attributparametrarna så att de återspeglar den isolerade arbetsmodellversionen enligt beskrivningen i bindningens referensdokumentation.

    I den processbaserade modellen representeras till exempel en blobutdatabindning av ett [Blob(...)] attribut som innehåller en Access egenskap. I den isolerade arbetsmodellen skulle blobutdataattributet vara [BlobOutput(...)]. Bindningen kräver inte längre egenskapen Access så att parametern kan tas bort. Så [Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")] skulle bli [BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")].

  5. Flytta utdatabindningar från funktionsparameterlistan. Om du bara har en utdatabindning kan du tillämpa den på funktionens returtyp. Om du har flera utdata skapar du en ny klass med egenskaper för varje utdata och tillämpar attributen på dessa egenskaper. Mer information finns i Flera utdatabindningar.

  6. Läs referensdokumentationen för varje bindning för de typer som du kan binda till. I vissa fall kan du behöva ändra typen. Om den processbaserade modellversionen använde en IAsyncCollector<T>för utdatabindningar kan du ersätta den med bindning till en matris av måltypen: T[]. Du kan också överväga att ersätta utdatabindningen med ett klientobjekt för den tjänst som den representerar, antingen som bindningstyp för en indatabindning om den är tillgänglig eller genom att mata in en klient själv.

  7. Om funktionen innehåller en IBinder parameter tar du bort den. Ersätt funktionen med ett klientobjekt för den tjänst som den representerar, antingen som bindningstyp för en indatabindning om den är tillgänglig, eller genom att mata in en klient själv.

  8. Uppdatera funktionskoden så att den fungerar med alla nya typer.

local.settings.json fil

Filen local.settings.json används bara när den körs lokalt. Mer information finns i Filen Lokala inställningar.

När du migrerar från att köras i processen till att köras i en isolerad arbetsprocess måste du ändra FUNCTIONS_WORKER_RUNTIME värdet till "dotnet-isolerad". Kontrollera att din local.settings.json-fil har minst följande element:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
    }
}

Värdet du har för "AzureWebJobsStorage" kan vara annorlunda. Du behöver inte ändra dess värde som en del av migreringen.

host.json fil

Inga ändringar krävs i host.json filen. Men om Application Insights-konfigurationen i den här filen från ditt processmodellprojekt kanske du vill göra ytterligare ändringar i Program.cs filen. Filen host.json styr endast loggning från Functions-värdkörningen, och i den isolerade arbetsmodellen kommer vissa av dessa loggar direkt från ditt program, vilket ger dig mer kontroll. Mer information om hur du filtrerar loggarna finns i Hantera loggnivåer i den isolerade arbetsmodellen .

Andra kodändringar

I det här avsnittet beskrivs andra kodändringar som du bör tänka på när du arbetar med migreringen. Dessa ändringar behövs inte av alla program, men du bör utvärdera om några är relevanta för dina scenarier.

JSON-serialisering

Som standard använder System.Text.Json den isolerade arbetsmodellen för JSON-serialisering. Om du vill anpassa serialiseraralternativ eller växla till JSON.NET (Newtonsoft.Json) kan du läsa de här anvisningarna.

Application Insights-loggnivåer och filtrering

Loggar kan skickas till Application Insights från både Functions-värdkörningen och koden i projektet. Gör host.json att du kan konfigurera regler för värdloggning, men för att styra loggar som kommer från din kod måste du konfigurera filtreringsregler som en del av din Program.cs. Mer information om hur du filtrerar loggarna finns i Hantera loggnivåer i den isolerade arbetsmodellen .

Exempel på funktionsmigreringar

EXEMPEL på HTTP-utlösare

En HTTP-utlösare för den processbaserade modellen kan se ut som i följande exempel:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public static class HttpTriggerCSharp
    {
        [FunctionName("HttpTriggerCSharp")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
        }
    }
}

En HTTP-utlösare för den migrerade versionen kan se ut som i följande exempel:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class HttpTriggerCSharp
    {
        private readonly ILogger<HttpTriggerCSharp> _logger;

        public HttpTriggerCSharp(ILogger<HttpTriggerCSharp> logger)
        {
            _logger = logger;
        }

        [Function("HttpTriggerCSharp")]
        public IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
        }
    }
}

Uppdatera funktionsappen i Azure

När du uppdaterar funktionsappen till den isolerade modellen krävs två ändringar som ska slutföras tillsammans, för om du bara slutför en är appen i ett feltillstånd. Båda dessa ändringar gör också att appprocessen startas om. Därför bör du utföra uppdateringen med hjälp av ett mellanlagringsfack. Mellanlagringsplatser hjälper till att minimera stilleståndstiden för din app och gör att du kan testa och verifiera din migrerade kod med din uppdaterade konfiguration i Azure. Du kan sedan distribuera din fullständigt migrerade app till produktionsplatsen via en växlingsåtgärd.

Viktigt!

När en apps distribuerade nyttolast inte matchar den konfigurerade körningen är den i ett feltillstånd. Under migreringsprocessen placerar du appen i det här tillståndet, helst endast tillfälligt. Distributionsplatser hjälper till att minska effekten av detta eftersom feltillståndet kommer att lösas i din mellanlagringsmiljö (icke-produktionsmiljö) innan ändringarna tillämpas som en enskild uppdatering av produktionsmiljön. Slots skyddar också mot eventuella misstag och gör att du kan identifiera andra problem innan du når produktion.

Under processen kan du fortfarande se fel i loggar som kommer från mellanlagringsplatsen (icke-produktion). Detta är förväntat, även om dessa bör försvinna när du fortsätter genom stegen. Innan du utför växlingsåtgärden för fack bör du bekräfta att dessa fel slutar att genereras och att programmet fungerar som förväntat.

Använd följande steg för att använda distributionsplatser för att uppdatera funktionsappen till den isolerade arbetsmodellen:

  1. Skapa ett distributionsfack om du inte redan har gjort det. Du kanske också vill bekanta dig med växlingsprocessen för fack och se till att du kan göra uppdateringar av det befintliga programmet med minimala avbrott.

  2. Ändra konfigurationen av mellanlagringsplatsen (icke-produktionsplatsen) så att den isolerade arbetsmodellen används genom att ange programinställningen FUNCTIONS_WORKER_RUNTIME till dotnet-isolated. FUNCTIONS_WORKER_RUNTIME bör inte markeras som en "platsinställning".

    Om du även riktar in dig på en annan version av .NET som en del av uppdateringen bör du också ändra stackkonfigurationen. Det gör du genom att läsa anvisningarna för att uppdatera stackkonfigurationen för den isolerade arbetsmodellen. Du kommer att använda samma instruktioner för eventuella framtida .NET-versionsuppdateringar som du gör.

    Om du har någon automatiserad infrastrukturetablering, till dotnet-isolated exempel en CI/CD-pipeline, kontrollerar du att automatiseringarna också uppdateras för att hålla FUNCTIONS_WORKER_RUNTIME inställt på och för att rikta rätt .NET-version.

  3. Publicera ditt migrerade projekt till mellanlagringsplatsen (icke-produktion) i funktionsappen.

    Om du använder Visual Studio för att publicera ett isolerat arbetsmodellprojekt till en befintlig app eller ett befintligt fack som använder den processbaserade modellen, kan det även slutföra föregående steg åt dig samtidigt. Om du inte slutförde föregående steg uppmanar Visual Studio dig att uppdatera funktionsappen under distributionen. Visual Studio presenterar detta som en enda åtgärd, men det är fortfarande två separata åtgärder. Du kan fortfarande se fel i loggarna från mellanlagringsplatsen (icke-produktionsplatsen) under interimstillståndet.

  4. Bekräfta att programmet fungerar som förväntat inom mellanlagringsplatsen (icke-produktion).

  5. Utför en växlingsåtgärd för fack. Detta tillämpar de ändringar som du har gjort i mellanlagringsplatsen (icke-produktion) på produktionsplatsen. Ett fackbyte sker som en enskild uppdatering, vilket undviker att införa interimfeltillståndet i produktionsmiljön.

  6. Bekräfta att programmet fungerar som förväntat inom produktionsplatsen.

När du har slutfört de här stegen är migreringen klar och appen körs på den isolerade modellen. Grattis! Upprepa stegen i den här guiden efter behov för andra appar som behöver migrering.

Nästa steg