Aracılığıyla paylaş


.NET uygulamalarını işlem içi modelden yalıtılmış çalışan modeline geçirme

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. 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 modeline gü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, bunun yerine ana bilgisayar sürümünüzü yükseltme kılavuzlarını izlemeniz 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.

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 şu anda kullanmak üzere yapılandırıldığı 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'yı 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 Önizleme3 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 6 LTS (destek sonu 12 Kasım 2024) 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.

3 Destek, geçerli kısıtlamalar ve önizleme sürümünü kullanma yönergeleri hakkında ayrıntılı bilgi için yalıtılmış çalışan modelinde .NET sürümlerini önizleme bölümüne bakın.

İ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ılavuzda .NET 9 (Önizleme) veya .NET 6 için belirli örnekler sunulmaz. Bu sürümleri hedeflemeniz gerekiyorsa .NET 8 örneklerini 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ı 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 şunları yapacaksınız:

  1. 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.
  2. Projenizi geçirdikten sonra, Azure İşlevleri Core Tools'un 4.x sürümünü kullanarak uygulamayı yerel olarak tam olarak test edin.
  3. Azure'daki işlev uygulamanızı yalıtılmış modele güncelleştirin.

Yerel projenizi geçirme

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. Bu adımlarda yerel bir C# projesi varsayılır ve uygulamanız bunun yerine C# betiği (.csx dosyalar) kullanıyorsa devam etmeden önce proje modeline dönüştürmeniz gerekir.

İpucu

.NET'in BIR 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. Yaptığınız gibi, 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 6 kullanan bir .csproj proje dosyasıdır:

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

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 ve uygulamanız bunun yerine C# betiği (.csx dosyalar) kullanıyorsa devam etmeden önce proje modeline dönüştürmeniz gerekir.

XML proje dosyasında aşağıdaki değişiklikler gereklidir .csproj :

  1. değerini PropertyGroupayarlayın.TargetFramework için net8.0.

  2. değerini PropertyGroupayarlayın.AzureFunctionsVersion için v4.

  3. öğesine aşağıdaki OutputType öğeyi PropertyGroupekleyin:

    <OutputType>Exe</OutputType>
    
  4. içinde ItemGroup.PackageReference listesinde, paket başvurusını Microsoft.NET.Sdk.Functions 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" />
    

    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.

  5. 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, kullanıcı ayarları veya projenizin .vscode/settings.json dosyası aracılığıyla uzantı ayarını 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 başvuruları

Yalıtılmış çalışan modeline geçiş yaparken, uygulamanızın başvurduğundan 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 başvurularında yapılan değişiklikler
Süreölçer tetikleyicisi Ekle
Microsoft.Azure.Functions.Worker.Extensions.Timer
Depolama bağlamaları Replace
Microsoft.Azure.WebJobs.Extensions.Storage
örneklerini şununla değiştirin:
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ı Başvuruları ş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ı Başvuruları ş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ğlamaları Başvuruları şununla değiştirin:
Microsoft.Azure.WebJobs.Extensions.ServiceBus
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus
Event Hubs bağlamaları Başvuruları ş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ı Başvuruları şununla değiştirin:
Microsoft.Azure.WebJobs.Extensions.EventGrid
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.EventGrid
SignalR Hizmeti bağlamaları Başvuruları şununla değiştirin:
Microsoft.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ı)
Başvuruları ş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ı)
Başvuruları şununla değiştirin:
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
SendGrid bağlamaları Başvuruları şununla değiştirin:
Microsoft.Azure.WebJobs.Extensions.SendGrid
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
Kafka bağlamaları Başvuruları şununla değiştirin:
Microsoft.Azure.WebJobs.Extensions.Kafka
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.Kafka
RabbitMQ bağlamaları Başvuruları şununla değiştirin:
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
en son sürümüyle
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
Bağımlılık ekleme
ve başlangıç yapılandırması
Başvurularını kaldırma
Microsoft.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ıda hataya neden olan 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 veya Microsoft.Azure.Functions.Extensionsad alanları içindeki hiçbir pakete Microsoft.Azure.WebJobs.* başvurmamalıdır. Bunlara yönelik kalan başvuruları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 Azure SDK'sının en son sürümleriyle çalışır ve neredeyse tüm paketleri biçimindedirAzure.*.

Program.cs dosyası

Yalıtılmış bir çalışan işleminde çalıştırılacak şekilde geçiş yaparken, projenize aşağıdaki içeriği içeren bir Program.cs dosya 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, çağrısı ConfigureFunctionsWebApplication yerine öğesine yapılan çağrıyı ConfigureFunctionsWorkerDefaultsdeğiştirebilirsiniz. Bunu yaparsanız, başvuruyu Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore proje dosyanızdan kaldırabilirsiniz. Ancak, en iyi performans için, diğer tetikleyici türlerine sahip işlevler için bile ASP.NET Core'da tutmalısınız FrameworkReference .

Dosya, Program.cs özniteliğine FunctionsStartup sahip olan ve genellikle bir dosya olan herhangi bir Startup.cs dosyanın yerini alır. Kodunuzun FunctionsStartup başvuracağı IFunctionsHostBuilder.Servicesyerlerde, bunun yerine içindeki yöntemine Program.csHostBuilder deyimler .ConfigureServices() ekleyebilirsiniz. ile Program.csç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.

Yukarıdaki varsayılan Program.cs örnekler, yalıtılmış çalışan modeli için Application Insights tümleştirmesi kurulumunu içerir. içinde, projenizdeki Program.cskoddan gelen günlüklere uygulanması gereken günlük filtrelemelerini de yapılandırmanız gerekir. Yalıtılmış çalışan modelinde host.json , dosya yalnızca İşlevler konak çalışma zamanı tarafından yayılan olayları denetler. içinde Program.csfiltreleme kurallarını yapılandırmazsanız, telemetrinizdeki çeşitli kategoriler için mevcut günlük düzeylerinde farklılıklar görebilirsiniz.

özel yapılandırma kaynaklarını öğesinin HostBuilderbir parçası olarak kaydedebilirsiniz, ancak bunların benzer şekilde yalnızca projenizdeki kodlar için de geçerli olduğunu unutmayın. Tetikleyici ve bağlama yapılandırması platform tarafından da gereklidir ve bu, uygulama ayarları, Key Vault başvuruları veya Uygulama Yapılandırması başvuru özellikleri aracılığıyla sağlanmalıdır.

Var olan FunctionsStartup herhangi bir öğeden dosyaya Program.cs her şeyi 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:

  • İşlev özniteliği (işlevin adını da ayarlar)
  • İşlev bir ILogger/ILogger<T>
  • Tetikleyici ve bağlama öznitelikleri ve parametreleri

Bu bölümün geri kalanında bu adımların her biri 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.

Günlük Kaydı

İşlem içi modelde, işlevinize isteğe bağlı ILogger bir parametre dahil edebilir veya bir almak ILogger<T>için bağımlılık ekleme özelliğini 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. Bir elde ILogger<T>etmek için bağımlılık ekleme kullanmanız önerilir. İşlevin günlük mekanizmasını geçirmek için aşağıdaki adımları kullanın:

  1. İşlev sınıfınızda, öğesini işlev sınıfınızın adıyla değiştirerek MyFunction bir private readonly ILogger<MyFunction> _logger; özellik ekleyin.

  2. İş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;
    }
    

    Yukarıdaki kod parçacığındaki her iki örneğini MyFunction de işlev sınıfınızın adıyla değiştirin.

  3. İşlev kodunuzda günlüğe kaydetme işlemleri için parametresine ILogger yapılan başvuruları ile _loggerdeğiştirin.

  4. ILogger İşlev imzanızdan parametresini kaldırın.

Daha fazla bilgi edinmek için bkz . Yalıtılmış çalışan modelinde günlüğe kaydetme.

Değişiklikleri tetikleme ve bağlama

Önceki bir adımda paket başvurularınızı değiştirdiğinizde, tetikleyicileriniz ve bağlamalarınız için düzeltilecek hatalar oluşturmuştunuz:

  1. Deyimleri using Microsoft.Azure.WebJobs; kaldırın.

  2. Deyimini using Microsoft.Azure.Functions.Worker; ekleyin.

  3. 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 adına "Input" eklenmesi gerekir. Örneğin, işlem içi modelde giriş bağlama özniteliğini kullandıysanız CosmosDB , özniteliği şimdi olacaktır CosmosDBInput.
    • Çıkış bağlamalarının genellikle adlarına "Output" eklenmesi gerekir. Örneğin, işlem içi modelde çıkış bağlama özniteliğini kullandıysanız Queue , bu öznitelik şimdi olacaktır QueueOutput.
  4. 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 Access bir [Blob(...)] öznitelikle temsil edilir. Yalıtılmış çalışan modelinde blob çıkış özniteliği olacaktır [BlobOutput(...)]. Bağlama artık parametresinin Access kaldırılabilmesi için özelliği gerektirmez. Bu da [Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")] olur [BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")].

  5. Çı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ı.

  6. 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.

  7. İş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.

  8. İş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ç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. 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"
    }
}

'AzureWebJobsStorage' için sahip olduğunuz değer farklı olabilir. Geçişin bir parçası olarak değerini değiştirmeniz gerekmez.

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 ek değişiklikler yapmak isteyebilirsiniz Program.cs . Dosya host.json 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 seri hale getirme

Varsayılan olarak, yalıtılmış çalışan modeli JSON serileştirme için kullanır System.Text.Json . Seri hale getirici seçeneklerini özelleştirmek veya JSON.NET ()Newtonsoft.Json seçeneğine geçmek için bu yönergelere bakın.

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üğü için kuralları yapılandırmanıza olanak tanır, ancak kodunuzdan gelen günlükleri denetlemek için filtreleme kurallarını öğesinin bir parçası olarak yapılandırmanız Program.csgerekir. 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 durumunda olur. Geçiş işlemi sırasında, uygulamayı ideal olarak yalnızca geçici olarak bu duruma getirebilirsiniz. Dağıtım yuvaları bunun etkisini azaltmaya yardımcı olur çünkü hata durumu, değişiklikler üretim ortamınıza tek güncelleştirme olarak uygulanmadan önce hazırlama (üretim dışı) ortamınızda çözülür. 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 hata 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 tetiklenmediğini ve uygulamanızın beklendiği gibi çalıştığını onaylamanı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:

  1. 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.

  2. Uygulama ayarını olarak ayarlayarak hazırlama (üretim dışı) yuvanın FUNCTIONS_WORKER_RUNTIME yapılandırmasını yalıtılmış çalışan modelini kullanacak şekilde dotnet-isolateddeğiştirin. 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 yalıtılmış çalışan modeli için yığın yapılandırmasını güncelleştirme yönergelerine bakın. Gelecekteki .NET sürüm güncelleştirmeleri için de aynı yönergeleri kullanacaksınız.

    CI/CD işlem hattı gibi herhangi bir otomatik altyapı sağlamanız varsa, otomasyonların da doğru .NET sürümüne dotnet-isolated ayarlı ve FUNCTIONS_WORKER_RUNTIME hedeflenecek şekilde güncelleştirildiğinden emin olun.

  3. 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 hatalar görmeye devam edebilirsiniz.

  4. Uygulamanızın hazırlama (üretim dışı) yuvasında beklendiği gibi çalıştığını onaylayın.

  5. Yuva değiştirme işlemi gerçekleştirin. Bu, hazırlama (üretim dışı) yuvanızda yaptığınız değişiklikleri üretim yuvasına uygular. 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.

  6. 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ş yapılması gereken diğer uygulamalar için bu kılavuzdaki adımları gerektiği gibi yineleyin.

Sonraki adımlar