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
İşlem içi model desteği 10 Kasım 2026'da sona erer. Bu makaledeki yönergeleri izleyerek uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.
Bu makale, .NET işlev uygulamanızı işlem içi modelden yalıtılmış çalışan modelinegüvenli bir şekilde geçirme işleminde size yol gösterir. Bu modeller arasındaki üst düzey farklar hakkında bilgi edinmek için yürütme modu karşılaştırmasına bakın.
Bu kılavuzda uygulamanızın İşlevler çalışma zamanının 4.x sürümünde çalıştığı varsayılır. Aksi takdirde, ana bilgisayar sürümünüzü yükseltmek için aşağıdaki kılavuzları kullanmanız gerekir. Bu konak sürümü geçiş kılavuzları, bunlar üzerinden çalışırken yalıtılmış çalışan modeline geçmenize de yardımcı olur.
- Uygulamaları Azure İşlevleri sürüm 2.x ve 3.x'ten sürüm 4.x'e geçirme
- Uygulamaları Azure İşlevleri sürüm 1.x'ten sürüm 4.x'e geçirme
Desteklendiğinde, bu makale yalıtılmış çalışan modelinde ASP.NET Core tümleştirmesinin avantajlarından yararlanır. Bu da performansı artırır ve uygulamanız HTTP tetikleyicileri kullandığında tanıdık bir programlama modeli sağlar.
Geçirecek işlev uygulamalarını tanımlama
Aboneliğinizde şu anda işlem içi modeli kullanan işlev uygulamalarının listesini oluşturmak için aşağıdaki Azure PowerShell betiğini kullanın.
Betik, Azure PowerShell'in kullanmak üzere yapılandırılmış olduğu aboneliği kullanır. Önce komutunu çalıştırıp Set-AzContext -Subscription '<YOUR SUBSCRIPTION ID>'
değerini değerlendirmek istediğiniz aboneliğin kimliğiyle değiştirerek <YOUR SUBSCRIPTION ID>
aboneliği değiştirebilirsiniz.
$FunctionApps = Get-AzFunctionApp
$AppInfo = @{}
foreach ($App in $FunctionApps)
{
if ($App.Runtime -eq 'dotnet')
{
$AppInfo.Add($App.Name, $App.Runtime)
}
}
$AppInfo
Hedef .NET sürümünüzü seçin
İşlevler çalışma zamanının 4.x sürümünde, .NET işlev uygulamanız işlem içi modeli kullanırken .NET 6 veya .NET 8'i hedefler.
İşlev uygulamanızı geçirirken hedef .NET sürümünü seçme fırsatınız vardır. 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 9 | STS (destek sonu 12 Mayıs 2026) | 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 | İlkeye bakın | Yalıtılmış çalışan modeli |
1 Yalıtılmış çalışan modeli , .NET Framework'ün yanı sıra .NET'in Uzun Vadeli Destek (LTS) ve Standart Terim Desteği (STS) sürümlerini destekler. İşlem içi model yalnızca .NET 8 ile biten .NET'in LTS sürümlerini destekler. İki model arasında tam özellik ve işlevsellik karşılaştırması için bkz. .NET Azure İşlevleri çalışan işlemi ile yalıtma 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.
İpucu
Yalıtılmış çalışan modelinde .NET 8'e yükseltmenizi öneririz. Bu, .NET'ten en uzun destek penceresiyle tam olarak yayımlanan sürüme hızlı bir geçiş yolu sağlar.
Bu kılavuz .NET 9 için belirli örnekler sunmaz. Bu sürümü hedeflemeniz gerekiyorsa .NET 8 örneklerini uyarlayabilirsiniz.
Geçiş için hazırlanma
Bir uygulamayı yalıtılmış çalışan modeline geçirmeden önce bu kılavuzun içeriğini ayrıntılı bir şekilde gözden geçirmeniz gerekir. Yalıtılmış çalışan modelinin özelliklerini ve iki model arasındaki farkları da tanımanız gerekir.
Uygulamayı geçirmek için:
- Yerel projenizi yalıtılmış çalışan modeline geçirmek için Yerel projenizi geçirme bölümünde yer alan adımları izleyin.
- Projenizi geçirdikten sonra, Azure İşlevleri Core Tools'un 4.x sürümünü kullanarak uygulamayı yerel olarak tam olarak test edin.
- Azure'daki işlev uygulamanızı yalıtılmış modele güncelleştirin.
Yerel projenizi taşıyın
bölümünde, yerel projenizde yalıtılmış çalışan modeline taşımak için yapmanız gereken çeşitli değişiklikler özetlenmiştir. Adımlardan bazıları hedef .NET sürümünüz temelinde değişir. İstediğiniz sürümle eşleşen yönergeleri seçmek için sekmeleri kullanın.
İpucu
.NET'in LTS veya STS sürümüne geçiyorsanız, .NET Yükseltme Yardımcısı aşağıdaki bölümlerde belirtilen değişikliklerin çoğunu otomatik olarak yapmak için kullanılabilir.
İlk olarak proje dosyasını dönüştürün ve bağımlılıklarınızı güncelleştirin. Bunu yaptığınızda, proje için derleme hataları görürsünüz. Sonraki adımlarda, bu hataları kaldırmak için ilgili değişiklikleri yapacaksınız.
Proje dosyası
Aşağıdaki örnek, 4.x sürümünde . NET 8 kullanan bir .csproj proje dosyasıdır:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.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>
Bu XML dosyasını yalıtılmış çalışan modelinde ç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
PropertyGroup
ayarlayın.TargetFramework
ilenet8.0
.değerini
PropertyGroup
ayarlayın.AzureFunctionsVersion
'danv4
'ye.öğesine aşağıdaki
OutputType
öğeyiPropertyGroup
ekleyin:<OutputType>Exe</OutputType>
içinde
ItemGroup
.PackageReference
listesinde, paket başvurusunuMicrosoft.NET.Sdk.Functions
aşağıdaki referanslarla 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" />
Ad alanları içindeki
Microsoft.Azure.WebJobs.*
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>
Projenizin hedef çerçevesini değiştirmek, araç zincirinizin proje kodunun dışındaki bölümlerinde de değişiklik yapılmasını gerektirebilir. Örneğin VS Code'da uzantı ayarını kullanıcı ayarları veya projenizin .vscode/settings.json dosyası aracılığıyla güncelleştirmeniz azureFunctions.deploySubpath
gerekebilir. Derleme adımları veya CI/CD işlem hattı kapsamında proje kodunuzun dışında mevcut olabilecek çerçeve sürümü bağımlılıklarını denetleyin.
Paket referansları
İzole çalışan modeline geçiş yaparken, uygulamanızın referans aldığı paketleri değiştirmeniz gerekir.
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 referansları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.Storage ile Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs, Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues ve Microsoft.Azure.Functions.Worker.Extensions.Tables |
Blob bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Blobs en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs |
Kuyruk bağlamaları | Atıfları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Storage.Queues en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues |
Tablo bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Tables en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.Tables |
Cosmos DB bağlamaları | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.CosmosDB ve/veya Microsoft.Azure.WebJobs.Extensions.DocumentDB en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.CosmosDB |
Service Bus bağlantıları | Referansları şu ile değiştirin:Microsoft.Azure.WebJobs.Extensions.ServiceBus en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.ServiceBus |
Event Hubs bağlantıları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventHubs en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.EventHubs |
Event Grid bağlamaları | Atıfları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.EventGrid en son sürüm ile Microsoft.Azure.Functions.Worker.Extensions.EventGrid |
SignalR Hizmeti bağlamaları | Referansları değiştirinMicrosoft.Azure.WebJobs.Extensions.SignalRService en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.SignalRService |
Dayanıklı İşlevler | Başvuruları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.DurableTask en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask |
Dayanıklı İşlevler (SQL depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.DurableTask.SqlServer.AzureFunctions en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer |
Dayanıklı İşlevler (Netherite depolama sağlayıcısı) |
Referansları şununla değiştirin:Microsoft.Azure.DurableTask.Netherite.AzureFunctions en son sürümü ile Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite |
SendGrid bağlamaları | Şu referansları değiştirin:Microsoft.Azure.WebJobs.Extensions.SendGrid en son sürümüyle Microsoft.Azure.Functions.Worker.Extensions.SendGrid |
Kafka bağlamaları | Referansları şununla değiştirin:Microsoft.Azure.WebJobs.Extensions.Kafka en son versiyonuyla Microsoft.Azure.Functions.Worker.Extensions.Kafka |
RabbitMQ bağlantıları | Referansları ile değiştirin:Microsoft.Azure.WebJobs.Extensions.RabbitMQ en son sürümünü kullanarak Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ |
Bağımlılık enjeksiyonu ve başlangıç yapılandırması |
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ında 4.x ve 5.x sürümleri arasındaki yapısında uyumsuzluk yaratan değişiklikler vardır. Daha fazla bilgi için bkz. Azure İşlevleri için Azure Service Bus bağlamaları.
Yalıtılmış çalışan modeli uygulamanız, Microsoft.Azure.WebJobs.*
veya Microsoft.Azure.Functions.Extensions
ad alanlarındaki paketlere başvurmamalıdır. Eğer bunlara yönelik kalan referanslar varsa, 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 Azure SDK'sı'nın en son sürümleriyle çalışır ve bu SDK'nın neredeyse tüm paketleri Azure.*
biçimindedir.
Program.cs dosyası
Yalıtılmış bir çalışan işleminde çalıştırılacak şekilde geçiş yaparken, projenize aşağıdaki içerikleri içeren bir Program.cs dosyası 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, performansı geliştirmek ve uygulamanız HTTP tetikleyicileri kullandığında tanıdık bir programlama modeli sağlamak için 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. Proje dosyanızdan Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore
başvurusunu kaldırabilirsiniz, bunu yaparsanız. Ancak, en iyi performans için, diğer tetikleyici türlerine sahip işlevler için bile, FrameworkReference
değerini ASP.NET Core ile 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 HostBuilder
metodunun .ConfigureServices()
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 HostBuilder
bir 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 bunun uygulama ayarları, Key Vault başvuruları veya Uygulama Yapılandırması başvuru özellikleri aracılığıyla sağlanması gerekir.
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.
İşlev imzası değişiklikleri
İşlem içi model ile yalıtılmış çalışan modeli arasında bazı anahtar türleri değişir. Bunların çoğu, işlev imzasını oluşturan öznitelikler, parametreler ve dönüş türleriyle ilgilidir. İşlevlerinizin her biri için şu değişiklikler yapmanız gerekir:
- İşlevin adını da ayarlayan işlev özniteliği
- İşlev bir
ILogger
/ILogger<T>
nasıl elde eder - Tetikleyici ve bağlama öznitelikleri ve parametreleri
Bu bölümün geri kalan kısmı, her adımda size yol gösterir.
İşlev öznitelikleri
Function
Yalıtılmış çalışan modelindeki özniteliği özniteliğinin FunctionName
yerini alır. Yeni öznitelik aynı imzaya sahiptir ve tek fark addır. Bu nedenle projeniz genelinde bir dize değişimi gerçekleştirebilirsiniz.
Kayıt Tutma
İşlem içi modelde, işleviniz için isteğe bağlı bir ILogger
parametre ekleyebilir veya bir ILogger<T>
almak için bağımlılık enjeksiyonunu kullanabilirsiniz. Uygulamanız zaten bağımlılık ekleme kullandıysa, yalıtılmış çalışan modelinde aynı mekanizmalar çalışır.
Ancak, yöntem parametresini ILogger
kullanan tüm İşlevler için bir değişiklik yapmanız gerekir.
ILogger<T>
elde etmek için bağımlılık enjeksiyonu kullanmanızı öneririz. Fonksiyonun günlük sistemini geçirmek için aşağıdaki adımları kullanın:
İşlev sınıfınıza,
MyFunction
öğesini işlev sınıfınızın adıyla değiştirerek birprivate readonly ILogger<MyFunction> _logger;
özelliği ekleyin.İşlev sınıfınız için parametresi olarak alan
ILogger<T>
bir oluşturucu oluşturun:public MyFunction(ILogger<MyFunction> logger) { _logger = logger; }
Önceki kod parçacığındaki her iki
MyFunction
örneğini, fonksiyon sınıfınızın adıyla değiştirin.İşlev kodunuzda günlüğe kaydetme işlemleri için parametreye
ILogger
yapılan başvuruları_logger
ile değiştirin.ILogger
İşlev imzanızdan parametresini kaldırın.
Daha fazla bilgi edinmek için Yalıtılmış çalışan modelinde günlüğe kaydetme bölümüne bakın.
Tetikle ve Bağlama Değişiklikleri
Önceki bir adımda paket başvurularınızı değiştirdiğinizde, tetikleyicileriniz ve bağlamalarınız için düzeltebileceğiniz hatalar oluşturmuştunuz:
Herhangi bir
using Microsoft.Azure.WebJobs;
ifadesini kaldırın.Bir
using Microsoft.Azure.Functions.Worker;
ifadesi ekleyin.Her bağlama özniteliği için, özniteliğin adını, Desteklenen bağlamalar dizininde bulabileceğiniz başvuru belgelerinde belirtildiği gibi değiştirin. Genel olarak öznitelik adları aşağıdaki gibi değişir:
- Tetikleyiciler genellikle aynı şekilde adlandırılır. Örneğin,
QueueTrigger
her iki modelin öznitelik adıdır. - Giriş bağlamalarının genellikle adlarına eklenmesi gerekir
Input
. Örneğin, işlem içi modelde giriş bağlama özniteliğini kullandıysanızCosmosDB
, özniteliği şimdi olacaktırCosmosDBInput
. - Çıkış bağlamalarının adlarına genellikle
Output
eklenir. Örneğin, işlem içi modelde çıkış bağlama özniteliğini kullandıysanızQueue
, bu öznitelik şimdi olacaktırQueueOutput
.
- Tetikleyiciler genellikle aynı şekilde adlandırılır. Örneğin,
Bağlamanın başvuru belgelerinde belirtildiği gibi, öznitelik parametrelerini yalıtılmış çalışan modeli sürümünü yansıtacak şekilde güncelleştirin.
Örneğin, işlem içi modelde bir blob çıkış bağlaması özelliği içeren
[Blob(...)]
birAccess
öznitelikle temsil edilir. Yalıtılmış çalışan modelinde blob çıkış özniteliği olacaktır[BlobOutput(...)]
. Bağlama artıkAccess
özelliğini gerektirmiyor, bu nedenle bu parametre kaldırılabilir. Bu da[Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")]
olur[BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")]
.Çıkış bağlamalarını işlev parametresi listesinin dışına taşıyın. Yalnızca bir çıkış bağlamanız varsa, bunu işlevin dönüş türüne uygulayabilirsiniz. Birden çok çıkışınız varsa, her çıkış için özelliklere sahip yeni bir sınıf oluşturun ve öznitelikleri bu özelliklere uygulayın. Daha fazla bilgi edinmek için bkz. Birden çok çıkış bağlaması.
Bağlamanıza olanak tanıyan türler için her bağlamanın başvuru belgelerine bakın. Bazı durumlarda türü değiştirmeniz gerekebilir. Çıkış bağlamaları için, işlem içi model sürümü bir
IAsyncCollector<T>
kullandıysa, bunu hedef türündeki bir diziye bağlama ile değiştirebilirsiniz:T[]
. Çıkış bağlamasını, varsa giriş bağlamasının bağlama türü olarak veya istemciyi kendiniz ekleyerek temsil ettiği hizmetin istemci nesnesiyle değiştirmeyi de düşünebilirsiniz.İşleviniz bir
IBinder
parametre içeriyorsa, bunu kaldırın. İşlevselliği, varsa bir giriş bağlamasının bağlama türü olarak veya bir istemciyi kendiniz ekleyerek temsil ettiği hizmetin istemci nesnesiyle değiştirin.İşlev kodunu yeni türlerle çalışacak şekilde güncelleştirin.
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ı.
İşlem içinde çalışandan yalıtılmış bir çalışan işleminde çalıştırmaya geçiş yaparken, FUNCTIONS_WORKER_RUNTIME
değerini dotnet-isolated olarak değiştirmeniz gerekir.
local.settings.json dosyanızda en az aşağıdaki öğelerin olduğundan emin olun:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
sahip olduğunuz AzureWebJobsStorage
değer farklı olabilir. Geçişin bir parçası olarak değerini değiştirmeniz gerekmez.
host.json dosyası
host.json dosyanızda değişiklik yapılması gerekmez. Ancak, Application Insights yapılandırmanız işlem içi model projenizden bu dosyadaysa , Program.cs dosyanızda ek değişiklikler yapmak isteyebilirsiniz. host.json dosyası yalnızca İşlevler ana bilgisayar çalışma zamanından günlüğe kaydetmeyi denetler ve yalıtılmış çalışan modelinde bu günlüklerden bazıları doğrudan uygulamanızdan gelir ve size daha fazla denetim sağlar. Bu günlükleri filtreleme hakkında ayrıntılı bilgi için bkz . Yalıtılmış çalışan modelinde günlük düzeylerini yönetme.
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.
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 (Newtonsoft.Json) seçeneğine geçmek için bkz. JSON serileştirmesini ö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 filtreleme hakkında ayrıntılı bilgi için bkz . Yalıtılmış çalışan modelinde günlük düzeylerini yönetme.
Örnek işlev geçişleri
HTTP tetikleyici örneği
İşlem içi modelin HTTP tetikleyicisi aşağıdaki örneğe benzer olabilir:
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"]}!");
}
}
}
Geçirilen sürüm için http tetikleyicisi aşağıdaki örneğe benzer olabilir:
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"]}!");
}
}
}
Azure'da işlev uygulamanızı güncelleştirme
İşlev uygulamanızı yalıtılmış modele güncelleştirmek, birlikte tamamlanması gereken iki değişiklik içerir, çünkü yalnızca birini tamamlarsanız, uygulama bir hata durumundadır. Bu değişikliklerin her ikisi de uygulama işleminin yeniden başlatılmasına neden olur. Bu nedenlerden dolayı, bir hazırlama yuvası kullanarak güncelleştirmeyi gerçekleştirmeniz gerekir. Hazırlama yuvaları, uygulamanızın kapalı kalma süresini en aza indirmenize yardımcı olur ve geçirilen kodunuzu Azure'daki güncelleştirilmiş yapılandırmanızla test edip doğrulamanıza olanak tanır. Ardından, değiştirme işlemiyle tam olarak geçirilen uygulamanızı üretim yuvasına dağıtabilirsiniz.
Önemli
Bir uygulamanın dağıtılan yükü yapılandırılan çalışma zamanıyla eşleşmediğinde hata durumundadır. Geçiş işlemi sırasında, uygulamayı ideal olarak yalnızca geçici olarak bu duruma getirirsiniz. Dağıtım yuvaları, değişiklikler üretim ortamınıza tek güncelleştirme olarak uygulanmadan önce hazırlama (üretim dışı) ortamınızda hata durumu çözüleceği için bunun etkisini azaltmaya yardımcı olur. Yuvalar ayrıca herhangi bir hataya karşı savunma sağlar ve üretime ulaşmadan önce diğer sorunları algılamanıza olanak sağlar.
İşlem sırasında, hazırlama (üretim dışı) yuvanızdan gelen günlüklerde hatalar görmeye devam edebilirsiniz. Bu beklenen bir durumdur, ancak siz adım adım ilerlerken bunların ortadan kalkması gerekir. Yuva değiştirme işlemini gerçekleştirmeden önce bu hataların ortadan kalktığını ve uygulamanızın beklendiği gibi çalıştığını doğrulamanız gerekir.
İşlev uygulamanızı yalıtılmış çalışan modeline güncelleştirmek için dağıtım yuvalarını kullanmak için aşağıdaki adımları kullanın:
Henüz yapmadıysanız bir dağıtım yuvası oluşturun. Ayrıca yuva değiştirme işlemi hakkında bilgi edinmek ve mevcut uygulamada en az kesintiyle güncelleştirmeler yapabileceğinizden emin olmak isteyebilirsiniz.
Hazırlama (üretim dışı) yuvasının yapılandırmasını yalıtılmış çalışan modelini kullanacak şekilde değiştirmek için uygulama ayarını
dotnet-isolated
olarak ayarlayın.FUNCTIONS_WORKER_RUNTIME
yuva ayarı olarak işaretlenmemelidir.Güncelleştirmenizin bir parçası olarak farklı bir .NET sürümünü de hedeflediyseniz yığın yapılandırmasını da değiştirmeniz gerekir. Bunu yapmak için bkz. Yığın yapılandırmasını güncelleştirme. Gelecekteki tüm .NET sürüm güncelleştirmeleri için aynı yönergeleri kullanabilirsiniz.
CI/CD işlem hattı gibi herhangi bir otomatik altyapı sağlamanız varsa, otomasyonların da doğru .NET sürümüne
FUNCTIONS_WORKER_RUNTIME
ayarlı vedotnet-isolated
hedeflenecek şekilde güncelleştirildiğinden emin olun.Geçirilen projenizi işlev uygulamanızın hazırlama (üretim dışı) yuvasında yayımlayın.
İşlem içi modeli kullanan mevcut bir uygulama veya yuvaya yalıtılmış bir çalışan modeli projesi yayımlamak için Visual Studio kullanırsanız, önceki adımı sizin için aynı anda tamamlayabilir. Önceki adımı tamamlamadıysanız, Visual Studio dağıtım sırasında işlev uygulamasını güncelleştirmenizi ister. Visual Studio bunu tek bir işlem olarak sunar, ancak bunlar yine de iki ayrı işlemdir. Geçici durum sırasında hazırlama (üretim dışı) yuvasından günlüklerinizde hala hatalar görebilirsiniz.
Uygulamanızın test (üretim öncesi) yuvasında beklendiği gibi çalıştığını doğrulayın.
Hazırlama (üretim dışı) yuvanızda yaptığınız değişiklikleri üretim yuvasına uygulamak için yuva değiştirme işlemi gerçekleştirin. Yuva değişimi, üretim ortamınızda geçici hata durumunun ortaya çıkarılmasını önleyen tek bir güncelleştirme olarak gerçekleşir.
Uygulamanızın üretim yuvasında beklendiği gibi çalıştığını onaylayın.
Bu adımları tamamladıktan sonra geçiş tamamlanır ve uygulamanız yalıtılmış modelde çalışır. Tebrikler! Geçiş gerektiren diğer uygulamalar için bu kılavuzdaki adımları yineleyin.