Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
13 Aralık 2022 itibarıyla, Azure İşlevleri çalışma zamanının 2.x ve 3.x sürümlerinde çalışan işlev uygulamaları genişletilmiş desteğin sonuna ulaşmıştır. Daha fazla bilgi için bkz . Kullanımdan kaldırılacak sürümler.
Azure İşlevleri sürüm 4.x, sürüm 3.x ile son derece geriye dönük uyumludur. Çoğu uygulama önemli kod değişiklikleri gerektirmeden güvenli bir şekilde 4.x'e geçirilmelidir. İşlevler çalışma zamanı sürümleri hakkında daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
Önemli
Tüketim planında Linux'ta kullanım süresi sonu v3 çalışma zamanını çalıştırmaya devam eden işlev uygulamaları 30 Eylül 2026'dan sonra çalışmayı durduruyor. Hizmet kesintisini önlemek için uygulamanızı v4 çalışma zamanına geçirin.
Tüketim planında Linux'ta işlev uygulamaları barındırma seçeneği 30 Eylül 2028'de kullanımdan kaldırılıyor. Linux Tüketim planı yeni özellikler veya dil sürümleri almayacak. Tüketim planında Windows çalışan uygulamalar şu anda etkilenmez. Uygulamalarınızı kullanımdan kaldırma tarihinden önce Esnek Tüketim planına geçirin.
Bu makalede, İşlevler çalışma zamanının 4.x sürümünde çalışacak şekilde işlev uygulamanızı güvenli bir şekilde geçirme işleminde size yol gösterilir. Proje geçiş yönergeleri dile bağlı olduğundan, makalenin üst kısmındaki seçiciden geliştirme dilinizi seçtiğinizden emin olun.
Taşınacak işlev uygulamalarını tanımlayın.
Aboneliğinizde şu anda 2.x veya 3.x sürümlerini hedefleyen işlev uygulamalarının listesini oluşturmak için aşağıdaki PowerShell betiğini kullanın:
$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
Hedef .NET sürümünüzü seçin
Functions çalışma zamanının 3.x sürümünde, C# işlev uygulamanız .NET Core 3.1'i işlem içi modeli kullanarak veya yalıtılmış çalışan modelini kullanarak .NET 5'i hedefler.
İşlev uygulamanızı taşırken, .NET'in hedef sürümünü seçme şansına sahipsiniz. C# projenizi İşlevler sürüm 4.x tarafından desteklenen aşağıdaki .NET sürümlerinden biriyle güncelleştirebilirsiniz:
| .NET sürümü | .NET Resmi Destek İlkesi sürüm türü | İşlevler işlem modeli1,2 |
|---|---|---|
| .NET 10 | LTS (destek sonu 14 Kasım 2028) | Yalıtılmış çalışan modeli |
| .NET 9 | STS (destek sonu 10 Kasım 2026)3 | Yalıtılmış çalışan modeli |
| .NET 8 | LTS (destek sonu 10 Kasım 2026) |
Yalıtılmış çalışan modeli, İşlem içi model2 |
| .NET Framework 4.8 | Politikaya bakın | Yalıtılmış çalışan modeli |
1isolated worker modeli, .NET Uzun Vadeli Destek (LTS) ve Standart Destek Süresi (STS) sürümlerini ve .NET Framework'ü destekler. in-process modeli yalnızca .NET 8 ile biten .NET LTS sürümlerini destekler. İki modelin tam özellik ve fonksiyonelliği karşılaştırılması için bkz. İşlem içi ve izole çalışan işlemi süreçleri .NET Azure İşlevleri arasındaki farklar.
2 İşlem içi model için destek 10 Kasım 2026'da sona eriyor. Daha fazla bilgi için bu destek duyurusna bakın. Sürekli tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmeniz gerekir.
3 .NET 9 daha önce beklenen destek sonu tarihi 12 Mayıs 2026'dır. .NET 9 hizmet penceresinde, .NET ekibi STS sürümleri için desteği .NET 9 ile başlayarak 24 aya uzattı. Daha fazla bilgi için blog gönderisine bakın.
İpucu
Yalıtılmış çalışan modelinde .NET 8'e güncelleştirmenizi öneririz. .NET 8, .NET en uzun destek penceresine sahip tam olarak yayımlanan sürümdür.
Bunun yerine işlem içi modeli kullanmayı seçebilirsiniz, ancak bundan kaçınabiliyorsanız bu yaklaşımı önermeyiz. İşlem içi model desteği 10 Kasım 2026'da sona ereceğinden, bundan önce yalıtılmış çalışan modeline geçmeniz gerekir. 4.x sürümüne geçiş sırasında bu işlem yapılması gereken toplam çabayı azaltır ve yalıtılmış çalışan modeli, uygulamanıza .NET'in gelecekteki sürümlerini daha kolay hedefleme özelliği de dahil olmak üzere ek avantajları verir. Yalıtılmış çalışan modeline geçiyorsanız .NET Yükseltme Yardımcısı sizin için gerekli kod değişikliklerinin çoğunu da işleyebilir.
Bu kılavuz, .NET 10 (önizleme) veya .NET 9 için belirli örnekler sunmaz. Bu sürümlerden birini hedeflemeniz gerekiyorsa .NET 8 örneğini uyarlayabilirsiniz.
Geçiş için hazırlanma
Henüz yapmadıysanız, Azure PowerShell kullanarak geçerli Azure Aboneliğinizde geçirilmesi gereken uygulamaların listesini belirleyin.
Bir uygulamayı İşlevler çalışma zamanının 4.x sürümüne geçirmeden önce aşağıdaki görevleri gerçekleştirmeniz gerekir:
- 3.x ile 4.x arasındaki kritik değişikliklerin listesini gözden geçirin.
- Yerel projenizi sürüm 4.x'e geçirmek için Yerel projenizi geçirme bölümünde yer alan adımları tamamlayın.
- Projenizi geçirdikten sonra, Azure İşlevleri Core Tools'un 4.x sürümünü kullanarak uygulamayı yerel olarak eksiksiz bir şekilde test edin.
- Azure'da barındırılan uygulamada yükseltme öncesi doğrulayıcıyı çalıştırın ve tanımlanan sorunları çözün.
- Azure'daki işlev uygulamanızı yeni sürüme güncelleştirin. Kapalı kalma süresini en aza indirmeniz gerekiyorsa, taşınmış uygulamanızı yeni çalışma zamanı sürümünde Azure'da test etmek ve doğrulamak için bir staging slot kullanmayı göz önünde bulundurun. Ardından uygulamanızı güncelleştirilmiş sürüm ayarlarıyla üretim yuvasına dağıtabilirsiniz. Daha fazla bilgi için Yuvaları kullanarak güncelleme kısmına bakın.
- Geçirilen projenizi güncelleştirilmiş işlev uygulamasında yayımlayın.
Visual Studio kullanarak daha düşük bir sürümde mevcut bir işlev uygulamasına sürüm 4.x projesi yayımladığınızda, Visual Studio'nun dağıtım sırasında işlev uygulamasını 4.x sürümüne güncellemesine izin vermeniz istenir. Bu güncelleştirme, Slot kullanmadan güncelleme olarak tanımlanan işlemi kullanır.
Yerel projenizi taşımak
Yükseltme yönergeleri dile bağlıdır. Dilinizi görmüyorsanız makalenin üst kısmındaki seçiciden seçin.
hedef .NET sürümünüzle eşleşen sekmeyi ve istenen işlem modelini (işlem içi veya yalıtılmış çalışan işlemi) seçin.
İpucu
Yalıtılmış çalışan modelini kullanarak .NET LTS veya STS sürümüne geçiyorsanız, aşağıdaki bölümlerde belirtilen değişikliklerin çoğunu otomatik olarak yapmak için .NET Yükseltme Yardımcısı kullanılabilir.
Project dosyası
Aşağıdaki örnek, 3.x sürümünde .NET Core 3.1 kullanan bir .csproj proje dosyasıdır:
<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>
Bu XML dosyasını İşlevler sürüm 4.x'te çalışacak şekilde güncelleştirmek için aşağıdaki yordamlardan birini kullanın:
Bu adımlarda yerel bir C# projesi varsayılır; uygulamanız bunun yerine C# betiği (.csx dosyaları) kullanıyorsa devam etmeden önce proje modeline dönüştürmeniz gerekir.
.csproj XML proje dosyasında aşağıdaki değişiklikler gereklidir:
değerini
PropertyGroupayarlayın.TargetFramework'dannet8.0'e.değerini
PropertyGroupayarlayın.AzureFunctionsVersion'danv4'e.Aşağıdaki
OutputTypeöğeyiPropertyGroupöğesine ekleyin.<OutputType>Exe</OutputType>içinde
ItemGroup.PackageReferencelistesindekiMicrosoft.NET.Sdk.Functionspaket başvurusunu aşağıdaki başvurularla değiştirin:<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" />Microsoft.Azure.WebJobs.*ad alanları içindeki diğer paketlere yapılan başvuruları not edin. Sonraki bir adımda bu paketleri değiştireceksiniz.Aşağıdaki yeni
ItemGroupöğesini ekleyin:<ItemGroup> <Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/> </ItemGroup>
Bu değişiklikleri yaptıktan sonra güncelleştirilmiş projeniz aşağıdaki örnekteki gibi görünmelidir:
<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>
Paket ve ad alanı değişiklikleri
Geçiş yaptığınız modele bağlı olarak, uygulamanızın başvurdığı paketleri güncelleştirmeniz veya değiştirmeniz gerekebilir. Hedef paketleri kullanmaya başladığınızda, using ifadelerinin ve başvurduğunuz bazı türlerin ad alanını güncelleştirmeniz gerekir. Bu ad alanı değişikliklerinin using deyimler üzerindeki etkisini bu makalede HTTP Tetikleyici Şablonu örneklerinde görebilirsiniz.
Henüz yapmadıysanız, projenizi aşağıdakilerin en son kararlı sürümlerine başvuracak şekilde güncelleştirin:
Uygulamanızın kullandığı tetikleyicilere ve bağlamalara bağlı olarak, uygulamanızın farklı bir paket kümesine başvurması gerekebilir. Aşağıdaki tabloda, en yaygın kullanılan uzantılardan bazılarının yerine geçenler gösterilmektedir:
| Senaryo | Paket başvurularında yapılan değişiklikler |
|---|---|
| Süreölçer tetikleyicisi | Ekle Microsoft.Azure. Functions.Worker.Extensions.Timer |
| Depolama bağlamaları | DeğiştirMicrosoft.Azure.WebJobs.Extensions.Storageile Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues ve Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Blob bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Blobsen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.Storage.Blobs |
| Kuyruk bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Queuesen yeni sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
| Tablo bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Tablesen yeni sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Tables |
| Cosmos DB bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.CosmosDBve/veya Microsoft.Azure.WebJobs.Extensions.DocumentDBen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.CosmosDB |
| Service Bus bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.ServiceBusen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.ServiceBus |
| Event Hubs bağlantıları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventHubsen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.EventHubs |
| Event Grid bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventGriden yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.EventGrid |
| SignalR Hizmeti bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SignalRServiceen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.SignalRService |
| Dayanıklı Fonksiyonlar (Dayanıklı İşlevler) | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.DurableTasken yeni sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
| Dayanıklı Fonksiyonlar (Dayanıklı İşlevler) (SQL depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.DurableTask.SqlServer.AzureFunctionsen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.DurableTask.SqlServer |
| Dayanıklı Fonksiyonlar (Dayanıklı İşlevler) (Netherite depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.Azure.DurableTask.Netherite.AzureFunctionsen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.DurableTask.Netherite |
| SendGrid bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.SendGriden yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.SendGrid |
| Kafka bağlantı arayüzleri | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Kafkaen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.Kafka |
| RabbitMQ bağlantıları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.RabbitMQen yeni sürümüyle Microsoft.Azure. Functions.Worker.Extensions.RabbitMQ |
| Bağımlılık enjeksiyonu ve başlangıç konfigürasyonu |
Referansları kaldırMicrosoft.Azure.Functions.Extensions(Yalıtılmış çalışan modeli bu işlevi varsayılan olarak sağlar.) |
Dikkate alınacak uzantıların tam listesi için desteklenen bağlamalar bölümüne bakın ve yalıtılmış işlem modeline yönelik tam yükleme yönergeleri için her uzantının belgelerine bakın. Hedeflediğiniz paketlerin en son kararlı sürümünü yüklediğinizden emin olun.
İpucu
Bu işlem sırasında uzantı sürümlerinde yapılan tüm değişiklikler dosyanızı da güncelleştirmenizi host.json gerektirebilir. Kullandığınız her uzantının belgelerini okuduğunuzdan emin olun.
Örneğin, Service Bus uzantısının yapısında 4.x ve 5.x sürümleri arasında uyumsuz değişiklikler vardır. Daha fazla bilgi için Azure İşlevleri için Azure Service Bus bağlamaları belgesine bakın.
Yalıtılmış çalışan modeli uygulamanız Microsoft.Azure.WebJobs.* ad alanları veya Microsoft.Azure.Functions.Extensions hiçbir pakete başvurmamalıdır. Bunlara kalan referanslarınız varsa, bunlar kaldırılmalıdır.
İpucu
Uygulamanız, tetikleyicilerinizin ve bağlamalarınızın bir parçası olarak veya tek başına bağımlılık olarak Azure SDK türlerine de bağlı olabilir. Bunları güncelleştirmek için de bu fırsatı değerlendirmelisiniz. İşlev uzantılarının en son sürümleri, .NET için
Program.cs dosyası
Yalıtılmış bir çalışan işleminde çalıştırılacak şekilde geçiş yaparken, projenize aşağıdaki program.cs dosyasını eklemeniz gerekir:
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();
Bu örnek, uygulamanız HTTP tetikleyicilerini kullandığında performansı artırmak ve tanıdık bir programlama modeli sağlamak amacıyla ASP.NET Core tümleştirmesini içerir. HTTP tetikleyicilerini kullanmayı düşünmüyorsanız, ConfigureFunctionsWebApplication çağrısını ConfigureFunctionsWorkerDefaults çağrısıyla değiştirebilirsiniz. Bunu yaparsanız, proje dosyanızdan başvuru Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore'u kaldırabilirsiniz. Ancak, en iyi performans için, diğer tetikleyici türlerine sahip işlevler için bile FrameworkReference'yi ASP.NET Core üzerinde tutmalısınız.
Program.cs dosyası, özniteliğine FunctionsStartup sahip olan ve genellikle Startup.cs bir dosya olan herhangi bir dosyanın yerini alır. Kodunuzun FunctionsStartup başvuracağı IFunctionsHostBuilder.Services yerlerde, bunun yerine .ConfigureServices() metodunun HostBuilder içinde Program.cs dosyasına deyimler ekleyebilirsiniz.
Program.cs ile çalışma hakkında daha fazla bilgi edinmek için yalıtılmış çalışan modeli kılavuzundaki Başlangıç ve yapılandırma bölümüne bakın.
Önceden açıklanan varsayılan Program.cs örnekleri, Application Insights kurulumunu içerir. Projenizdeki koddan gelen günlüklere uygulanacak günlük filtreleme ayarlarını, Program.cs dosyanızda da yapılandırmanız gerekir. Yalıtılmış çalışan modelinde ,host.json dosyası yalnızca İşlevler konak çalışma zamanı tarafından yayılan olayları denetler. Program.cs'de filtreleme kurallarını yapılandırmazsanız, telemetrinizdeki çeşitli kategoriler için log seviyelerinde farklılıklar görebilirsiniz.
Özel yapılandırma kaynaklarını öğesinin HostBuilderbir parçası olarak kaydedebilirsiniz, ancak bunlar benzer şekilde yalnızca projenizdeki kodlar için geçerlidir. Platform ayrıca tetikleyici ve bağlama yapılandırmasına da ihtiyaç duyar ve bu, uygulama ayarları, Key Vault başvuruları veya App Yapılandırma başvuruları özellikleri aracılığıyla sağlanmalıdır.
Var olan FunctionsStartup herhangi bir dosyadaki her şeyi Program.cs dosyasına taşıdıktan sonra özniteliğini FunctionsStartup ve uygulandığı sınıfı silebilirsiniz.
local.settings.json dosyası
local.settings.json dosyası yalnızca yerel olarak çalıştırılırken kullanılır. Bilgi için bkz . Yerel ayarlar dosyası.
Sürüm 4.x'e geçiş yaptığınızda, local.settings.json dosyanızda en az aşağıdaki öğelerin olduğundan emin olun:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "AzureWebJobsStorageConnectionStringValue",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
Not
İşlem içi çalıştırmadan yalıtılmış bir çalışan işleminde çalıştırmaya geçiş yaparken, değeri "dotnet-isolated" olarak değiştirmeniz FUNCTIONS_WORKER_RUNTIME gerekir.
host.json dosyası
Dosyanızda host.json değişiklik yapılması gerekmez. Ancak, bu dosyadaki Application Insights yapılandırmanız işlem içi model projenizden geliyorsa, dosyanızda başka değişiklikler yapmak isteyebilirsiniz Program.cs . Dosya host.json yalnızca İşlevler ana bilgisayar çalışma zamanından loglamayı denetler ve yalıtılmış çalışan modelinde, bu logların bazıları doğrudan uygulamanızdan gelir, bu da size daha fazla kontrol sağlar. Bu günlükleri nasıl filtreleyeceğiniz hakkında ayrıntılı bilgi için, Yalıtılmış çalışan modelinde günlük düzeylerini yönetme bölümüne bakın.
Sınıf adı değişiklikleri
Bazı anahtar sınıfları, sürümler arasında adları değiştirdi. Bu değişiklikler, .NET API'lerdeki değişikliklerin veya işlem içi ile yalıtılmış çalışan işlemi arasındaki farkların bir sonucudur. Aşağıdaki tabloda, geçiş sırasında değişebilen İşlevler tarafından kullanılan anahtar .NET sınıfları gösterilir:
| .NET Core 3.1 | .NET 5 | .NET 8 |
|---|---|---|
FunctionName (öznitelik) |
Function (öznitelik) |
Function (öznitelik) |
ILogger |
ILogger |
ILogger, ILogger<T> |
HttpRequest |
HttpRequestData |
HttpRequestData, HttpRequest (ASP.NET Core entegrasyonu kullanarak) |
IActionResult |
HttpResponseData |
HttpResponseData, IActionResult (ASP.NET Core entegrasyonu kullanarak) |
FunctionsStartup (öznitelik) |
Bunun yerine kullanır Program.cs |
Bunun yerine kullanır Program.cs |
Bağlamalarda sınıf adı farklılıkları da olabilir. Daha fazla bilgi için, belirli bağlamalar için başvuru makalelerine bakın.
Diğer kod değişiklikleri
Bu bölümde, geçişte çalışırken dikkate alınacak diğer kod değişiklikleri vurgulanır. Bu değişiklikler tüm uygulamalar için gerekli değildir, ancak senaryolarınızla ilgili olup olmadığını değerlendirmeniz gerekir. Projenizde yapmanız gereken diğer değişiklikleri belirlemek için 3.x ile 4.x arasındaki önemli değişiklikleri kontrol ettiğinizden emin olun.
JSON serileştirme
Yalıtılmış çalışan modeli varsayılan olarak JSON serileştirmesi için System.Text.Json kullanır. Seri hale getirici seçeneklerini özelleştirmek veya JSON.NET'e (Newtonsoft.Json) geçiş yapmak için bkz. JSON serileştirmeyi özelleştirme.
Application Insights günlük düzeyleri ve filtreleme
Günlükler hem İşlevler konak çalışma zamanından hem de projenizdeki koddan Application Insights'a gönderilebilir. host.json konak günlüğü kurallarını yapılandırmanıza olanak tanır, ancak kodunuzdan gelen günlükleri denetlemek için Program.cs bir parçası olarak filtreleme kurallarını yapılandırmanız gerekir. Bu günlükleri nasıl filtreleyeceğiniz hakkında ayrıntılı bilgi için, Yalıtılmış çalışan modelinde günlük düzeylerini yönetme bölümüne bakın.
HTTP tetikleyicisi şablonu
İşlem içi ve yalıtılmış çalışan işlemi arasındaki farklar HTTP ile tetiklenen işlevlerde görülebilir. Sürüm 3.x (işlem içi) için HTTP tetikleyici şablonu aşağıdaki örneğe benzer:
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);
}
}
}
Geçirilen sürüm için HTTP tetikleyici şablonu aşağıdaki örneğe benzer:
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"]}!");
}
}
}
Projenizi Azure İşlevleri 4.x'e güncelleştirmek için:
Azure İşlevleri Core Tools yerel yüklemenizi 4.x sürümüne güncelleştirin.
Uygulamanızın Azure İşlevleri uzantı paketini 2.x veya üzeri bir değere güncelleştirin. Daha fazla bilgi için uyumluluk bozan değişiklikler bölümüne bakın.
Gerekirse, 4.x sürümünde desteklenen
Java sürümlerinden birine geçin. Uygulamanın
POM.xmldosyasını aşağıdaki örnekte görüldüğü gibiFUNCTIONS_EXTENSION_VERSIONayarını~4olarak değiştirmek için güncelleyin.<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>
- Gerekirse, 4.x sürümünde desteklenen Node.js sürümlerinden birine geçin.
- Bu fırsatı kullanarak önerilen PowerShell 7.2 sürümüne yükseltin. Daha fazla bilgi için bkz . PowerShell sürümleri.
- Python 3.6 kullanıyorsanız, desteklenen bir sürüme geçin.
Yükseltme öncesi doğrulayıcıyı çalıştırma
Azure İşlevleri, işlev uygulamanızı 4.x sürümüne geçirirken olası sorunları belirlemenize yardımcı olacak bir yükseltme öncesi doğrulayıcı sağlar. Yükseltme öncesi doğrulayıcıyı çalıştırmak için:
Azure portalında işlev uygulamanıza gidin.
Sorunları tanılama ve çözme sayfasını açın.
İşlev Uygulaması Tanılama'da yazmaya
Functions 4.x Pre-Upgrade Validatorbaşlayın ve listeden seçin.Doğrulama tamamlandıktan sonra önerileri gözden geçirin ve uygulamanızdaki sorunları giderin. Uygulamanızda değişiklik yapmanız gerekiyorsa, değişiklikleri ya Azure İşlevleri Core Tools v4 kullanarak yerel olarak ya da bir hazırlık slotu kullanarak İşlevler çalışma zamanının 4.x sürümüne karşı doğruladığınızdan emin olun.
Azure'de işlev uygulamanızı güncelleştirme
Geçirilen projenizi yayımlamadan önce Azure işlev uygulaması konağı çalışma zamanını 4.x sürümüne güncelleştirmeniz gerekir. İşlevler konağı tarafından kullanılan çalışma zamanı sürümü uygulama ayarı tarafından FUNCTIONS_EXTENSION_VERSION denetlenmektedir, ancak bazı durumlarda diğer ayarların da güncelleştirilmiş olması gerekir. Hem kod değişiklikleri hem de uygulama ayarlarında yapılan değişiklikler, işlev uygulamanızın yeniden başlatılmasını gerektirir.
En kolay yol, yuvalar olmadan güncelleyip ardından uygulama projenizi yeniden yayımlamaktır. Ayrıca, slotları kullanarak güncelleyip, uygulamanızda kapalı kalma süresini en aza indirirken geri alma işlemini de basitleştirebilirsiniz.
Yuvalar olmadan güncelleştirme
v4.x'e güncelleştirmenin en basit yolu, Azure'daki işlev uygulamanızda FUNCTIONS_EXTENSION_VERSION uygulama ayarını ~4 olarak ayarlamaktır. Slotları olan bir site üzerinde farklı bir prosedür izlemeniz gerekir.
az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
Ayrıca, Windows ile Linux arasında farklılık gösteren başka bir ayar da ayarlamanız gerekir.
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>
.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte, <APP_NAME> değerini işlev uygulamanızın adıyla ve <RESOURCE_GROUP_NAME> kaynak grubunuzun adıyla değiştirin.
Artık 4.x sürümünde çalıştırılacak şekilde geçirilen uygulama projenizi yeniden yayımlayabilirsiniz.
Yuvaları kullanarak güncelleştirme
Dağıtım yuvalarını kullanmak, işlev uygulamanızı önceki bir sürümden v4.x çalışma zamanına güncelleştirmenin iyi bir yoludur. Hazırlama yuvası kullanarak uygulamanızı hazırlama yuvasındaki yeni çalışma zamanı sürümünde çalıştırabilir ve doğrulamadan sonra üretime geçebilirsiniz. Yuvalar ayrıca güncelleme sırasında kesinti süresini en aza indirmenin bir yolunu sağlar. Kapalı kalma süresini en aza indirmeniz gerekiyorsa En düşük kapalı kalma süresi güncelleştirmesi'ndeki adımları izleyin.
Uygulamanızı güncelleştirilmiş yuvada doğruladıktan sonra uygulamayı ve yeni sürüm ayarlarını üretime geçirebilirsiniz. Bu değiştirme için üretim yuvasında WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 ayarlanması gerekir. Bu ayarı ekleme şekliniz, güncelleştirme için gereken kapalı kalma süresini etkiler.
Standart güncelleştirme
Yuva etkinleştirilmiş işlev uygulamanız tam bir yeniden başlatma sırasında ortaya çıkan kesinti süresini yönetebiliyorsa, WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS ayarını doğrudan üretim yuvasında güncelleştirebilirsiniz. Bu ayarı doğrudan üretim yuvasında değiştirmek kullanılabilirliği etkileyen bir yeniden başlatmaya neden olduğundan, bu değişikliği trafiğin azaldığı bir zamanda yapmayı göz önünde bulundurun. Ardından, hazırlama yuvasından güncelleştirilmiş sürümü değiştirebilirsiniz.
Update-AzFunctionAppSetting PowerShell cmdlet'i şu anda yuvaları desteklememektedir. Azure CLI veya Azure portalını kullanmanız gerekir.
Üretim yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarlamak için aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>Bu örnekte,
<APP_NAME>değerini işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>kaynak grubunuzun adıyla değiştirin. Bu komut, üretim yuvasında çalışan uygulamanın yeniden başlatılmasına neden olur.Ayrıca hazırlık slotunda
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONSayarlamak için aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Hazırlama yuvasını yeni çalışma zamanı sürümüne değiştirmek ve güncellemek için
FUNCTIONS_EXTENSION_VERSIONaşağıdaki komutu kullanın:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>İşlevler çalışma zamanının 4.x sürümü, Windows .NET 6 gerektirir. Linux'ta .NET uygulamalar da .NET 6'ya güncelleştirilmelidir. Çalışma zamanının .NET 6'da çalışabilmesi için aşağıdaki komutu kullanın:
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte,
<APP_NAME>değerini işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>kaynak grubunuzun adıyla değiştirin.Kod projeniz 4.x sürümünde çalışacak güncelleştirmeler gerektiriyorsa, bu güncelleştirmeleri hazırlama yuvasına şimdi dağıtın.
Değiştirmeden önce işlev uygulamanızın güncelleştirilmiş hazırlama ortamında doğru şekilde çalıştığını onaylayın.
Güncellenmiş hazırlık yuvasını üretime geçirmek için aşağıdaki komutu kullanın:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
Minimum kesinti süresi güncellemesi
Üretim uygulamanızdaki kesinti süresini en aza indirmek için, WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS ayarını hazırlık yuvasından üretim ortamına değiştirebilirsiniz. Bundan sonra, önceden ısıtılmış bir hazırlık yuvasından güncellenmiş sürümü değiş tokuş edebilirsiniz.
Hazırlama yuvasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarlamak için aşağıdaki komutu kullanın.az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Yeni ayar ile yuvayı üretim ortamına geçirmek ve aynı zamanda hazırlık yuvasındaki sürüm ayarını geri yüklemek için aşağıdaki komutları kullanın.
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>Sürüm değişimi ile çalışma zamanı sürümünün hazırlık aşamasında geri yüklendiği zaman arasında, hazırlama yuvasından kaynaklanan hatalar görebilirsiniz. Bu hata, değişim sırasında
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0yalnızca hazırlık ortamında olduğunda ve staging'dekiFUNCTIONS_EXTENSION_VERSIONayarı kaldırıldığında oluşabilir. Sürüm ayarı olmadan yuvanız kötü durumdadır. Değiştirme işleminden hemen sonra, hazırlık yuvasındaki sürümün güncellenmesi yuvayı yeniden iyi bir duruma getirmelidir. Gerekirse değişikliklerinizi geri alabilirsiniz. Ancak, bir değişikliğin geri alınması durumunda, sahnede görülen üretim hatalarını önlemek için "WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0'yı" üretime geri dönüş işlemi yapılmadan önce doğrudan üretimden kaldırmanız gerekmektedir. Üretim ayarındaki bu değişiklik yeniden başlatmaya neden olur.Yeniden
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0ayarlamak için hazırlama yuvasında aşağıdaki komutu kullanın:az functionapp config appsettings set --settings WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>Bu noktada her iki yuva da
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0olarak ayarlanmıştır.Hazırlama yuvasını yeni çalışma zamanı sürümüne değiştirmek ve güncellemek için
FUNCTIONS_EXTENSION_VERSIONaşağıdaki komutu kullanın:az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME>İşlevler çalışma zamanının 4.x sürümü, Windows .NET 6 gerektirir. Linux'ta .NET uygulamalar da .NET 6'ya güncelleştirilmelidir. Çalışma zamanının .NET 6'da çalışabilmesi için aşağıdaki komutu kullanın:
Windows üzerinde çalışırken, çalışma zamanının 4.x sürümü için gereken .NET 8.0'ı da etkinleştirmeniz gerekir.
az functionapp config set --net-framework-version v8.0 -g <RESOURCE_GROUP_NAME> -n <APP_NAME>.NET 6, Windows üzerinde çalışan herhangi bir dildeki işlev uygulamaları için gereklidir.
Bu örnekte,
<APP_NAME>değerini işlev uygulamanızın adıyla ve<RESOURCE_GROUP_NAME>kaynak grubunuzun adıyla değiştirin.Kod projeniz 4.x sürümünde çalışacak güncelleştirmeler gerektiriyorsa, bu güncelleştirmeleri hazırlama yuvasına şimdi dağıtın.
Değiştirmeden önce işlev uygulamanızın güncelleştirilmiş hazırlama ortamında doğru şekilde çalıştığını onaylayın.
Güncellenmiş ve önceden ısıtılmış hazırlık yuvasını üretime taşımak için aşağıdaki komutu kullanın:
az functionapp deployment slot swap -g <RESOURCE_GROUP_NAME> -n <APP_NAME> --slot <SLOT_NAME> --target-slot production
3.x ile 4.x arasında uyumluluk bozan değişiklikler
Aşağıda, bir 3.x uygulamasını 4.x sürümüne yükseltmeden önce dikkat edilmesi gereken, dile özgü önemli değişiklikler de dahil olmak üzere, önemli değişiklikler yer alır. Tam listeyi görmek için Breaking Change: Approved etiketli Azure İşlevleri GitHub konularına bakın.
Programlama dilinizi görmüyorsanız sayfanın en üstünden seçin.
Çalışma Zamanı
Azure İşlevleri Proxy'ler, Azure İşlevleri çalışma zamanının 1.x ile 3.x sürümleri arasında bir özellikti. Bu özellik 4.x sürümünde desteklenmez. Daha fazla bilgi için Azure İşlevleri kullanarak Sunucusuz REST API'leri bölümüne bkz.
AzureWebJobsDashboard kullanarak Azure Depolama oturum açma artık 4.x'te desteklenmiyor. Bunun yerine Application Insights kullanmalısınız. (#1923)
Azure İşlevleri 4.x artık uzantılar için minimum sürüm gereksinimlerini zorlar. Etkilenen uzantıların en son sürümüne güncelleştirin. .NET olmayan diller için uzantı paketi sürümünü 2.x veya daha sonrasına güncelleyin. (#1987)
Varsayılan ve maksimum zaman aşımları artık Bir Tüketim planında Linux üzerinde çalışan işlev uygulamaları için 4.x'te zorunlu kılındı. (#1915)
Azure İşlevleri 4.x, Key Vault sağlayıcısı için
Azure.IdentityveAzure.Security.KeyVault.Secretskullanır ve Microsoft.Azure.KeyVault kullanımını terk etmiştir. İşlev uygulaması ayarlarını yapılandırma hakkında daha fazla bilgi için Manage key storage içindeki Key Vault seçeneğine bakın. (#2048)Depolama hesaplarını paylaşan işlev uygulamaları artık konak kimlikleri aynı olduğunda başlatılamıyor. Daha fazla bilgi için bkz . Konak Kimliği ile ilgili dikkat edilmesi gerekenler. (#2049)
Azure İşlevleri 4.x, .NET'in daha yeni sürümlerini destekler. Sürümlerin tam listesi için bkz. Supported languages in Azure İşlevleri.
InvalidHostServicesExceptionartık ölümcül bir hatadır. (#2045)EnableEnhancedScopesvarsayılan olarak etkindir. (#1954)HttpClientöğesini kayıtlı bir hizmet olarak kaldırın. (#1911)
- Varsayılan iş parçacığı sayısı güncelleştirildi. İş parçacığı açısından güvenli olmayan veya yüksek bellek kullanımına sahip işlevler etkilenebilir. (#1962)