Memigrasikan aplikasi .NET dari model dalam proses ke model pekerja yang terisolasi

Penting

Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi dengan mengikuti instruksi dalam artikel ini.

Artikel ini memandu Anda melalui proses migrasi aplikasi fungsi .NET Anda dengan aman dari model dalam proses ke model pekerja yang terisolasi. Untuk mempelajari tentang perbedaan tingkat tinggi antara model ini, lihat perbandingan mode eksekusi.

Panduan ini mengasumsikan bahwa aplikasi Anda berjalan pada versi 4.x dari runtime Functions. Jika tidak, Anda harus mengikuti panduan untuk meningkatkan versi host Anda:

Panduan migrasi versi host ini juga akan membantu Anda bermigrasi ke model pekerja yang terisolasi saat Anda bekerja melaluinya.

Mengidentifikasi aplikasi fungsi untuk dimigrasikan

Gunakan skrip Azure PowerShell berikut untuk menghasilkan daftar aplikasi fungsi dalam langganan Anda yang saat ini menggunakan model dalam proses.

Skrip menggunakan langganan yang saat ini dikonfigurasi oleh Azure PowerShell untuk digunakan. Anda dapat mengubah langganan dengan terlebih dahulu menjalankan Set-AzContext -Subscription '<YOUR SUBSCRIPTION ID>' dan mengganti <YOUR SUBSCRIPTION ID> dengan ID langganan yang ingin Anda evaluasi.

$FunctionApps = Get-AzFunctionApp

$AppInfo = @{}

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

$AppInfo

Pilih versi .NET target Anda

Pada versi 4.x dari runtime Functions, aplikasi fungsi .NET Anda menargetkan .NET 6 saat menggunakan model dalam proses.

Saat memigrasikan aplikasi fungsi, Anda memiliki kesempatan untuk memilih versi target .NET. Anda dapat memperbarui proyek C# Anda ke salah satu versi .NET berikut yang didukung oleh Functions versi 4.x:

Versi .NET Jenis rilis Kebijakan Dukungan Resmi .NET Modelproses fungsi 1,3
.NET 82 LTS Model pekerja terisolasi
.NET 7 STS (akhir dukungan 14 Mei 2024) Model pekerja terisolasi
.NET 6 LTS (akhir dukungan 12 November 2024) Model pekerja terisolasi,
Model dalam proses3
.NET Framework 4.8 Lihat kebijakan Model pekerja terisolasi

1 Model pekerja yang terisolasi mendukung versi Dukungan Jangka Panjang (LTS) dan Standard Term Support (STS) .NET, serta .NET Framework. Model dalam proses hanya mendukung rilis LTS .NET. Untuk perbandingan fitur dan fungsionalitas lengkap antara kedua model, lihat Perbedaan antara proses dalam proses dan mengisolasi proses pekerja .NET Azure Functions.

2 .NET 8 belum didukung pada model dalam proses, meskipun tersedia pada model pekerja yang terisolasi. Untuk informasi tentang paket .NET 8, termasuk opsi di masa mendatang untuk model dalam proses, lihat posting Pembaruan Peta Jalan Azure Functions.

3 Dukungan berakhir untuk model dalam proses pada 10 November 2026. Untuk informasi selengkapnya, lihat pengumuman dukungan ini. Untuk dukungan penuh berkelanjutan, Anda harus memigrasikan aplikasi Anda ke model pekerja yang terisolasi.

Tip

Sebaiknya tingkatkan ke .NET 8 pada model pekerja yang terisolasi. Ini menyediakan jalur migrasi cepat ke versi yang dirilis sepenuhnya dengan jendela dukungan terpanjang dari .NET.

Panduan ini tidak menyajikan contoh spesifik untuk .NET 7 atau .NET 6. Jika Anda perlu menargetkan versi ini, Anda dapat menyesuaikan contoh .NET 8.

Penyiapan untuk migrasi

Jika Anda belum melakukannya, identifikasi daftar aplikasi yang perlu dimigrasikan di Langganan Azure Anda saat ini dengan menggunakan Azure PowerShell.

Sebelum memigrasikan aplikasi ke model pekerja yang terisolasi, Anda harus meninjau konten panduan ini secara menyeluruh dan membiasakan diri dengan fitur model pekerja yang terisolasi dan perbedaan antara kedua model.

Untuk memigrasikan aplikasi, Anda akan:

  1. Selesaikan langkah-langkah dalam Memigrasikan proyek lokal Anda untuk memigrasikan proyek lokal Anda ke model pekerja yang terisolasi.
  2. Setelah memigrasikan proyek Anda, uji sepenuhnya aplikasi secara lokal menggunakan versi 4.x dari Azure Functions Core Tools.
  3. Perbarui aplikasi fungsi Anda di Azure ke model terisolasi.

Memigrasikan proyek lokal Anda

Bagian ini menguraikan berbagai perubahan yang perlu Anda lakukan pada proyek lokal Anda untuk memindahkannya ke model pekerja yang terisolasi. Beberapa langkah berubah berdasarkan versi target .NET Anda. Gunakan tab untuk memilih instruksi yang cocok dengan versi yang Anda inginkan. Langkah-langkah ini mengasumsikan proyek C# lokal, dan jika aplikasi Anda menggunakan skrip C# (.csx file), Anda harus mengonversi ke model proyek sebelum melanjutkan.

Tip

Jika Anda pindah ke versi LTS atau STS .NET, Asisten Peningkatan .NET dapat digunakan untuk secara otomatis membuat banyak perubahan yang disebutkan di bagian berikut.

Pertama, Anda akan mengonversi file proyek dan memperbarui dependensi Anda. Seperti yang Anda lakukan, Anda akan melihat kesalahan build untuk proyek. Dalam langkah-langkah berikutnya, Anda akan membuat perubahan yang sesuai untuk menghapus kesalahan ini.

File proyek

Contoh berikut adalah .csproj file proyek yang menggunakan .NET 6 pada versi 4.x:

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

Gunakan salah satu prosedur berikut untuk memperbarui file XML ini agar berjalan dalam model pekerja yang terisolasi:

Langkah-langkah ini mengasumsikan proyek C# lokal, dan jika aplikasi Anda menggunakan skrip C# (.csx file), Anda harus mengonversi ke model proyek sebelum melanjutkan.

Perubahan berikut diperlukan dalam .csproj file proyek XML:

  1. Atur nilai .PropertyGroupTargetFramework ke net8.0.

  2. Atur nilai .PropertyGroupAzureFunctionsVersion ke v4.

  3. Tambahkan elemen berikut OutputType ke PropertyGroup:

    <OutputType>Exe</OutputType>
    
  4. ItemGroupDalam .PackageReference daftar, ganti referensi paket ke Microsoft.NET.Sdk.Functions dengan referensi berikut:

      <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" />
    

    Catat referensi apa pun ke paket lain di Microsoft.Azure.WebJobs.* namespace layanan. Anda akan mengganti paket ini di langkah selanjutnya.

  5. Tambahkan baru ItemGroupberikut ini :

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

Setelah Anda membuat perubahan ini, proyek yang diperbarui akan terlihat seperti contoh berikut:

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

Referensi paket

Saat bermigrasi ke model pekerja yang terisolasi, Anda perlu mengubah paket referensi aplikasi Anda.

Jika Anda belum melakukannya, perbarui proyek Anda untuk mereferensikan versi stabil terbaru dari:

Bergantung pada pemicu dan pengikatan yang digunakan aplikasi Anda, aplikasi Anda mungkin perlu mereferensikan serangkaian paket yang berbeda. Tabel berikut ini memperlihatkan penggantian untuk beberapa ekstensi yang paling umum digunakan:

Skenario Perubahan pada referensi paket
Pemicu pengatur waktu Menambahkan
Microsoft.Azure.Functions.Worker.Extensions.Timer
Pengikatan penyimpanan Menggantikan
Microsoft.Azure.WebJobs.Extensions.Storage
dengan
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs,
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues, dan
Microsoft.Azure.Functions.Worker.Extensions.Tables
Pengikatan blob Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
Pengikatan antrean Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Storage.Queues
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
Pengikatan tabel Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Tables
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Tables
Pengikatan Cosmos DB Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.CosmosDB
dan/atau
Microsoft.Azure.WebJobs.Extensions.DocumentDB
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
pengikatan Bus Layanan Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.ServiceBus
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus
Pengikatan Azure Event Hubs Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.EventHubs
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.EventHubs
Pengikatan Event Grid Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.EventGrid
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.EventGrid
Pengikatan SignalR Service Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.SignalRService
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.SignalRService
Fungsi Tahan Lama Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.DurableTask
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Fungsi Tahan Lama
(Penyedia penyimpanan SQL)
Ganti referensi ke
Microsoft.DurableTask.SqlServer.AzureFunctions
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
Fungsi Tahan Lama
(Penyedia penyimpanan netherite)
Ganti referensi ke
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
Pengikatan SendGrid Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.SendGrid
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.SendGrid
Pengikatan Kafka Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.Kafka
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.Kafka
Pengikatan RabbitMQ Ganti referensi ke
Microsoft.Azure.WebJobs.Extensions.RabbitMQ
dengan versi terbaru
Microsoft.Azure.Functions.Worker.Extensions.RabbitMQ
Injeksi dependensi
dan konfigurasi startup
Hapus referensi ke
Microsoft.Azure.Functions.Extensions
(Model pekerja yang terisolasi menyediakan fungsionalitas ini secara default.)

Lihat Pengikatan yang didukung untuk daftar lengkap ekstensi yang perlu dipertimbangkan, dan lihat dokumentasi setiap ekstensi untuk instruksi penginstalan lengkap untuk model proses yang terisolasi. Pastikan untuk menginstal versi stabil terbaru dari paket apa pun yang Anda targetkan.

Tip

Setiap perubahan pada versi ekstensi selama proses ini mungkin mengharuskan Anda untuk memperbarui file Anda host.json juga. Pastikan untuk membaca dokumentasi setiap ekstensi yang Anda gunakan. Misalnya, ekstensi Bus Layanan memiliki perubahan yang merusak dalam struktur antara versi 4.x dan 5.x. Untuk informasi selengkapnya, lihat Pengikatan Azure Bus Layanan untuk Azure Functions.

Aplikasi model pekerja terisolasi Anda tidak boleh mereferensikan paket apa pun di Microsoft.Azure.WebJobs.* namespace layanan atau Microsoft.Azure.Functions.Extensions. Jika Anda memiliki referensi yang tersisa untuk ini, referensi tersebut harus dihapus.

Tip

Aplikasi Anda mungkin juga bergantung pada jenis Azure SDK, baik sebagai bagian dari pemicu dan pengikatan Anda atau sebagai dependensi mandiri. Anda harus mengambil kesempatan ini untuk memperbarui ini juga. Versi terbaru ekstensi Functions berfungsi dengan versi terbaru Azure SDK untuk .NET, hampir semua paket yang merupakan formulir Azure.*.

file Program.cs

Saat bermigrasi untuk berjalan dalam proses pekerja yang terisolasi, Anda harus menambahkan Program.cs file ke proyek Anda dengan konten berikut:

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();

Contoh ini mencakup integrasi ASP.NET Core untuk meningkatkan performa dan menyediakan model pemrograman yang familier saat aplikasi Anda menggunakan pemicu HTTP. Jika Anda tidak berniat menggunakan pemicu HTTP, Anda dapat mengganti panggilan ke ConfigureFunctionsWebApplication dengan panggilan ke ConfigureFunctionsWorkerDefaults. Jika Anda melakukannya, Anda dapat menghapus referensi ke Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore dari file proyek Anda. Namun, untuk performa terbaik, bahkan untuk fungsi dengan jenis pemicu lainnya, Anda harus menyimpan FrameworkReference ke ASP.NET Core.

File Program.cs akan menggantikan file apa pun yang memiliki FunctionsStartup atribut , yang biasanya merupakan Startup.cs file. Di tempat-tempat di mana kode Anda FunctionsStartup akan mereferensikan IFunctionsHostBuilder.Services, Anda dapat menambahkan pernyataan dalam .ConfigureServices() metode HostBuilder di .Program.cs Untuk mempelajari selengkapnya tentang bekerja dengan Program.cs, lihat Start-up dan konfigurasi dalam panduan model pekerja yang terisolasi.

Contoh default Program.cs di atas mencakup penyiapan integrasi Application Insights untuk model pekerja yang terisolasi. Program.csDi , Anda juga harus mengonfigurasi pemfilteran log apa pun yang harus berlaku untuk log yang berasal dari kode dalam proyek Anda. Dalam model pekerja yang terisolasi, host.json file hanya mengontrol peristiwa yang dipancarkan oleh runtime host Functions. Jika Anda tidak mengonfigurasi aturan pemfilteran di Program.cs, Anda mungkin melihat perbedaan tingkat log yang ada untuk berbagai kategori dalam telemetri Anda.

Meskipun Anda dapat mendaftarkan sumber konfigurasi kustom sebagai bagian HostBuilderdari , perhatikan bahwa ini juga hanya berlaku untuk kode dalam proyek Anda. Konfigurasi pemicu dan pengikatan juga diperlukan oleh platform, dan ini harus disediakan melalui pengaturan aplikasi, referensi Key Vault, atau fitur referensi App Configuration.

Setelah memindahkan semuanya dari yang ada FunctionsStartup ke Program.cs file, Anda dapat menghapus FunctionsStartup atribut dan kelas tempat atribut tersebut diterapkan.

Perubahan tanda tangan fungsi

Beberapa jenis kunci berubah antara model dalam proses dan model pekerja yang terisolasi. Banyak dari ini berkaitan dengan atribut, parameter, dan jenis pengembalian yang membentuk tanda tangan fungsi. Untuk setiap fungsi, Anda harus membuat perubahan pada:

  • Atribut fungsi (yang juga mengatur nama fungsi)
  • Bagaimana fungsi memperoleh ILogger/ILogger<T>
  • Atribut dan parameter pemicu dan pengikatan

Bagian lainnya akan memanah Anda melalui masing-masing langkah ini.

Atribut fungsi

Atribut FunctionName digantikan oleh Function atribut dalam model pekerja yang terisolasi. Atribut baru memiliki tanda tangan yang sama, dan satu-satunya perbedaan adalah dalam nama. Oleh karena itu, Anda hanya dapat melakukan penggantian string di seluruh proyek Anda.

Pencatatan

Dalam model dalam proses, Anda dapat menyertakan parameter tambahan ILogger ke fungsi Anda, atau Anda dapat menggunakan injeksi dependensi untuk mendapatkan ILogger<T>. Jika Anda sudah menggunakan injeksi dependensi, mekanisme yang sama berfungsi dalam model pekerja yang terisolasi.

Namun, untuk Fungsi apa pun yang bergantung pada ILogger parameter metode, Anda harus membuat perubahan. Disarankan agar Anda menggunakan injeksi dependensi untuk mendapatkan ILogger<T>. Gunakan langkah-langkah berikut untuk memigrasikan mekanisme pengelogan fungsi:

  1. Di kelas fungsi Anda, tambahkan private readonly ILogger<MyFunction> _logger; properti, ganti MyFunction dengan nama kelas fungsi Anda.

  2. Buat konstruktor untuk kelas fungsi Anda yang mengambil ILogger<T> sebagai parameter:

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

    Ganti kedua instans MyFunction dalam cuplikan kode di atas dengan nama kelas fungsi Anda.

  3. Untuk operasi pengelogan dalam kode fungsi Anda, ganti referensi ke ILogger parameter dengan _logger.

  4. ILogger Hapus parameter dari tanda tangan fungsi Anda.

Untuk mempelajari selengkapnya, lihat Pengelogan dalam model pekerja yang terisolasi.

Memicu dan mengikat perubahan

Saat Anda mengubah referensi paket di langkah sebelumnya, Anda memperkenalkan kesalahan untuk pemicu dan pengikatan yang sekarang akan Anda perbaiki:

  1. Hapus pernyataan apa pun using Microsoft.Azure.WebJobs; .

  2. using Microsoft.Azure.Functions.Worker; Tambahkan pernyataan.

  3. Untuk setiap atribut pengikatan, ubah nama atribut seperti yang ditentukan dalam dokumentasi referensinya, yang dapat Anda temukan di indeks Pengikatan yang didukung. Secara umum, nama atribut berubah sebagai berikut:

    • Pemicu biasanya tetap diberi nama dengan cara yang sama. Misalnya, QueueTrigger adalah nama atribut untuk kedua model.
    • Pengikatan input biasanya memerlukan "Input" yang ditambahkan ke namanya. Misalnya, jika Anda menggunakan CosmosDB atribut pengikatan input dalam model dalam proses, ini sekarang akan menjadi CosmosDBInput.
    • Pengikatan output biasanya memerlukan "Output" yang ditambahkan ke namanya. Misalnya, jika Anda menggunakan Queue atribut pengikatan output dalam model dalam proses, ini sekarang akan menjadi QueueOutput.
  4. Perbarui parameter atribut untuk mencerminkan versi model pekerja yang terisolasi, seperti yang ditentukan dalam dokumentasi referensi pengikatan.

    Misalnya, dalam model dalam proses, pengikatan output blob diwakili oleh [Blob(...)] atribut yang menyertakan Access properti. Dalam model pekerja yang terisolasi, atribut output blob adalah [BlobOutput(...)]. Pengikatan tidak lagi memerlukan Access properti , sehingga parameter dapat dihapus. Jadi [Blob("sample-images-sm/{fileName}", FileAccess.Write, Connection = "MyStorageConnection")] akan menjadi [BlobOutput("sample-images-sm/{fileName}", Connection = "MyStorageConnection")].

  5. Pindahkan pengikatan output dari daftar parameter fungsi. Jika Anda hanya memiliki satu pengikatan output, Anda dapat menerapkan ini ke jenis pengembalian fungsi. Jika Anda memiliki beberapa output, buat kelas baru dengan properti untuk setiap output, dan terapkan atribut ke properti tersebut. Untuk mempelajari selengkapnya, lihat Beberapa pengikatan output.

  6. Lihat dokumentasi referensi setiap pengikatan untuk jenis yang memungkinkan Anda untuk mengikat. Dalam beberapa kasus, Anda mungkin perlu mengubah jenisnya. Untuk pengikatan output, jika versi model dalam proses menggunakan IAsyncCollector<T>, Anda dapat mengganti ini dengan pengikatan ke array jenis target: T[]. Anda juga dapat mempertimbangkan untuk mengganti pengikatan output dengan objek klien untuk layanan yang diwakilinya, baik sebagai jenis pengikatan untuk pengikatan input jika tersedia, atau dengan menyuntikkan klien sendiri.

  7. Jika fungsi Anda menyertakan IBinder parameter, hapus. Ganti fungsionalitas dengan objek klien untuk layanan yang diwakilinya, baik sebagai jenis pengikatan untuk pengikatan input jika tersedia, atau dengan menyuntikkan klien sendiri.

  8. Perbarui kode fungsi untuk bekerja dengan jenis baru apa pun.

file local.settings.json

File local.settings.json hanya digunakan saat berjalan secara lokal. Untuk informasi, lihat File pengaturan lokal.

Saat bermigrasi dari menjalankan dalam proses ke berjalan dalam proses pekerja yang terisolasi, Anda perlu mengubah nilai menjadi FUNCTIONS_WORKER_RUNTIME "dotnet-isolated". Pastikan file local.settings.json Anda memiliki setidaknya elemen berikut:

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

Nilai yang telah Anda konfigurasi untuk 'AzureWebJobsStorage'' mungkin berbeda. Anda tidak perlu mengubah nilainya sebagai bagian dari migrasi.

file host.json

Tidak ada perubahan yang diperlukan pada file Anda host.json . Namun, jika konfigurasi Application Insights Anda dalam file ini dari proyek model dalam proses, Anda mungkin ingin membuat perubahan tambahan dalam file Anda Program.cs . File host.json hanya mengontrol pengelogan dari runtime host Functions, dan dalam model pekerja yang terisolasi, beberapa log ini berasal dari aplikasi Anda secara langsung, memberi Anda lebih banyak kontrol. Lihat Mengelola tingkat log dalam model pekerja yang terisolasi untuk detail tentang cara memfilter log ini.

Perubahan kode lainnya

Bagian ini menyoroti perubahan kode lain untuk dipertimbangkan saat Anda bekerja melalui migrasi. Perubahan ini tidak diperlukan oleh semua aplikasi, tetapi Anda harus mengevaluasi apakah ada yang relevan dengan skenario Anda.

Serialisasi JSON

Secara default, model pekerja terisolasi menggunakan System.Text.Json untuk serialisasi JSON. Untuk menyesuaikan opsi serializer atau beralih ke JSON.NET (Newtonsoft.Json), lihat instruksi ini.

Tingkat log dan pemfilteran Application Insights

Log dapat dikirim ke Application Insights dari runtime host Functions dan kode dalam proyek Anda. memungkinkan host.json Anda mengonfigurasi aturan untuk pengelogan host, tetapi untuk mengontrol log yang berasal dari kode Anda, Anda harus mengonfigurasi aturan pemfilteran sebagai bagian dari .Program.cs Lihat Mengelola tingkat log dalam model pekerja yang terisolasi untuk detail tentang cara memfilter log ini.

Contoh migrasi fungsi

Contoh pemicu HTTP

Pemicu HTTP untuk model dalam proses mungkin terlihat seperti contoh berikut:

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"]}!");
        }
    }
}

Pemicu HTTP untuk versi yang dimigrasikan mungkin seperti contoh berikut:

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"]}!");
        }
    }
}

Memperbarui aplikasi fungsi Anda di Azure

Meningkatkan aplikasi fungsi Anda ke model terisolasi terdiri dari dua langkah:

  1. Ubah konfigurasi aplikasi fungsi untuk menggunakan model terisolasi dengan mengatur FUNCTIONS_WORKER_RUNTIME pengaturan aplikasi ke dotnet-isolated. Pastikan bahwa otomatisasi penyebaran apa pun juga diperbarui.
  2. Terbitkan proyek yang dimigrasikan ke aplikasi fungsi yang diperbarui.

Saat Anda menggunakan Visual Studio untuk menerbitkan proyek model pekerja terisolasi ke aplikasi fungsi yang sudah ada yang menggunakan model dalam proses, Anda diminta untuk mengizinkan Visual Studio memperbarui aplikasi fungsi selama penyebaran. Ini mencapai kedua langkah sekaligus.

Jika Anda perlu meminimalkan waktu henti, pertimbangkan untuk menggunakan slot penahapan untuk menguji dan memverifikasi kode yang dimigrasikan dengan konfigurasi yang diperbarui di Azure. Anda kemudian dapat menyebarkan aplikasi yang sepenuhnya dimigrasikan ke slot produksi melalui operasi pertukaran.

Setelah menyelesaikan langkah-langkah ini, aplikasi Anda telah sepenuhnya dimigrasikan ke model yang terisolasi. Selamat! Ulangi langkah-langkah dari panduan ini seperlunya untuk aplikasi lain yang memerlukan migrasi.

Langkah berikutnya