Mengembangkan Fungsi Azure menggunakan Visual Studio

Visual Studio memungkinkan Anda mengembangkan, menguji, dan menyebarkan fungsi pustaka kelas C# ke Azure. Jika ini adalah pengalaman pertama Anda dengan Azure Functions, lihat Pengantar Azure Functions.

Untuk segera memulai, pertimbangkan untuk menyelesaikan mulai cepat Functions untuk Visual Studio.

Artikel ini menyediakan detail tentang cara menggunakan Visual Studio untuk mengembangkan fungsi pustaka kelas C# dan menerbitkannya ke Azure. Ada dua model untuk mengembangkan fungsi pustaka kelas C#: model pekerja terisolasi dan model Dalam proses.

Anda membaca versi model pekerja yang terisolasi di artikel ini. Anda dapat memilih model pilihan Anda di bagian atas artikel.

Anda membaca versi model dalam proses artikel ini. Anda dapat memilih model pilihan Anda di bagian atas artikel.

Kecuali dinyatakan lain, prosedur dan contoh yang ditampilkan adalah untuk Visual Studio 2022. Untuk informasi selengkapnya tentang rilis Visual Studio 2022, lihat catatan rilis atau catatan rilis pratinjau.

Prasyarat

  • Visual Studio 2022, termasuk beban kerja pengembangan Azure.

  • Sumber daya lain yang Anda butuhkan, seperti akun Azure Storage, dibuat di langganan Anda selama proses penerbitan.

  • Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Membuat proyek Azure Functions

Templat proyek Azure Functions di Visual Studio membuat proyek pustaka kelas C# yang bisa Anda terbitkan ke aplikasi fungsi di Azure. Aplikasi fungsi memungkinkan Anda mengelompokkan fungsi sebagai unit logis untuk pengelolaan, penyebaran, penskalaan, dan berbagi sumber daya dengan lebih mudah.

  1. Dari menu Visual Studio, pilih File>Proyek>Baru.

  2. Di Buat proyek baru, masukkan fungsi di kotak pencarian, pilih templat Azure Functions, lalu pilih Berikutnya.

  3. Di Konfigurasikan proyek baru, masukkan Nama proyek untuk proyek Anda, lalu pilih Buat. Nama aplikasi fungsi harus valid sebagai namespace layanan C#, jadi jangan gunakan garis bawah, tanda hubung, atau karakter non-alfanumerik lainnya.

  4. Untuk pengaturan Buat aplikasi Azure Functions baru, gunakan nilai dalam tabel berikut:

    Pengaturan Nilai Deskripsi
    Versi .NET .NET 6 Terisolasi Nilai ini membuat proyek fungsi yang berjalan dalam proses pekerja yang terisolasi. Proses pekerja terisolasi mendukung versi .NET non-LTS lainnya dan juga .NET Framework. Untuk informasi selengkapnya, lihat Ringkasan versi runtime Azure Functions.
    Templat fungsi Pemicu HTTP Nilai ini membuat fungsi yang dipicu oleh permintaan HTTP.
    Akun penyimpanan (AzureWebJobsStorage) Emulator Storage Karena aplikasi fungsi di Azure memerlukan akun penyimpanan, aplikasi ditetapkan atau dibuat saat Anda memublikasikan proyek Anda ke Azure. Pemicu HTTP tidak menggunakan string koneksi akun Azure Storage; semua jenis pemicu lainnya memerlukan string koneksi akun Azure Storage yang valid.
    Tingkat otorisasi Anonim Fungsi yang dibuat dapat dipicu oleh klien mana pun tanpa menyediakan kunci. Pengaturan otorisasi ini memudahkan Anda menguji fungsi baru Anda. Untuk informasi selengkapnya tentang kunci dan otorisasi, lihat Kunci otorisasi dan pengikatan HTTP dan webhook.

    Screenshot of Azure Functions project settings

    Pengaturan Nilai Deskripsi
    Versi .NET .NET 6 Nilai ini membuat proyek fungsi yang berjalan dalam proses dengan versi 4.x runtime Azure Functions. Untuk informasi selengkapnya, lihat Ringkasan versi runtime Azure Functions.
    Templat fungsi Pemicu HTTP Nilai ini membuat fungsi yang dipicu oleh permintaan HTTP.
    Akun penyimpanan (AzureWebJobsStorage) Emulator Storage Karena aplikasi fungsi di Azure memerlukan akun penyimpanan, aplikasi ditetapkan atau dibuat saat Anda memublikasikan proyek Anda ke Azure. Pemicu HTTP tidak menggunakan string koneksi akun Azure Storage; semua jenis pemicu lainnya memerlukan string koneksi akun Azure Storage yang valid.
    Tingkat otorisasi Anonim Fungsi yang dibuat dapat dipicu oleh klien mana pun tanpa menyediakan kunci. Pengaturan otorisasi ini memudahkan Anda menguji fungsi baru Anda. Untuk informasi selengkapnya tentang kunci dan otorisasi, lihat Kunci otorisasi dan pengikatan HTTP dan webhook.

    Screenshot of Azure Functions project settings

    Pastikan Anda mengatur Tingkat otorisasi ke Anonim. Ketika Anda memilih tingkat default Fungsi, Anda diharuskan untuk memberikan kunci fungsi dalam permintaan untuk mengakses titik akhir fungsi Anda.

  5. Pilih Buat untuk membuat proyek fungsi dan fungsi pemicu HTTP.

Setelah Anda membuat proyek Azure Functions, templat proyek membuat proyek C#, menginstal Microsoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.Sdk dan paket NuGet, dan mengatur kerangka kerja target.

Setelah Anda membuat proyek Azure Functions, templat proyek akan membuat proyek C#, menginstal paket Microsoft.NET.Sdk.Functions NuGet, dan menetapkan kerangka kerja target.

Proyek baru ini memiliki beberapa file berikut:

  • host.json: Memungkinkan Anda mengonfigurasi host Functions. Pengaturan ini berlaku saat dijalankan secara lokal maupun di Azure. Untuk informasi selengkapnya, lihat referensi host.json.

  • local.settings.json: Mempertahankan pengaturan yang digunakan saat menjalankan fungsi secara lokal. Pengaturan ini tidak digunakan saat dijalankan di Azure. Untuk informasi selengkapnya, lihat File pengaturan lokal.

    Penting

    Karena file local.settings.json dapat memuat informasi rahasia, Anda harus mengecualikannya melalui kontrol kode sumber proyek. Pastikan pengaturan Salin ke Direktori Output untuk file ini diatur ke Salin jika lebih baru.

Untuk informasi selengkapnya, lihat Struktur proyek di panduan Pekerja terisolasi.

Untuk informasi selengkapnya, lihat Proyek pustaka kelas Functions

Bekerja dengan pengaturan aplikasi secara lokal

Saat menjalankan aplikasi fungsi di Azure, pengaturan yang diperlukan oleh fungsi Anda disimpan dengan aman di pengaturan aplikasi. Selama pengembangan lokal, pengaturan ini ditambahkan ke Values koleksi dalam file local.settings.json. File local.settings.json juga menyimpan pengaturan yang digunakan oleh alat pengembangan lokal.

Item dalam Values koleksi dalam file local.settings.json proyek Anda dimaksudkan untuk mencerminkan item di pengaturan aplikasi aplikasi fungsi Anda di Azure.

Visual Studio tidak secara otomatis mengunggah pengaturan pada local.settings.json ketika Anda menerbitkan proyek. Untuk memastikan bahwa pengaturan ini juga ada pada aplikasi fungsi Anda di Azure, unggah setelah Anda menerbitkan proyek Anda. Untuk informasi selengkapnya, lihat Pengaturan aplikasi Functions. Nilai dalam kumpulan ConnectionStrings tidak pernah diterbitkan.

Kode Anda juga dapat membaca nilai pengaturan aplikasi fungsi sebagai variabel lingkungan. Untuk informasi selengkapnya, lihat Variabel lingkungan.

Mengonfigurasikan proyek untuk pengembangan lokal

Runtime Fungsi menggunakan akun Azure Storage secara internal. Untuk semua jenis pemicu selain HTTP dan webhook, tetapkan kunci Values.AzureWebJobsStorage ke string koneksi akun Azure Storage yang valid. Aplikasi fungsi Anda juga dapat menggunakan emulator Azurite untuk pengaturan koneksi yang AzureWebJobsStorage diperlukan oleh proyek. Untuk menggunakan emulator, atur nilai AzureWebJobsStorage ke UseDevelopmentStorage=true. Ubah pengaturan ini menjadi string koneksi akun penyimpanan aktual sebelum penyebaran. Untuk informasi selengkapnya, lihat Emulator penyimpanan lokal.

Untuk mengatur string koneksi akun penyimpanan:

  1. Di portal Microsoft Azure, navigasikan ke akun penyimpanan Anda.

  2. Di tab Kunci akses, di bawah Keamanan + jaringan, salin string Koneksi dari key1.

  3. Dalam proyek Anda, buka file local.settings.json dan atur nilai kunci AzureWebJobsStorage ke string koneksi yang Anda salin.

  4. Ulangi langkah sebelumnya untuk menambahkan kunci unik ke array Values bagi koneksi lain yang diperlukan oleh fungsi Anda.

Menambahkan fungsi ke proyek Anda

Dalam fungsi pustaka kelas C#, pengikatan yang digunakan oleh fungsi didefinisikan dengan menerapkan atribut dalam kode. Saat membuat pemicu fungsi dari templat yang disediakan, atribut pemicu akan diterapkan untuk Anda.

  1. Di Penjelajah Solusi, klik kanan simpul proyek Anda dan pilih Tambahkan>Fungsi Azure Baru.

  2. Masukkan Nama untuk kelas, lalu pilih Tambahkan.

  3. Pilih pemicu Anda, atur properti pengikatan yang diperlukan, lalu pilih Tambahkan. Contoh berikut menunjukkan pengaturan untuk membuat fungsi pemicu penyimpanan Antrean.

    Create a Queue storage trigger function

    Untuk pemicu layanan Azure Storage, centang kotak Konfigurasi koneksi dan Anda diminta untuk memilih antara menggunakan emulator penyimpanan Azurite atau mereferensikan akun penyimpanan Azure yang disediakan. Pilih Berikutnya dan jika Anda memilih akun penyimpanan, Visual Studio mencoba menyambungkan ke akun Azure Anda dan mendapatkan string koneksi. Pilih Simpan nilai string koneksi dalam File rahasia pengguna lokal lalu Selesai untuk membuat kelas pemicu.

    Contoh pemicu ini menggunakan pengaturan aplikasi untuk koneksi penyimpanan dengan kunci bernama QueueStorage. Kunci ini, disimpan dalam file local.settings.json, baik mereferensikan emulator Azurite atau akun penyimpanan Azure.

  4. Periksa kelas yang baru ditambahkan. Misalnya, kelas C# berikut mewakili fungsi pemicu penyimpanan Antrean dasar:

    Anda melihat metode statis Run() yang diatribusikan dengan Function. Atribut ini menunjukkan bahwa metode tersebut adalah titik masuk untuk fungsi.

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            private readonly ILogger<QueueTriggerCSharp> _logger;
    
            public QueueTriggerCSharp(ILogger<QueueTriggerCSharp> logger)
            {
                _logger = logger;
            }
    
            [Function(nameof(QueueTriggerCSharp))]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")] QueueMessage message)
            {
                _logger.LogInformation($"C# Queue trigger function processed: {message.MessageText}");
            }
        }
    }
    

    Anda melihat metode statis Run() yang diatribusikan dengan FunctionName. Atribut ini menunjukkan bahwa metode tersebut adalah titik masuk untuk fungsi.

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            [FunctionName("QueueTriggerCSharp")]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

Atribut khusus pengikatan diterapkan pada setiap parameter pengikatan yang diberikan ke metode titik masuk. Atribut mengambil informasi pengikatan sebagai parameter. Dalam contoh sebelumnya, parameter pertama memiliki atribut QueueTrigger yang diterapkan, menunjukkan fungsi pemicu penyimpanan Antrean. Nama antrean dan nama pengaturan string koneksi diteruskan sebagai parameter ke atribut QueueTrigger. Untuk informasi selengkapnya, lihat Pengikatan penyimpanan Antrean Azure untuk Azure Functions.

Gunakan prosedur di atas untuk menambahkan lebih banyak fungsi ke proyek aplikasi fungsi Anda. Setiap fungsi dalam proyek dapat memiliki pemicu yang berbeda, tetapi fungsi harus memiliki satu pemicu yang tepat. Untuk mempelajari selengkapnya, lihat Konsep pengikatan dan pemicu Azure Functions.

Menambahkan pengikatan

Seperti halnya pemicu, pengikatan input dan output ditambahkan ke fungsi Anda sebagai atribut pengikatan. Tambahkan pengikatan ke fungsi sebagai berikut:

  1. Pastikan Anda mengonfigurasi proyek untuk pengembangan lokal.

  2. Tambahkan paket ekstensi NuGet yang sesuai untuk pengikatan tertentu dengan menemukan persyaratan paket NuGet khusus pengikatan di artikel referensi untuk pengikatan. Misalnya, temukan persyaratan paket untuk pemicu Azure Event Hubs pada artikel referensi Pengikatan Hub Aktivitas.

  3. Gunakan perintah berikut di Package Manager Console untuk menginstal paket tertentu:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    
    Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    Dalam contoh ini, ganti <BINDING_TYPE> dengan nama khusus untuk ekstensi pengikatan dan <TARGET_VERSION> dengan versi paket tertentu, seperti 4.0.0. Versi yang valid tercantum di halaman paket individual di NuGet.org.

  4. Jika ada pengaturan aplikasi yang dibutuhkan pengikatan, tambahkan ke kumpulan Values pada file pengaturan lokal.

    Fungsi tersebut menggunakan nilai-nilai ini ketika dijalankan secara lokal. Saat fungsi berjalan di aplikasi fungsi di Azure, fungsi ini menggunakan pengaturan aplikasi fungsi. Visual Studio memudahkan penerbitan pengaturan lokal ke Azure.

  5. Tambahkan atribut pengikatan yang sesuai ke metode tanda tangan. Dalam contoh berikut, pesan antrean memicu fungsi, dan pengikatan output membuat pesan antrean baru dengan teks yang sama dalam antrean yang berbeda.

     public class QueueTrigger
    {
        private readonly ILogger _logger;
    
        public QueueTrigger(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<QueueTrigger>();
        }
    
        [Function("CopyQueueMessage")]
        [QueueOutput("myqueue-items-destination", Connection = "QueueStorage")]
        public string Run([QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem)
        {
            _logger.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            return myQueueItem;
        }
    }
    

    Atribut QueueOutput mendefinisikan pengikatan pada metode . Untuk beberapa pengikatan output, Anda akan menempatkan atribut ini pada properti string dari objek yang dikembalikan. Untuk informasi selengkapnya, lihat Beberapa pengikatan output.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "QueueStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    Atribut Queue pada out parameter menentukan pengikatan output.

    Koneksi ke penyimpanan Antrean diperoleh dari pengaturan QueueStorage. Untuk informasi selengkapnya, lihat artikel referensi untuk pengikatan khusus.

Untuk daftar lengkap pengikatan data yang didukung oleh Azure Functions, lihat Pengikatan data yang didukung.

Jalankan fungsi secara lokal

Azure Functions Core Tools memungkinkan Anda menjalankan proyek Azure Functions di komputer pengembangan lokal Anda. Saat Anda menekan F5 untuk men-debug proyek Functions, host Functions lokal (func.exe) akan mulai mendengarkan port lokal (biasanya 7071). Setiap titik akhir fungsi yang dapat dipanggil ditulis pada output, dan Anda dapat menggunakannya untuk menguji fungsi Anda. Untuk informasi selengkapnya, lihat Bekerja dengan Azure Functions Core Tools. Anda diminta untuk menginstal alat ini saat pertama kali memulai fungsi dari Visual Studio Code.

Untuk menjalankan fungsi Anda di Visual Studio dalam mode debug:

  1. Tekan F5. Jika diminta, terima permintaan dari Visual Studio untuk mengunduh dan memasang alat Utama Azure Functions (CLI). Anda mungkin perlu mengaktifkan pengecualian firewall agar alat dapat menangani permintaan HTTP.

  2. Saat proyek berjalan, uji kode Anda seperti ketika Anda akan menguji fungsi yang disebarkan.

    Saat Anda menjalankan Visual Studio di dalam mode debug, titik henti akan tercapai seperti yang diharapkan.

Untuk skenario pengujian yang lebih rinci menggunakan Visual Studio, lihat Pengujian fungsi.

Menerbitkan ke Azure

Saat Anda menerbitkan proyek fungsi Anda ke Azure, Visual Studio menggunakan penyebaran zip untuk menyebarkan file proyek. Jika memungkinkan, Anda juga harus memilih Run-From-Package sehingga proyek berjalan dalam paket penyebaran (.zip). Untuk informasi selengkapnya, lihat Menjalankan fungsi Anda dari file paket di Azure.

Jangan sebarkan ke Azure Functions menggunakan Web Deploy (msdeploy).

Gunakan langkah-langkah berikut untuk menerbitkan proyek Anda ke aplikasi fungsi di Azure.

  1. Di Penjelajah Solusi, klik kanan proyek dan pilih Terbitkan. Di Target, pilih Azure lalu Berikutnya.

    Screenshot of publish window.

  2. Pilih Aplikasi Azure Function (Windows) untuk Target tertentu, untuk membuat aplikasi fungsi yang berjalan pada Windows, lalu pilih Berikutnya.

    Screenshot of publish window with specific target.

  3. Pada Instans Fungsi, pilih Buat Fungsi Azure baru...

    Screenshot of create a new function app instance.

  4. Buat instans baru menggunakan nilai yang ditentukan dalam tabel berikut:

    Pengaturan Nilai Deskripsi
    Nama Nama unik secara global Nama yang secara unik mengidentifikasi aplikasi fungsi baru Anda. Terima nama ini atau masukkan nama baru. Karakter yang valid adalah: a-z, 0-9, dan -.
    Langganan Langganan Anda Langganan Azure untuk digunakan. Terima langganan ini atau pilih yang baru dari daftar menurun.
    Grup sumber daya Nama grup sumber daya Anda Grup sumber daya untuk membuat aplikasi fungsi Anda. Pilih Baru untuk membuat grup sumber daya baru. Anda juga dapat memilih grup sumber daya yang ada dari daftar drop-down.
    Jenis Paket Consumption Saat Anda menerbitkan proyek Anda ke aplikasi fungsi yang berjalan dalam Paket konsumsi, Anda hanya membayar untuk menjalankan aplikasi fungsi Anda. Paket hosting lain dikenakan biaya yang lebih tinggi.
    Location Lokasi app service Pilih Lokasi di wilayah dekat Anda atau dekat layanan lain yang diakses fungsi Anda.
    Azure Storage Akun penyimpanan serba guna Akun Azure Storage diperlukan oleh runtime Fungsi. Pilih Baru untuk mengonfigurasi akun penyimpanan serba guna. Anda juga dapat memilih akun yang sudah ada yang memenuhi persyaratan akun penyimpanan.
    Application Insights Instans Application Insights Anda harus mengaktifkan integrasi Application Insights untuk aplikasi fungsi Anda. Pilih Baru untuk membuat instans baru, baik di ruang kerja Analitik Log baru atau yang sudah ada. Anda juga dapat memilih instans yang ada.

    Screenshot of Create App Service dialog.

  5. Pilih Buat untuk membuat aplikasi fungsi dan sumber daya terkait di Azure. Status pembuatan sumber daya ditampilkan di kiri bawah jendela.

  6. Dalam Instans Functions, pastikan bahwa Menjalankan dari file paket telah dicentang. Aplikasi fungsi diterapkan menggunakan Zip Deploy dengan mode Run-From-Package diaktifkan. Penyebaran Zip adalah metode penyebaran yang direkomendasikan untuk proyek fungsi Anda karena menghasilkan performa yang lebih baik.

    Screenshot of Finish profile creation.

  7. Pilih Selesai, dan pada halaman Terbitan, pilih Terbitkan untuk menyebarkan paket yang berisi file proyek Anda ke aplikasi fungsi baru di Azure.

    Setelah penyebaran selesai, URL akar aplikasi fungsi di Azure diperlihatkan di tab Terbitkan.

  8. Di tab Terbitkan, di bagian Hosting, pilih Buka di portal Azure. Ini membuka sumber daya aplikasi fungsi baru Azure di portal Azure.

    Screenshot of Publish success message.

Pengaturan aplikasi fungsi

Visual Studio tidak diunggah secara otomatis saat Anda menerbitkan proyek. Pengaturan apa pun yang Anda tambahkan ke local.settings.json juga harus Anda tambahkan ke aplikasi fungsi di Azure.

Cara termudah untuk mengunggah pengaturan yang diperlukan ke aplikasi fungsi Anda di Azure adalah memperluas tiga titik di sebelah bagian Hosting dan pilih tautan Kelola pengaturan Azure App Service yang muncul setelah proyek Anda berhasil diterbitkan.

Settings in Publish window

Memilih tautan ini, menampilkan dialog Pengaturan aplikasi untuk aplikasi fungsi, di mana Anda dapat menambahkan pengaturan aplikasi baru atau memodifikasi yang sudah ada.

Application settings

Lokal menampilkan nilai pengaturan pada file local.settings.json, dan Jarak Jauh menampilkan nilai pengaturan terkini pada aplikasi fungsi di Azure. Pilih Tambah pengaturan untuk membuat pengaturan aplikasi baru. Gunakan tautan Sisipkan nilai dari Lokal untuk menyalin nilai pengaturan ke bidang Jarak Jauh. Perubahan yang tertunda ditulis ke file pengaturan lokal dan aplikasi fungsi saat Anda memilih OK.

Catatan

Secara default, file local.settings.json tidak dicentang di dalam kontrol kode sumber. Ini berarti bahwa jika Anda membuat kloning proyek Fungsi lokal dari kontrol kode sumber, proyek tidak memiliki file local.settings.json. Dalam hal ini, Anda perlu membuat file local.settings.json secara manual pada akar proyek sehingga dialog Pengaturan aplikasi berfungsi seperti yang diharapkan.

Anda juga dapat mengelola pengaturan aplikasi dengan salah satu cara berikut:

Penelusuran Kesalahan Jarak Jauh

Untuk men-debug aplikasi fungsi dari jarak jauh, Anda harus menerbitkan konfigurasi debug proyek Anda. Anda juga perlu mengaktifkan penelusuran kesalahan jarak jauh di aplikasi fungsi Anda di Azure.

Bagian ini mengasumsikan Anda telah menerbitkan ke aplikasi fungsi menggunakan konfigurasi rilis.

Pertimbangan penelusuran kesalahan jarak jauh

  • Penelusuran kesalahan jarak jauh tidak disarankan pada layanan produksi.
  • Jika Anda mengaktifkan penelusuran kesalahan Just My Code, nonaktifkan.
  • Hindari perhentian panjang di titik henti saat penelusuran kesalahan jarak jauh. Azure memperlakukan proses yang dihentikan lebih dari beberapa menit sebagai proses yang tidak responsif, dan mematikannya.
  • Saat Anda melakukan penelusuran kesalahan, server akan mengirim data ke Visual Studio, yang dapat memengaruhi biaya bandwidth. Untuk informasi tentang tarif bandwidth, lihat Harga Azure.
  • Penelusuran kesalahan jarak jauh secara otomatis dinonaktifkan di aplikasi fungsi Anda setelah 48 jam. Setelah 48 jam, Anda harus mengaktifkan kembali penelusuran kesalahan jarak jauh.

Melampirkan debugger

Cara Anda melampirkan debugger bergantung pada mode eksekusi Anda. Saat men-debug aplikasi proses pekerja yang terisolasi, saat ini Anda perlu melampirkan debugger jarak jauh ke proses .NET terpisah, dan beberapa langkah konfigurasi lainnya diperlukan.

Setelah selesai, Anda harus menonaktifkan penelusuran kesalahan jarak jauh.

Untuk melampirkan debugger jarak jauh ke aplikasi fungsi yang berjalan dalam proses yang terpisah dari host Functions:

  1. Dari tab Terbitkan, pilih elipsis (...) di bagian Hosting, lalu pilih Unduh profil penerbitan. Tindakan ini mengunduh salinan profil penerbitan dan membuka lokasi unduhan. Anda memerlukan file ini, yang berisi kredensial yang digunakan untuk melampirkan ke proses pekerja terisolasi yang berjalan di Azure.

    Perhatian

    File .publishsettings berisi kredensial Anda (tidak dienkodekan) yang digunakan untuk mengelola aplikasi fungsi Anda. Praktik terbaik keamanan untuk file ini adalah menyimpannya sementara di luar direktori sumber Anda (misalnya di folder Pustaka\Dokumen), lalu menghapusnya setelah tidak lagi diperlukan. Pengguna jahat yang mendapatkan akses ke file .publishsettings dapat mengedit, membuat, dan menghapus aplikasi fungsi Anda.

  2. Sekali lagi, dari tab Terbitkan, pilih elipsis (...) di bagian Hosting, lalu pilih Lampirkan debugger.

    Screenshot of attaching the debugger from Visual Studio.

    Visual Studio terhubung ke aplikasi fungsi Anda dan mengaktifkan penelusuran kesalahan jarak jauh, jika belum diaktifkan.

    Catatan

    Karena debugger jarak jauh tidak dapat tersambung ke proses host, Anda mungkin melihat kesalahan. Bagaimanapun, penelusuran kesalahan default tidak akan masuk ke kode Anda.

  3. Kembali ke Visual Studio, salin URL untuk Situs di bawah Hosting di halaman Terbitkan.

  4. Dari menu Debug, pilih Lampirkan ke Proses, dan di jendela Lampirkan ke proses, tempelkan URL di Target Koneksi, hapus https:// dan tambahkan port :4024.

    Verifikasi bahwa target Anda terlihat seperti <FUNCTION_APP>.azurewebsites.net:4024 dan tekan Enter.

    Visual Studio attach to process dialog

  5. Jika diminta, izinkan akses Visual Studio melalui firewall lokal Anda.

  6. Ketika dimintai kredensial, alih-alih kredensial pengguna lokal pilih akun lain (Pilihan lainnya di Windows). Berikan nilai userName dan userPWD dari profil yang diterbitkan untuk alamat Email dan Kata Sandi dalam dialog autentikasi di Windows. Setelah koneksi aman dibuat dengan server penyebaran, proses yang tersedia akan ditampilkan.

    Visual Studio enter credential

  7. Centang Tampilkan proses dari semua pengguna, lalu pilih dotnet.exe dan pilih Lampirkan. Setelah operasi selesai, Anda dilampirkan ke kode pustaka kelas C# yang berjalan dalam proses pekerja yang terisolasi. Pada titik ini, Anda dapat men-debug aplikasi fungsi seperti biasa.

Untuk melampirkan debugger jarak jauh ke aplikasi fungsi yang berjalan dalam proses dengan host Functions:

  • Dari tab Terbitkan, pilih elipsis (...) di bagian Hosting, lalu pilih Lampirkan debugger.

    Screenshot of attaching the debugger from Visual Studio.

Visual Studio terhubung ke aplikasi fungsi Anda dan mengaktifkan penelusuran kesalahan jarak jauh, jika belum diaktifkan. Visual Studio juga menemukan dan melampirkan debugger ke proses host untuk aplikasi. Pada titik ini, Anda dapat men-debug aplikasi fungsi seperti biasa.

Menonaktifkan penelusuran kesalahan jarak jauh

Setelah selesai melakukan penelusuran kesalahan pada kode Anda dari jarak jauh, Anda harus menonaktifkan penelusuran kesalahan jarak jauh di portal Azure. Penelusuran kesalahan jarak jauh secara otomatis dinonaktifkan setelah 48 jam, jika Anda lupa.

  1. Di tab Terbitkan di proyek Anda, pilih elipsis (...) di bagian Hosting, dan pilih Buka di portal Azure. Tindakan ini membuka aplikasi fungsi di portal Azure tempat proyek Anda disebarkan.

  2. Di aplikasi fungsi, pilih Konfigurasi di bawah pengaturan, pilih Pengaturan Umum, atur Penelusuran Kesalahan Jarak Jauh ke Nonaktif, lalu pilih Simpan lalu Lanjutkan.

Setelah aplikasi fungsi dimulai ulang, Anda tidak dapat lagi terhubung dari jarak jauh ke proses jarak jauh Anda. Anda dapat menggunakan tab yang sama ini di portal Azure untuk mengaktifkan penelusuran kesalahan jarak jauh di luar Visual Studio.

Fungsi pemantauan

Cara yang disarankan untuk memantau eksekusi fungsi Anda adalah dengan mengintegrasikan aplikasi fungsi Anda dengan Azure Application Insights. Anda harus mengaktifkan integrasi ini saat membuat aplikasi fungsi selama penerbitan Visual Studio.

Jika karena alasan tertentu integrasi tidak dilakukan selama penerbitan, Anda masih harus mengaktifkan integrasi Application Insights untuk aplikasi fungsi Anda di Azure.

Untuk mempelajari selengkapnya tentang pemantauan menggunakan Application Insights, lihat Memantau Azure Functions.

Fungsi pengujian

Bagian ini menjelaskan cara membuat proyek model dalam proses C# yang dapat Anda uji dengan xUnit.

Testing Azure Functions with C# in Visual Studio

1. Penyiapan

Gunakan langkah-langkah ini untuk mengonfigurasi lingkungan, termasuk proyek dan fungsi aplikasi, yang diperlukan untuk mendukung pengujian Anda:

  1. Membuat aplikasi fungsi baru dan menamainya Azure Functions
  2. Buat fungsi HTTP dari templat dan beri nama MyHttpTrigger.
  3. Buat fungsi timer dari templat dan beri nama MyTimerTrigger.
  4. Buat aplikas Pengujian xUnit dalam solusi dan beri nama Functions.Tests. Hapus file pengujian default.
  5. Gunakan NuGet untuk menambahkan referensi dari aplikasi pengujian ke Microsoft.AspNetCore.Mvc
  6. Referensi aplikasi Fungsi dari aplikasi Functions.Tests.

Sekarang setelah proyek dibuat, Anda dapat membuat kelas yang digunakan untuk menjalankan pengujian otomatis.

2. Buat kelas pengujian

Setiap fungsi mengambil instans untuk menangani pengelogan ILogger pesan. Beberapa pengujian tidak mencatat pesan atau tidak peduli bagaimana pengelogan diimplementasikan. Pengujian lain perlu mengevaluasi pesan yang dicatat untuk menentukan apakah pengujian sedang lulus.

  1. Buat kelas bernama ListLogger, yang menyimpan daftar pesan internal untuk dievaluasi selama pengujian. Untuk mengimplementasikan antarmuka ILogger yang diperlukan, kelas membutuhkan cakupan. Kelas berikut peniruan cakupan untuk kasus pengujian untuk diteruskan ke ListLogger kelas.

  2. Buat kelas baru di proyek Functions.Tests bernama NullScope.cs dan tambahkan kode ini:

    using System;
    
    namespace Functions.Tests
    {
        public class NullScope : IDisposable
        {
            public static NullScope Instance { get; } = new NullScope();
    
            private NullScope() { }
    
            public void Dispose() { }
        }
    }
    
  3. Buat kelas di proyek Functions.Tests bernama ListLogger.cs dan tambahkan kode ini:

    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Functions.Tests
    {
        public class ListLogger : ILogger
        {
            public IList<string> Logs;
    
            public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
    
            public bool IsEnabled(LogLevel logLevel) => false;
    
            public ListLogger()
            {
                this.Logs = new List<string>();
            }
    
            public void Log<TState>(LogLevel logLevel,
                                    EventId eventId,
                                    TState state,
                                    Exception exception,
                                    Func<TState, Exception, string> formatter)
            {
                string message = formatter(state, exception);
                this.Logs.Add(message);
            }
        }
    }
    

    Kelas ListLogger mengimplementasikan anggota berikut yang dikontrak oleh ILogger antarmuka:

    • BeginScope: Cakupan menambahkan konteks ke pengelogan Anda. Dalam hal ini, pengujian hanya menunjuk ke instans statik pada NullScope kelas untuk memungkinkan pengujian berfungsi.

    • IsEnabled: Nilai default false disediakan.

    • Log: Metode ini menggunakan fungsi yang formatter disediakan untuk memformat pesan lalu menambahkan teks yang dihasilkan ke Logs koleksi.

    Koleksi Logs adalah instans List<string> dan diinisialisasi dalam konstruktor.

  4. Buat file kode di proyek Functions.Tests bernama LoggerTypes.cs dan tambahkan kode ini:

    namespace Functions.Tests
    {
        public enum LoggerTypes
        {
            Null,
            List
        }
    }
    

    Enumerasi ini menentukan jenis pencatat yang digunakan oleh pengujian.

  5. Buat kelas di proyek Functions.Tests bernama TestFactory.cs dan tambahkan kode ini:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Internal;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Logging.Abstractions;
    using Microsoft.Extensions.Primitives;
    using System.Collections.Generic;
    
    namespace Functions.Tests
    {
        public class TestFactory
        {
            public static IEnumerable<object[]> Data()
            {
                return new List<object[]>
                {
                    new object[] { "name", "Bill" },
                    new object[] { "name", "Paul" },
                    new object[] { "name", "Steve" }
    
                };
            }
    
            private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
            {
                var qs = new Dictionary<string, StringValues>
                {
                    { key, value }
                };
                return qs;
            }
    
            public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
            {
                var context = new DefaultHttpContext();
                var request = context.Request;
                request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
                return request;
            }
    
            public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
            {
                ILogger logger;
    
                if (type == LoggerTypes.List)
                {
                    logger = new ListLogger();
                }
                else
                {
                    logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
                }
    
                return logger;
            }
        }
    }
    

    Kelas TestFactory mengimplementasikan anggota berikut:

    • Data: Properti ini mengembalikan kumpulan data sampel IEnumerable. Pasangan nilai kunci mewakili nilai yang diteruskan ke dalam untai kueri.

    • CreateDictionary: Metode ini menerima pasangan kunci/nilai sebagai argumen dan mengembalikan yang baru digunakan Dictionary untuk membuat QueryCollection untuk mewakili nilai untai kueri.

    • CreateHttpRequest: Metode ini membuat permintaan HTTP yang diinisialisasi dengan parameter untai kueri yang diberikan.

    • CreateLogger: Berdasarkan jenis pencatat, metode ini mengembalikan kelas pencatat yang digunakan untuk pengujian. Melacak ListLogger pesan yang dicatat tersedia untuk dievaluasi dalam pengujian.

  6. Buat kelas di proyek Functions.Tests bernama FunctionsTests.cs dan tambahkan kode ini:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using Xunit;
    
    namespace Functions.Tests
    {
        public class FunctionsTests
        {
            private readonly ILogger logger = TestFactory.CreateLogger();
    
            [Fact]
            public async void Http_trigger_should_return_known_string()
            {
                var request = TestFactory.CreateHttpRequest("name", "Bill");
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal("Hello, Bill. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Theory]
            [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
            public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
            {
                var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Fact]
            public void Timer_should_log_message()
            {
                var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
                new MyTimerTrigger().Run(null, logger);
                var msg = logger.Logs[0];
                Assert.Contains("C# Timer trigger function executed at", msg);
            }
        }
    }
    

    Anggota yang diimplementasikan di kelas ini adalah:

    • Http_trigger_should_return_known_string: Pengujian ini membuat permintaan dengan nilai untai kueri name=Bill ke fungsi HTTP dan memeriksa bahwa respons yang diharapkan dikembalikan.

    • Http_trigger_should_return_string_from_member_data: Pengujian ini menggunakan atribut xUnit untuk memberikan data sampel ke fungsi HTTP.

    • Timer_should_log_message:Pengujian ini membuat instans ListLogger dan meneruskannya ke fungsi timer. Setelah fungsi dijalankan, maka log diperiksa untuk memastikan pesan yang diharapkan ada.

  7. Untuk mengakses pengaturan aplikasi dalam pengujian, Anda dapat menyuntikkan instans dengan nilai variabel lingkungan yang IConfiguration ditiru ke dalam fungsi Anda.

3. Jalankan pengujian

Untuk menjalankan pengujian, navigasikan ke Test Explorer dan pilih Jalankan Semua Pengujian di Tampilan.

Testing Azure Functions with C# in Visual Studio

4. Tes debug

Untuk men-debug pengujian, atur titik henti pada pengujian, navigasi ke Test Explorer dan pilih Jalankan> Debug Jalankan Terakhir.

Langkah berikutnya

Untuk informasi selengkapnya tentang Azure Functions Core Tools, lihat Bekerja dengan Azure Functions Core Tools.