Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Functions 4.x-es verziója nagyon visszafelé kompatibilis a 3.x verzióval. A legtöbb alkalmazásnak biztonságosan át kell migrálnia a 4.x-be anélkül, hogy jelentős kódmódosításokat kellene végrehajtania. A Functions futtatókörnyezeti verzióival kapcsolatos további információkért tekintse meg az Azure Functions futtatókörnyezeti verzióinak áttekintését.
Fontos
2022. december 13-ától az Azure Functions-futtatókörnyezet 2.x és 3.x verzióján futó függvényalkalmazások elérik a kiterjesztett támogatás végét. További információ: Kivont verziók.
Ez a cikk végigvezeti a függvényalkalmazás biztonságos migrálásának folyamatán a Functions-futtatókörnyezet 4.x verziójának futtatásához. Mivel a projektmigrálási utasítások nyelvfüggőek, mindenképpen a cikk tetején található választóból válassza ki a fejlesztési nyelvet.
A migrálandó függvényalkalmazások azonosítása
A következő PowerShell-szkripttel létrehozhatja az előfizetésében azoknak a függvényalkalmazásoknak a listáját, amelyek jelenleg a 2.x vagy a 3.x verziót célják:
$Subscription = '<YOUR SUBSCRIPTION ID>'
Set-AzContext -Subscription $Subscription | Out-Null
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
if ($App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"] -like '*3*')
{
$AppInfo.Add($App.Name, $App.ApplicationSettings["FUNCTIONS_EXTENSION_VERSION"])
}
}
$AppInfo
Válassza ki a cél .NET-verziót
A Functions-futtatókörnyezet 3.x verziójában a C# függvényalkalmazás a .NET Core 3.1-et célozza meg a folyamatban lévő modellel, vagy a .NET 5-öt az izolált feldolgozómodellel.
A függvényalkalmazás migrálásakor lehetősége van kiválasztani a .NET célverzióját. A C#-projektet a .NET alábbi verzióinak egyikére frissítheti, amelyeket a Functions 4.x verziója támogat:
| .NET-verzió | .NET Hivatalos támogatási szabályzat kiadási típusa | Functions-folyamatmodell1,2 |
|---|---|---|
| .NET 10 | LTS (a támogatás megszűnésének dátuma: 2028. november 14.) | Izolált feldolgozói modell |
| .NET 9 | STS (támogatás megszűnése 2026. november 10.)3 | Izolált feldolgozói modell |
| .NET 8 | LTS (támogatás megszűnése 2026. november 10.) |
Izolált feldolgozói modell, Folyamatközi modell2 |
| .NET-keretrendszer 4.8 | Szabályzat megtekintése | Izolált feldolgozói modell |
1 Az izolált feldolgozói modell támogatja a .NET hosszú távú támogatási (LTS) és standard távú támogatási (STS) verzióit, valamint .NET-keretrendszer. A folyamaton belüli modell csak a .NET LTS-kiadásait támogatja, a .NET 8 végződéssel. A két modell teljes funkció- és funkció-összehasonlítását lásd : Különbségek a folyamatban lévő és a feldolgozói folyamat elkülönítése .NET Azure Functions között.
2 A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. További információkért tekintse meg ezt a támogatási közleményt. A folyamatos teljes támogatás érdekében az alkalmazásokat át kell telepítenie az izolált feldolgozói modellbe.
3 .NET 9 korábban 2026. május 12-én várható támogatás megszűnésének dátuma volt. A .NET 9 szolgáltatásablakban a .NET csapata 24 hónapra kiterjesztette az STS-verziók támogatását a .NET 9-től kezdve. További információkért lásd a blogbejegyzést.
Tipp.
Javasoljuk, hogy frissítsen a .NET 8-ra az izolált feldolgozói modellen. A .NET 8 a .NET leghosszabb támogatási ablakával rendelkező, teljesen kiadott verzió.
Bár dönthet úgy, hogy inkább a folyamaton belüli modellt használja, ezt a megközelítést nem javasoljuk, ha el tudja kerülni. A folyamaton belüli modell támogatása 2026. november 10-én megszűnik, ezért előbb át kell lépnie az elkülönített feldolgozói modellre. Ha így tesz, a 4.x-es verzióra való migrálás csökkenti a szükséges teljes erőfeszítést, és az izolált feldolgozói modell további előnyöket biztosít az alkalmazásnak, beleértve a .NET jövőbeli verzióinak egyszerűbb megcélzását is. Ha az izolált munkavállalói modellre vált, a .NET Upgrade Assistant a szükséges kódmódosításokat is képes elvégezni az Ön számára.
Ez az útmutató nem mutat be konkrét példákat a .NET 10 -hez (előzetes verzió) vagy a .NET 9-hez. Ha az egyik verziót meg kell céloznia, a .NET 8-példákat is módosíthatja.
Előkészületek a migráláshoz
Ha még nem tette meg, az Azure PowerShell használatával azonosítsa az aktuális Azure-előfizetésben áttelepítendő alkalmazások listáját.
Mielőtt migrálna egy alkalmazást a Functions-futtatókörnyezet 4.x verziójára, végezze el a következő feladatokat:
- Tekintse át a 3.x és 4.x közötti kompatibilitástörő változások listáját.
- A helyi projekt áttelepítéséhez végezze el a helyi projekt áttelepítésének lépéseit a 4.x verzióra.
- A projekt migrálása után tesztelje az alkalmazást helyileg az Azure Functions Core Tools 4.x-es verziójával.
- Futtassa a frissítés előtti érvényesítőt az Azure-ban üzemeltetett alkalmazásban, és oldja meg az észlelt problémákat.
- Frissítse a függvényalkalmazást az Azure-ban az új verzióra. Ha minimalizálnia kell az állásidőt, érdemes lehet egy átmeneti ponttal tesztelni és ellenőrizni a migrált alkalmazást az Azure-ban az új futtatókörnyezeti verzióban. Ezután üzembe helyezheti az alkalmazást a frissített verzióbeállításokkal az éles ponton. További információ: Frissítés pontok használatával.
- Tegye közzé a migrált projektet a frissített függvényalkalmazásban.
Ha a Visual Studio használatával közzétesz egy 4.x-es verziójú projektet egy meglévő függvényalkalmazásban alacsonyabb verzióban, a rendszer arra kéri, hogy a Visual Studio az üzembe helyezés során frissítse a függvényalkalmazást a 4.x verzióra. Ez a frissítés ugyanazt a folyamatot használja, amelyet a Frissítés pont nélkül definiált.
A helyi projekt migrálása
A frissítési utasítások nyelvfüggők. Ha nem látja a nyelvet, válassza ki a cikk tetején található választógombból.
Válassza ki azt a lapot, amely megfelel a .NET célverziójának és a kívánt folyamatmodellnek (folyamatban lévő vagy izolált feldolgozói folyamat).
Tipp.
Ha a .NET LTS- vagy STS-verziójára vált az izolált feldolgozói modell használatával, a .NET frissítési segéd használatával automatikusan elvégezheti a következő szakaszokban említett módosítások nagy részét.
Projektfájl
Az alábbi példa egy .csproj .NET Core 3.1-et használó projektfájl a 3.x verzión:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
Az alábbi eljárások egyikével frissítheti ezt az XML-fájlt a Functions 4.x verziójában való futtatáshoz:
Ezek a lépések egy helyi C#-projektet feltételeznek; ha az alkalmazás ehelyett C# szkriptet (.csx fájlokat) használ, a folytatás előtt át kell alakítania a projektmodellt .
A .csproj XML-projektfájlban a következő módosítások szükségesek:
Állítsa be a következő értékét
PropertyGroup: .TargetFrameworknet8.0hezÁllítsa be a következő értékét
PropertyGroup: .AzureFunctionsVersionv4hezAdja hozzá a következő
OutputTypeelemet aPropertyGroupkövetkezőhöz:<OutputType>Exe</OutputType>ItemGroupA .PackageReferencelistában cserélje le a csomaghivatkozástMicrosoft.NET.Sdk.Functionsa következő hivatkozásokra:<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" />Jegyezze fel a névterek más
Microsoft.Azure.WebJobs.*csomagjaira mutató hivatkozásokat. Ezeket a csomagokat egy későbbi lépésben fogja lecserélni.Adja hozzá a következő újat
ItemGroup:<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
A módosítások elvégzése után a frissített projektnek a következő példához hasonlóan kell kinéznie:
<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>
Csomag- és névtérváltozások
Az áttérni kívánt modell alapján előfordulhat, hogy frissítenie vagy módosítania kell az alkalmazás által hivatkozott csomagokat. A célcsomagok bevezetésekor frissítenie kell az utasítások és a hivatkozott típusok névterét. A névtérváltozások hatása a using található utasításokra a jelen cikk későbbi részében látható.
Ha még nem tette meg, frissítse a projektet, hogy a következő stabil verziókra hivatkozzon:
Az alkalmazás által használt eseményindítóktól és kötésektől függően előfordulhat, hogy az alkalmazásnak más csomagokra kell hivatkoznia. Az alábbi táblázat a leggyakrabban használt bővítmények cseréjét mutatja be:
| Eset | Csomaghivatkozások módosítása |
|---|---|
| Időzítő-eseményindító | Hozzáadás Microsoft.Azure.Functions.Worker.Extensions.Timer |
| Tárkötések | HelyettesítMicrosoft.Azure.WebJobs.Extensions.Storagenevű és Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues és Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Blobkötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Storage.Blobsa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs |
| Üzenetsorkötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Storage.Queuesa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
| Táblakötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Tablesa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Cosmos DB-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.CosmosDBés/vagy Microsoft.Azure.WebJobs.Extensions.DocumentDBa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
| Szolgáltatásbusz-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.ServiceBusa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
| Event Hubs-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.EventHubsa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
| Event Grid-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.EventGrida legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
| SignalR Service-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.SignalRServicea legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
| Durable Functions | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.DurableTaska legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
| Durable Functions (SQL Storage-szolgáltató) |
Hivatkozás cseréje erre:Microsoft.DurableTask.SqlServer.AzureFunctionsa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
| Durable Functions (Netherite tárhely szolgáltató) |
Hivatkozás cseréje erre:Microsoft.Azure.DurableTask.Netherite.AzureFunctionsa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
| SendGrid-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.SendGrida legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
| Kafka-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.Kafkaa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.Kafka |
| RabbitMQ-kötések | Hivatkozás cseréje erre:Microsoft.Azure.WebJobs.Extensions.RabbitMQa legújabb verzióval Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
| Függőséginjektálás és indítási konfiguráció |
Hivatkozás eltávolításaMicrosoft.Azure.Functions.Extensions(Az izolált feldolgozói modell alapértelmezés szerint ezt a funkciót biztosítja.) |
A megfontolandó bővítmények teljes listájáért tekintse meg a támogatott kötéseket , és tekintse meg az egyes bővítmények dokumentációját az izolált folyamatmodellre vonatkozó teljes telepítési utasításokért. Mindenképpen telepítse a megcélzott csomagok legújabb stabil verzióját.
Tipp.
Előfordulhat, hogy a folyamat során a bővítményverziók módosításai szükségessé teszik a fájl frissítését host.json is. Mindenképpen olvassa el a használt bővítmények dokumentációját.
A Service Bus-bővítmény például a 4.x és az 5.x verzió közötti struktúrában kompatibilitástörő változásokat mutat. További információ: Azure Service Bus-kötések az Azure Functionshez.
Az izolált feldolgozómodell-alkalmazás nem hivatkozhat a névterekben vagy Microsoft.Azure.WebJobs.*a Microsoft.Azure.Functions.Extensions . Ha további hivatkozásokkal rendelkezik ezekre, azokat el kell távolítani.
Tipp.
Az alkalmazás az Azure SDK-típusoktól is függhet, akár az eseményindítók és kötések részeként, akár önálló függőségként. Használja ki ezt a lehetőséget, hogy ezeket is frissítse. A Functions-bővítmények legújabb verziói a .NET-hez készült Azure SDK legújabb verzióival működnek, amelyek szinte minden csomagja az űrlapAzure.*.
Program.cs fájl
Izolált feldolgozói folyamatba való migráláskor a következő program.cs fájlt kell hozzáadnia a projekthez:
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();
Ez a példa ASP.NET Core-integrációt is tartalmaz, amely javítja a teljesítményt, és ismerős programozási modellt biztosít, amikor az alkalmazás HTTP-eseményindítókat használ. Ha nem kíván HTTP-eseményindítókat használni, a hívás ConfigureFunctionsWebApplication lecserélhető a következő hívásra ConfigureFunctionsWorkerDefaults: . Ha így tesz, eltávolíthatja a hivatkozásokat Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore a projektfájlból. A legjobb teljesítmény érdekében azonban még a más triggertípusokkal rendelkező függvények esetében is meg kell tartania a FrameworkReference ASP.NET Core-t.
A Program.cs fájl minden olyan fájlt lecserél, amely rendelkezik az FunctionsStartup attribútummal, amely általában egy Startup.cs fájl. Azokban a helyeken, ahol a FunctionsStartup kód hivatkozna IFunctionsHostBuilder.Services, a .ConfigureServices()-ben a HostBuilder osztály metódusának részeként adhat hozzá utasításokat. A Program.cs használatával kapcsolatos további információkért tekintse meg az elkülönített feldolgozói modell útmutatójának indítási és konfigurációs útmutatóját.
A korábban ismertetett alapértelmezett Program.cs példák közé tartozik az Application Insights beállítása. A Program.cs minden olyan naplószűrést is konfigurálnia kell, amely a projekt kódjából származó naplókra vonatkozik. Az izolált feldolgozói modellben a host.json fájl csak a Functions-gazdagép futtatókörnyezete által kibocsátott eseményeket szabályozza. Ha nem konfigurálja a szűrési szabályokat a Program.cs, a telemetriai adatok különböző kategóriáihoz tartozó naplószintek különbségei jelenhetnek meg.
Bár az egyéni konfigurációs forrásokat a HostBuilderprojekt részeként regisztrálhatja, ezek hasonlóképpen csak a projekt kódjára vonatkoznak. A platformnak eseményindító- és kötéskonfigurációra is szüksége van, és ezt az alkalmazásbeállítások, a Key Vault-hivatkozások vagy az alkalmazáskonfigurációs referenciák funkcióin keresztül kell megadni.
Miután mindent áthelyezett a meglévő FunctionsStartup elemből a Program.cs fájlba, törölheti az FunctionsStartup attribútumot, valamint az alkalmazott osztályt, amelyre vonatkozott.
local.settings.json fájl
A local.settings.json fájl csak helyi futtatáskor használható. További információt a Helyi beállítások fájlban talál.
A 4.x verzióra való migráláskor győződjön meg arról, hogy a local.settings.json fájl legalább a következő elemeket tartalmazza:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Feljegyzés
Amikor a folyamaton belüli futtatásról az elkülönített feldolgozói folyamatba migrál, az FUNCTIONS_WORKER_RUNTIME értéket "dotnet-izolált" értékre kell módosítania.
host.json fájl
A fájlban nincs szükség módosításokra host.json . Ha azonban az Application Insights-konfiguráció ebben a fájlban a folyamatban lévő modellprojektből származik, érdemes lehet más módosításokat végrehajtania a Program.cs fájlban. A host.json fájl csak a Functions-gazdagép futtatókörnyezetéből való naplózást szabályozza, és az izolált feldolgozói modellben ezek a naplók egy része közvetlenül az alkalmazásból származik, így több vezérlést biztosít. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.
Osztálynévváltozások
Egyes kulcsosztályok módosították a neveket a verziók között. Ezek a módosítások a .NET API-k változásainak vagy a folyamaton belüli és az izolált feldolgozói folyamat közötti különbségeknek a eredményeképpen jönnek létre. Az alábbi táblázat a Functions által használt legfontosabb .NET-osztályokat jelzi, amelyek a migrálás során változhatnak:
| .NET Core 3.1 | .NET 5 | .NET 8 |
|---|---|---|
FunctionName (attribútum) |
Function (attribútum) |
Function (attribútum) |
ILogger |
ILogger |
ILogger, ILogger<T> |
HttpRequest |
HttpRequestData |
HttpRequestData, HttpRequest (ASP.NET Core-integráció használata) |
IActionResult |
HttpResponseData |
HttpResponseData, IActionResult (ASP.NET Core-integráció használata) |
FunctionsStartup (attribútum) |
Ehelyett használja Program.cs a |
Ehelyett használja Program.cs a |
A kötésekben osztálynévbeli különbségek is lehetnek. További információkért tekintse meg az adott kötésekre vonatkozó referenciacikkeket.
Egyéb kódmódosítások
Ez a szakasz a migrálás során megfontolandó egyéb kódmódosításokat emeli ki. Ezekre a módosításokra nem minden alkalmazásnak van szüksége, de érdemes kiértékelni, hogy vannak-e relevánsak a forgatókönyvek szempontjából. Ellenőrizze a 3.x és 4.x közötti kompatibilitástörő módosításokat a projekten esetleg szükséges egyéb módosítások esetében.
JSON-szerializálás
Az izolált feldolgozómodell alapértelmezés szerint System.Text.Json-t használ JSON-szerializáláshoz. A szerializáló beállításainak testreszabásához vagy a JSON.NET (Newtonsoft.Json) való váltáshoz lásd: JSON-szerializálás testreszabása.
Az Application Insights naplószintjei és szűrése
A naplók elküldhetők az Application Insightsnak a Functions-gazdagép futtatókörnyezetéből és a projekt kódjából is. A host.json lehetővé teszi a gazdagép naplózás szabályainak konfigurálását, azonban a kódból érkező naplók ellenőrzéséhez a Program.cs részeként kell konfigurálnia a szűrési szabályokat. A naplók szűrésének részleteiért tekintse meg az izolált feldolgozói modell naplószintjeinek kezelését ismertető cikket.
HTTP trigger sablon
A folyamaton belüli és az izolált feldolgozói folyamat közötti különbségek a HTTP által aktivált függvényekben láthatók. A 3.x verzió (folyamatban lévő) HTTP-eseményindító sablonja a következő példához hasonlóan néz ki:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Company.Function
{
public static class HttpTriggerCSharp
{
[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
}
}
A migrált verzió HTTP-triggersablonja a következő példához hasonlóan néz ki:
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"]}!");
}
}
}
A projekt frissítése az Azure Functions 4.x-hez:
Frissítse az Azure Functions Core Tools helyi telepítését a 4.x-es verzióra.
Frissítse az alkalmazás Azure Functions-bővítményeinek csomagját 2.x vagy újabb verzióra. További információ: kompatibilitástörő változások.
Szükség esetén lépjen a 4.x verzióban támogatott Java-verziók egyikére.
Frissítse az alkalmazás fájlját
POM.xmlúgy, hogy módosítsa aFUNCTIONS_EXTENSION_VERSIONbeállítást~4a következő példához hasonlóan:<configuration> <resourceGroup>${functionResourceGroup}</resourceGroup> <appName>${functionAppName}</appName> <region>${functionAppRegion}</region> <appSettings> <property> <name>WEBSITE_RUN_FROM_PACKAGE</name> <value>1</value> </property> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>
- Szükség esetén lépjen a 4.x verzióban támogatott Node.js verziók egyikére.
- Használja ki ezt a lehetőséget, és frissítsen a PowerShell 7.2-re, ami ajánlott. További információ: PowerShell-verziók.
- Ha Python 3.6-ot használ, lépjen az egyik támogatott verzióra.
A frissítés előtti érvényesítő futtatása
Az Azure Functions biztosít egy frissítés előtti ellenőrzőt, amely segít azonosítani a függvényalkalmazás 4.x verzióra való migrálásakor felmerülő lehetséges problémákat. A frissítés előtti érvényesítő futtatása:
Az Azure Portalon keresse meg a függvényalkalmazást.
Nyissa meg a Problémák diagnosztizálása és megoldása lapot.
A Függvényalkalmazás diagnosztikájában kezdjen el gépelni
Functions 4.x Pre-Upgrade Validator, majd válassza ki a listából.Az ellenőrzés befejeződése után tekintse át a javaslatokat, és oldja meg az alkalmazással kapcsolatos problémákat. Ha módosítania kell az alkalmazást, győződjön meg arról, hogy a módosításokat a Functions-futtatókörnyezet 4.x verziójával ellenőrzi, akár helyileg, az Azure Functions Core Tools 4-es verziójával, akár egy átmeneti pont használatával.
A függvényalkalmazás frissítése az Azure-ban
A migrált projekt közzététele előtt frissítenie kell az Azure-beli függvényalkalmazás-gazdagép futtatókörnyezetét a 4.x verzióra. A Functions-gazdagép által használt futtatókörnyezeti verziót az FUNCTIONS_EXTENSION_VERSION alkalmazásbeállítás szabályozza, de bizonyos esetekben más beállításokat is frissíteni kell. A kódmódosításokhoz és az alkalmazásbeállítások módosításához is újra kell indítani a függvényalkalmazást.
A legegyszerűbb megoldás, ha pontok nélkül frissít, majd újból közzéteheti az alkalmazásprojektet. Emellett minimalizálhatja az állásidőt az alkalmazásban, és leegyszerűsítheti a visszaállítást a pontok használatával történő frissítéssel.
Frissítés pontok nélkül
A legegyszerűbben úgy frissíthet v4.x verzióra, ha az alkalmazásbeállítást FUNCTIONS_EXTENSION_VERSION az ~4 Azure-beli függvényalkalmazásban állítja be. Más eljárást kell követnie egy olyan webhelyen, amelyen pontok találhatóak.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Másik beállítást is be kell állítania, amely a Windows és a Linux között különbözik.
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le <APP_NAME> a függvényalkalmazás nevére és <RESOURCE_GROUP_NAME> az erőforráscsoport nevére.
Most már újra közzéteheti a 4.x-es verzióra migrált alkalmazásprojektet.
Frissítés pontok használatával
Az üzembehelyezési pontok használatával frissítheti a függvényalkalmazást egy korábbi verzió v4.x futtatókörnyezetére. Átmeneti pont használatával futtathatja az alkalmazást az előkészítési ponton található új futtatókörnyezeti verzión, és az ellenőrzés után éles környezetbe válthat. A bővítőhelyek lehetővé teszik az állásidő minimalizálását is a frissítés során. Ha minimalizálnia kell az állásidőt, kövesse a minimális állásidő frissítésének lépéseit.
Miután ellenőrizte az alkalmazást a frissített ponton, felcserélheti az alkalmazást és az új verzióbeállításokat éles környezetbe. Ehhez a felcseréléshez be kell állítani WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 az éles pontban. A beállítás hozzáadása befolyásolja a frissítéshez szükséges állásidőt.
Standard frissítés
Ha a pontalapú függvényalkalmazás képes kezelni a teljes újraindítás állásidejét, frissítheti a WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS beállítást közvetlenül az éles pontban. Mivel a beállítás közvetlenül az éles pontban való módosítása olyan újraindítást okoz, amely hatással van a rendelkezésre állásra, fontolja meg ezt a módosítást a csökkentett forgalom idején. Ezután felcserélheti a frissített verziót az előkészítési pontról.
A Update-AzFunctionAppSetting PowerShell-parancsmag jelenleg nem támogatja a tárolóhelyeket. Az Azure CLI-t vagy az Azure Portalt kell használnia.
Az éles pontban a következő paranccsal állíthatja be
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0a következő parancsot:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>Ebben a példában cserélje le
<APP_NAME>a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>az erőforráscsoport nevére. Ez a parancs az éles pontban futó alkalmazás újraindítását okozza.Az előkészítési ponton a következő paranccsal is beállíthatja
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONSa beállításokat:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>A következő paranccsal módosítsa
FUNCTIONS_EXTENSION_VERSIONés frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>A Functions-futtatókörnyezet 4.x verziójához .NET 6 szükséges a Windowsban. Linux rendszeren a .NET-alkalmazásoknak a .NET 6-ra is frissítenie kell. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le
<APP_NAME>a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>az erőforráscsoport nevére.Ha a kódprojektnek a 4.x verzión való futtatáshoz frissítésekre volt szüksége, telepítse ezeket a frissítéseket az előkészítési ponton.
A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.
A frissített átmeneti pont éles környezetbe való felcseréléséhez használja a következő parancsot:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Minimális állásidő-frissítés
Az éles alkalmazásban az állásidő minimalizálása érdekében felcserélheti a beállítást az WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS előkészítési pontról az éles környezetbe. Ezután felcserélheti a frissített verziót egy előre elkészített előkészítési pontról.
Az előkészítési ponton a következő paranccsal állíthatja be
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0a következő parancsot:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Az alábbi parancsokkal felcserélheti a pontot az új beállítással az éles környezetbe, és ezzel egyidejűleg visszaállíthatja a verzióbeállítást az előkészítési ponton.
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~3 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Az előkészítési pont hibái a felcserélés és az előkészítéskor visszaállított futtatókörnyezeti verzió közötti időszakban jelenhetnek meg. Ez a hiba azért fordulhat elő, mert ha
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0csak a felcserélés során van előkészítés, az eltávolítja azFUNCTIONS_EXTENSION_VERSIONelőkészítési beállítást. A verzióbeállítás nélkül a pont rossz állapotban van. Az előkészítési ponton lévő verzió frissítése közvetlenül a felcserélés után jó állapotba kell helyeznie a pontot, és szükség esetén vissza kell hívnia a módosítások visszaállítását. A felcserélés bármilyen visszaállításához azonban közvetlenül el kell távolítaniaWEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0a termelésből a csere előtt, hogy megelőzze az előkészítés során tapasztalt éles hibákat. Ez a változás az éles beállításban újraindítást okozna.Az előkészítési ponton a következő paranccsal állíthatja
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0be ismét:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Ezen a ponton mindkét pont be van
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0állítva.A következő paranccsal módosítsa
FUNCTIONS_EXTENSION_VERSIONés frissítse az előkészítési pontot az új futtatókörnyezeti verzióra:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>A Functions-futtatókörnyezet 4.x verziójához .NET 6 szükséges a Windowsban. Linux rendszeren a .NET-alkalmazásoknak a .NET 6-ra is frissítenie kell. Használja a következő parancsot, hogy a futtatókörnyezet a .NET 6-on fusson:
Windows rendszeren való futtatáskor engedélyeznie kell a .NET 8.0-t is, amelyet a futtatókörnyezet 4.x-es verziója igényel.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>A .NET 6 szükséges a Windowson futó bármely nyelven futó függvényalkalmazásokhoz.
Ebben a példában cserélje le
<APP_NAME>a függvényalkalmazás nevére és<RESOURCE_GROUP_NAME>az erőforráscsoport nevére.Ha a kódprojektnek a 4.x verzión való futtatáshoz frissítésekre volt szüksége, telepítse ezeket a frissítéseket az előkészítési ponton.
A felcserélés előtt ellenőrizze, hogy a függvényalkalmazás megfelelően fut-e a frissített átmeneti környezetben.
A frissített és előre elkészített átmeneti pont éles környezetbe való felcseréléséhez használja az alábbi parancsot:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Kompatibilitástörő változások 3.x és 4.x között
Az alábbiakban a 3.x alkalmazás 4.x-re való frissítése előtt fontos kompatibilitástörő változásokat ismerhet meg, beleértve a nyelvspecifikus kompatibilitástörő módosításokat is. A teljes listát az Azure Functions GitHub kompatibilitástörő változás: jóváhagyott címkével ellátott problémái között találja.
Ha nem látja a programozási nyelvet, válassza ki a lap tetején.
Futtatókörnyezet
Az Azure Functions-proxyk az Azure Functions-futtatókörnyezet 1.x és 3.x verzióinak funkciói. Ez a funkció a 4.x verzióban nem támogatott. További információ: Kiszolgáló nélküli REST API-k az Azure Functions használatával.
Az Azure Storage-ba az AzureWebJobsDashboard használatával történő naplózás már nem támogatott a 4.x-ben. Ehelyett az Application Insightst kell használnia. (#1923)
Az Azure Functions 4.x mostantól a bővítmények minimális verziókövetelményeit érvényesíti. Frissítsen az érintett bővítmények legújabb verziójára. Non-.NET nyelvek esetén frissítsen a bővítménycsomag 2.x vagy újabb verziójára. (#1987)
Az alapértelmezett és a maximális időtúllépések mostantól 4.x-ben lesznek kényszerítve a Linuxon futó függvényalkalmazások esetében egy használatalapú csomagban. (#1915)
Az Azure Functions 4.x a Key Vault-szolgáltatót használja
Azure.IdentityésAzure.Security.KeyVault.Secretselavulta a Microsoft.Azure.KeyVault használatát. A függvényalkalmazás beállításainak konfigurálásáról további információt a Key Vault Kulcstároló kezelése lehetőségében talál. (#2048)A tárfiókokat használó függvényalkalmazások most már nem indulnak el, ha a gazdaazonosítójuk megegyezik. További információkért lásd a gazdagépazonosítóval kapcsolatos szempontokat. (#2049)
Az Azure Functions 4.x támogatja a .NET újabb verzióit. A verziók teljes listáját az Azure Functions támogatott nyelvei között találja.
InvalidHostServicesExceptionez most végzetes hiba. (#2045)EnableEnhancedScopesalapértelmezés szerint engedélyezve van. (#1954)Eltávolítás
HttpClientregisztrált szolgáltatásként. (#1911)
- Az alapértelmezett szálszám frissült. A nem szálbiztos vagy magas memóriahasználattal rendelkező függvények hatással lehetnek. (#1962)