Buat dan jalankan fungsi lokal di alur kerja standar untuk Azure Logic Apps

Berlaku untuk: Azure Logic Apps (Standard)

Ketika alur kerja integrasi Anda membutuhkan logika di luar operasi bawaan dan konektor yang sudah dibangun, buatlah fungsi lokal di mana kode tetap spesifik untuk solusi aplikasi logika Anda. Fungsi lokal ini adalah kode .NET kustom yang Anda buat, jalankan, debug, dan deploy dalam proyek Azure Logic Apps Standard yang sama dengan alur kerja pemanggil. Dengan menjaga fungsi tetap lokal, Anda dapat mengembangkan, mengamankan, menerapkan, memperluas, dan mengoperasikan alur kerja beserta kode kustomnya sebagai satu aplikasi.

Fungsi lokal membantu alur kerja Anda melakukan tugas seperti:

  • Terapkan logika bisnis dan perhitungan khusus.
  • Mengurai pesan masuk yang eksklusif atau kompleks.
  • Validasi, memperkaya, atau melakukan transformasi sederhana pada data.
  • Bentuk pesan keluar untuk API, konektor, atau sistem mitra.
  • Gunakan kembali logika pembantu .NET yang sesuai dari solusi integrasi yang sudah ada, termasuk skenario migrasi BizTalk Server.

Dengan fungsi lokal, Anda dapat mencapai tujuan berikut:

Maksud Capability
Kembangkan dan debug satu solusi Buat fungsi alur kerja dan lokal di ruang kerja Visual Studio Code yang sama, dan lakukan keduanya dalam satu sesi debugging.
Terapkan bersama Membangun dan menerapkan fungsi lokal bersamaan dengan alur kerja penelepon tanpa menyediakan rencana layanan terpisah.
Kurangi batas layanan Hindari aplikasi Function yang terpisah, endpoint HTTP, alur autentikasi, dan lintasan jaringan tambahan untuk kode yang khusus untuk alur kerja.
Gabungkan alat low-code dan pro-code Gunakan konektor dan orkestrasi alur kerja untuk alur integrasi. Gunakan fungsi lokal untuk logika .NET khusus.

Fungsi lokal berbeda dengan fungsi yang dihosting di aplikasi fungsi terpisah di Azure Functions. Azure Functions paling sesuai digunakan ketika kode Anda harus menyediakan endpoint yang independen, digunakan bersama di berbagai aplikasi, memiliki siklus hidup penerapan dan pembuatan versinya sendiri, atau diskalakan secara independen. Ketika kode Anda perlu bekerja di dalam solusi Azure Logic Apps Standard tertentu dan berbagi siklus hidup aplikasi dengan alur kerja pemanggil, gunakan fungsi lokal.

Panduan ini menunjukkan cara membuat, membangun, memanggil, debug, dan menyebarkan fungsi .NET lokal untuk alur kerja standar menggunakan Visual Studio Code.

Catatan

Fungsi lokal tidak cocok untuk skenario berikut:

  • Proses yang dijalankan mungkin akan berlangsung melebihi 10 menit.
  • Menggunakan komponen pipeline BizTalk Server yang mengimplementasikan streaming.

Untuk informasi selengkapnya, lihat Batasan.

Prasyarat

  • Akun dan langganan Azure. Dapatkan akun Azure gratis.

  • Visual Studio Code terbaru dengan ekstensi Azure Logic Apps (Standar).

    Untuk prasyarat, lihat Buat alur kerja Standar di Azure Logic Apps penyewa tunggal dengan Visual Studio Code.

    Ekstensi ini memberikan kemampuan dan manfaat berikut:

    • Tulis kode Anda sendiri dengan membuat fungsi yang memiliki fleksibilitas dan kontrol untuk menyelesaikan masalah integrasi Anda yang paling menantang.
    • Debug kode secara lokal di Visual Studio Code. Melangkah melalui kode dan alur kerja Anda dalam sesi debugging yang sama.
    • Sebarkan kode bersama alur kerja Anda. Tidak ada paket layanan lain yang diperlukan.
    • Mendukung skenario migrasi BizTalk Server sehingga Anda dapat mengangkat dan mengalihkan investasi .NET kustom dari lokal ke cloud.
  • Folder lokal yang akan digunakan untuk proyek kode Anda.

Batasan

  • Anda hanya dapat membuat fungsi lokal di Visual Studio Code yang berjalan di Windows. Kemampuan ini mendukung .NET Framework dan .NET 8 untuk alur kerja standar yang dihosting di Workflow Service Plan, App Service Environment v3 (ASE v3), atau Hybrid.

  • Anda tidak dapat menggunakan penulisan fungsi kustom di portal Azure. Namun, untuk bekerja dengan output dari fungsi kustom di alur kerja Anda, ikuti langkah-langkah berikut:

    1. setelah menyebarkan Fungsi ke Azure, ikuti langkah-langkah di Memanggil kode Anda dari alur kerja untuk portal Azure.

    2. Tambahkan tindakan bawaan bernama Panggil fungsi lokal di aplikasi logika ini ke alur kerja Anda. Pilih fungsi kustom yang disebarkan yang Anda inginkan dan jalankan kode Anda.

    3. Gunakan tindakan alur kerja berikutnya untuk mereferensikan output fungsi kustom, seperti yang dapat Anda lakukan di alur kerja lainnya. Anda dapat melihat riwayat eksekusi, input, dan output tindakan bawaan.

Untuk batasan umum, lihat Limits dan referensi konfigurasi untuk Azure Logic Apps.

1: Membuat proyek kode

Ekstensi Azure Logic Apps (Standar) untuk Visual Studio Code menyertakan templat proyek kode yang memberikan pengalaman yang efisien untuk menulis, men-debug, dan menyebarkan kode Anda sendiri dengan alur kerja Anda. Templat proyek ini membuat file ruang kerja dan dua proyek sampel: satu proyek untuk menulis kode Anda dan proyek lain untuk membuat alur kerja Anda.

Catatan

Anda tidak dapat menggunakan folder proyek yang sama untuk kode dan alur kerja Anda.

Untuk membuat proyek kode, ikuti langkah-langkah berikut:

  1. Di Visual Studio Code, sign ke akun Azure Anda.

    Jika masuk membutuhkan waktu lebih lama dari biasanya, Visual Studio Code meminta Anda untuk masuk melalui situs web autentikasi Microsoft dengan memberi Anda kode perangkat. Untuk masuk dengan menggunakan kode sebagai gantinya, ikuti langkah-langkah berikut:

    1. Pilih Gunakan Kode Perangkat, lalu pilih Salin & Buka.

    2. Pilih Buka Tautan untuk membuka jendela browser baru dan lanjutkan ke situs web autentikasi.

    3. Di halaman Masuk ke akun Anda, masukkan kode autentikasi Anda, dan pilih Berikutnya.

  2. Pada Bilah Aktivitas, pilih ikon Azure.

  3. Di jendela Azure, buka bagian Workspace. Pindahkan penunjuk Anda ke area judul sehingga toolbar muncul.

  4. Dari menu Azure Logic Apps, pilih Buat ruang kerja aplikasi logika baru.

    Tangkapan layar yang menampilkan Visual Studio Code, jendela Azure, dan menu toolbar Workspace dengan pilihan Buat workspace aplikasi logika baru.

  5. Di jendela Pilih Folder , telusuri ke folder proyek lokal, pilih folder, lalu Pilih.

  6. Di jendela Buat ruang kerja aplikasi logika baru , untuk perintah Nama ruang kerja , masukkan nama untuk ruang kerja Anda, lalu tekan Enter.

    Contoh ini menggunakan weather-app sebagai nama ruang kerja:

    Tangkapan layar yang menunjukkan perintah untuk memasukkan nama ruang kerja.

  7. Untuk perintah Pilih templat untuk proyek baru Anda , pilih Aplikasi logika dengan proyek kode kustom.

    Tangkapan layar yang menunjukkan perintah Buat ruang kerja Logic App baru dengan daftar templat dan opsi yang dipilih untuk proyek Logic App dengan kode kustom.

  8. Untuk prompt Pilih kerangka kerja target, pilih .NET Framework atau .NET 8.

  9. Ikuti perintah berikutnya untuk memberikan informasi berikut:

    Petunjuk Contoh nilai
    Nama Aplikasi Logika weather-logic-app
    nama Function untuk proyek fungsi .NET Anda WeatherForecast
    Namespace untuk proyek fungsi .NET Anda Contoso.Enterprise
    Pilih templat untuk alur kerja pertama proyek Anda:

    - Alur kerja stateful
    - Alur kerja tanpa status
    - Agen otonom
    - Agen percakapan
    - Lewati untuk saat ini
    Alur kerja yang memiliki status
    Nama alur kerja weather-workflow
  10. Untuk perintah Pilih bagaimana Anda ingin membuka proyek Anda , pilih Buka di jendela saat ini.

    Setelah Anda menyelesaikan langkah ini, Visual Studio Code membuat ruang kerja Anda, yang mencakup proyek fungsi .NET dan proyek aplikasi logika, secara default, misalnya:

    Tangkapan layar yang menunjukkan ruang kerja yang dibuat dengan proyek aplikasi logika dan proyek fungsi .NET.

    Di jendela Explorer , perhatikan folder berikut ini di ruang kerja Anda:

    Folder Deskripsi
    < nama ruang kerja> Berisi proyek fungsi .NET dan proyek alur kerja aplikasi logika Anda.
    < nama aplikasi logika> Berisi file dan artefak lain untuk proyek aplikasi logika Anda. Misalnya, file workflow.json adalah file definisi alur kerja tempat Anda dapat membangun alur kerja Anda.
    < nama fungsi> Berisi file dan artefak lain untuk proyek fungsi .NET Anda. Misalnya, <file function-name>.cs adalah file kode tempat Anda dapat menulis kode Anda.
  11. Untuk prompt Mengaktifkan konektor untuk Azure dalam Logic Apps <logic-app-name>, pilih Gunakan konektor dari Azure.

  12. Untuk perintah Pilih langganan, pilih langganan Azure yang Anda inginkan.

  13. Untuk perintah Pilih grup sumber daya untuk sumber daya baru , pilih grup sumber daya yang Anda inginkan atau Buat grup sumber daya baru.

  14. Untuk perintah Pilih lokasi untuk sumber daya baru, pilih wilayah Azure untuk melakukan penyebaran.

  15. Untuk metode autentikasi Pilih untuk konektor Azure, pilih jenis autentikasi yang akan digunakan untuk koneksi yang memerlukan autentikasi.

    Jenis autentikasi Deskripsi
    Identitas yang dikelola Pilih Identitas Layanan Terkelola untuk menggunakan identitas yang ditetapkan sistem atau ditetapkan pengguna pada sumber daya aplikasi logika Anda.

    Secara default, sumber daya aplikasi logika Standar sudah mengaktifkan identitas yang ditetapkan sistem. Namun, Anda perlu menyiapkan identitas dengan akses peran pada sumber daya target ditambah persyaratan lainnya.

    Untuk informasi selengkapnya, lihat Menetapkan akses berbasis peran ke identitas terkelola.
    Kunci koneksi Siapkan akses ke sumber daya target dengan menggunakan string koneksi dan kunci akses.

Setelah menyelesaikan langkah-langkah ini, lanjutkan ke bagian berikutnya sehingga Anda dapat menulis kode Anda.

2: Tulis kode Anda

  1. Di jendela Explorer, perluas folder proyek fungsi, dan buka < file function-name>.cs .

    File ini berisi kode sampel dan elemen kode tertentu dengan nilai yang sebelumnya Anda berikan.

    Dalam contoh ini, file fungsi WeatherForecast.cs berisi elemen kode ini dengan nilai contoh:

    Elemen kode Nilai
    Nama namespace Contoso.Enterprise
    Nama Kelas WeatherForecast
    Nama fungsi WeatherForecast
    Parameter fungsi zipCode, temperatureScale
    Tipe pengembalian Task<Weather>
    Jenis kompleks Weather

    Contoh berikut menunjukkan kode sampel lengkap:

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso.Enterprise
    {
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;
        using Microsoft.Azure.Functions.Extensions.Workflows;
        using Microsoft.Azure.WebJobs;
        using Microsoft.Extensions.Logging;
    
        /// <summary>
        /// Represents the WeatherForecast flow invoked function.
        /// </summary>
        public class WeatherForecast
        {
    
            private readonly ILogger<WeatherForecast> logger;
    
            public WeatherForecast(ILoggerFactory loggerFactory)
            {
                logger = loggerFactory.CreateLogger<WeatherForecast>();
            }
    
            /// <summary>
            /// Executes the logic app workflow.
            /// </summary>
            /// <param name="zipCode">The zip code.</param>
            /// <param name="temperatureScale">The temperature scale (e.g., Celsius or Fahrenheit).</param>
            [FunctionName("WeatherForecast")]
            public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
            {
    
                this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
                // Generate random temperature within a range based on the temperature scale
                Random rnd = new Random();
                var currentTemp = temperatureScale == "Celsius" ? rnd.Next(1, 30) : rnd.Next(40, 90);
                var lowTemp = currentTemp - 10;
                var highTemp = currentTemp + 10;
    
                // Create a Weather object with the temperature information
                var weather = new Weather()
                {
                    ZipCode = zipCode,
                    CurrentWeather = $"The current weather is {currentTemp} {temperatureScale}",
                    DayLow = $"The low for the day is {lowTemp} {temperatureScale}",
                    DayHigh = $"The high for the day is {highTemp} {temperatureScale}"
                };
    
                return Task.FromResult(weather);
            }
    
            /// <summary>
            /// Represents the weather information for WeatherForecast.
            /// </summary>
            public class Weather
            {
                /// <summary>
                /// Gets or sets the zip code.
                /// </summary>
                public int ZipCode { get; set; }
    
                /// <summary>
                /// Gets or sets the current weather.
                /// </summary>
                public string CurrentWeather { get; set; }
    
                /// <summary>
                /// Gets or sets the low temperature for the day.
                /// </summary>
                public string DayLow { get; set; }
    
                /// <summary>
                /// Gets or sets the high temperature for the day.
                /// </summary>
                public string DayHigh { get; set; }
            }
        }
    }
    

    Definisi fungsi mencakup metode default Run yang dapat Anda gunakan untuk memulai. Sampel ini Run menunjukkan beberapa kemampuan yang tersedia dengan fitur fungsi kustom, seperti meneruskan input dan output yang berbeda, termasuk jenis .NET yang kompleks.

    File <nama> fungsi.cs juga menyertakan ILogger antarmuka yang menyediakan dukungan untuk peristiwa pengelogan ke sumber daya Application Insights. Anda dapat mengirim informasi pelacakan ke Application Insights dan menyimpan informasi tersebut dengan informasi pelacakan dari alur kerja Anda, misalnya:

    private readonly ILogger<WeatherForecast> logger;
    
    public WeatherForecast(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<WeatherForecast>();
    }
    
    [FunctionName("WeatherForecast")]
    public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
    {
    
        this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
        <...>
    
    }
    
  2. Ganti contoh kode fungsi dengan kode fungsi Anda sendiri, dan edit metode default Run untuk skenario spesifik Anda. Atau, Anda dapat menyalin fungsi, termasuk [FunctionName("<function-name>")] deklarasi, lalu mengganti nama fungsi dengan nama yang unik. Anda kemudian dapat mengedit fungsi yang diganti namanya untuk memenuhi kebutuhan Anda.

Contoh ini berlanjut dengan kode sampel asli, dengan asumsi tidak ada perubahan.

3: Mengkompilasi dan membangun kode Anda

Setelah Anda selesai menulis kode, kompilasi untuk memastikan tidak ada kesalahan build. Proyek fungsi .NET Anda secara otomatis menyertakan tugas build yang mengompilasi dan menambahkan kode Anda ke folder lib\custom di proyek aplikasi logika Anda. Alur kerja mencari fungsi kustom di folder ini. Bergantung pada versi .NET Anda, tugas-tugas ini menempatkan rakitan di folder lib\custom\net472 atau lib\custom\net8.

Ikuti langkah-langkah berikut:

  1. Di Visual Studio Code, pada Bilah Aktivitas, pilih Explorer.

  2. Di jendela Explorer, buka menu pintasan untuk folder proyek fungsi, dan pilih Bangun proyek fungsi.

    Tangkapan layar yang menunjukkan menu pintasan proyek fungsi dengan opsi yang dipilih untuk proyek Build functions.

    Tugas build berjalan untuk proyek fungsi-fungsi. Jika build Anda berhasil, jendela Terminal menampilkan pesan Build berhasil .

  3. Konfirmasikan bahwa item berikut ada di proyek aplikasi logika Anda:

    • Di ruang kerja Anda, perluas folder berikut: <your-logic-app>>lib\custom>net472 atau net8, berdasarkan versi .NET Anda. Pastikan subfolder net472 atau net8 berisi file assembly (DLL) yang diperlukan untuk menjalankan kode Anda, termasuk file bernama <function-name>.dll.

    • Di ruang kerja Anda, perluas folder berikut: <aplikasi logika Anda>>lib\custom><function-name>. Pastikan subfolder <nama-fungsi> berisi file function.json , yang mencakup metadata tentang kode fungsi yang Anda tulis. Perancang alur kerja menggunakan file ini untuk menentukan input dan output yang diperlukan saat memanggil kode Anda.

    Contoh berikut menunjukkan sampel rakitan yang dihasilkan dan file lain dalam proyek aplikasi logika:

    Tangkapan layar yang menampilkan ruang kerja aplikasi logika dengan fungsi .NET dan proyek aplikasi logika. Rakitan yang baru dihasilkan dan berkas lain yang diperlukan terlihat.

4: Memanggil kode Anda dari alur kerja

Setelah Anda mengonfirmasi bahwa kode Anda dikompilasi dan proyek aplikasi logika Anda berisi file yang diperlukan agar kode Anda berjalan, siapkan alur kerja Anda untuk memanggil kode Anda.

  1. Di jendela Explorer , perluas <workspace-name>, <logic-app-name>, lalu <workflow-name>.

  2. Buka menu pintasan untuk workflow.json, dan pilih Buka perancang.

    Perancang alur kerja terbuka dan memperlihatkan alur kerja default dengan pemicu dan tindakan berikut:

    Pengoperasian Deskripsi
    Pemicu Pemicu Permintaan bawaan bernama Saat permintaan HTTP diterima.
    Action Tindakan bawaan bernama Panggil fungsi lokal di aplikasi logika ini.
    Action Tindakan Respons bawaan bernama Respons yang Anda gunakan untuk membalas penelepon hanya saat Anda menggunakan pemicu Permintaan .
  3. Pada perancang, pilih tindakan bernama Panggil fungsi lokal di aplikasi logika ini.

    Panel informasi tindakan terbuka sehingga Anda bisa menyiapkan panggilan fungsi kustom, misalnya:

    Tangkapan layar yang menunjukkan alur kerja default beserta pemicu dan tindakan yang dibuka di desainer alur kerja.

  4. Tinjau dan konfirmasikan bahwa nilai parameter Nama fungsi diatur ke fungsi yang ingin Anda jalankan. Tinjau atau ubah nilai parameter lain yang digunakan fungsi Anda.

5: Debug kode dan alur kerja Anda

  1. Untuk setiap layanan Azure Storage berikut, mulai emulator penyimpanan Azurite:

    • Azure Blob Service
    • Layanan Antrean Azure
    • Layanan Tabel Azure
    1. Dari menu Visual Studio Code View, pilih Palet Perintah.

    2. Pada perintah yang muncul, pilih Azurite: Mulai Blob Service dari daftar.

    3. Dari daftar direktori kerja yang muncul, pilih aplikasi logika Anda.

    4. Ulangi langkah-langkah ini untuk Azurite: Mulai Layanan Antrian dan Azurite: Mulai Layanan Tabel.

    Jika Anda berhasil, taskbar Visual Studio Code di bagian bawah layar menampilkan tiga layanan penyimpanan yang berjalan.

  2. Lampirkan debugger ke proyek aplikasi logika dan proyek fungsi .NET Anda dengan mengikuti langkah-langkah berikut:

    1. Di Visual Studio Code, pada Bilah Aktivitas, pilih Mulai dan Debug (keyboard: Ctrl+Shift+D).

      Tangkapan layar yang menampilkan Bilah Aktivitas Visual Studio Code dengan Run and Debug dipilih.

    2. Dari daftar Jalankan dan Debug, pilih Jalankan/Debug aplikasi logika dengan fungsi lokal (<aplikasi >), lalu pilih Putar (panah hijau).

      Tangkapan layar yang menunjukkan daftar Run and Debug dengan opsi seleksi untuk aplikasi logika Run/Debug dengan fungsi lokal.

      Peristiwa berikut terjadi:

      • Jendela Terminal terbuka dan memperlihatkan proses debugging yang dimulai.
      • Jendela Debug Console terbuka dan menampilkan status debugging.
      • Di bagian bawah Visual Studio Code, bilah tugas berubah menjadi oranye, menunjukkan bahwa debugger .NET dimuat.
  3. Untuk mengatur titik henti apa pun, dalam definisi fungsi Anda (<nama> fungsi.cs) atau definisi alur kerja (workflow.json), temukan nomor baris tempat Anda menginginkan titik henti, dan pilih kolom yang berdekatan, misalnya:

    Tangkapan layar yang menunjukkan file kode fungsi yang terbuka dengan titik henti yang ditetapkan pada salah satu baris kode.

  4. Untuk menjalankan pemicu Permintaan secara manual di alur kerja Anda, buka halaman Gambaran Umum alur kerja:

    1. Dari proyek aplikasi logika Anda, buka menu pintasan file workflow.json , lalu pilih Gambaran Umum.

      Pada halaman Gambaran Umum alur kerja, tombol Jalankan pemicu tersedia saat Anda ingin memulai alur kerja secara manual. Di bawah Properti Alur Kerja, nilai URL Panggilan Balik adalah URL untuk titik akhir yang dapat dipanggil yang dibuat oleh pemicu Permintaan di alur kerja Anda. Anda dapat mengirim permintaan ke URL ini untuk memicu alur kerja Anda dari aplikasi lain, termasuk alur kerja aplikasi logika lainnya.

    2. Pada toolbar halaman Gambaran Umum , pilih Jalankan pemicu.

      Tangkapan layar yang menampilkan Visual Studio Code dan halaman Ikhtisar alur kerja yang terbuka.

      Setelah alur kerja Anda mulai berjalan, debugger mengaktifkan titik henti pertama Anda.

    3. Pada menu Jalankan atau toolbar debugger, pilih tindakan debug.

    Setelah eksekusi alur kerja selesai, halaman Gambaran Umum memperlihatkan eksekusi yang sudah selesai dan detail dasar tentang eksekusi tersebut.

  5. Untuk melihat lebih banyak informasi tentang pelaksanaan alur kerja, pilih pelaksanaan yang telah selesai. Atau, dari daftar di sebelah kolom Durasi, pilih Tampilkan jalankan.

    Tangkapan layar yang menunjukkan Visual Studio Code dan alur kerja yang selesai dijalankan.

6: Menyebarkan kode Anda

Sebarkan fungsi kustom dengan cara yang sama seperti Anda menyebarkan proyek aplikasi logika Anda. Baik Anda menerapkan dari Visual Studio Code maupun menggunakan proses DevOps CI/CD, pastikan Anda melakukan build pada kode sebelum menerapkannya. Juga, pastikan semua assembly yang bergantung ada di folder proyek Logic App berikut sebelum Anda menyebarkan:

  • .NET 4.7.2: folder lib/custom/net472

  • .NET 8: folder lib/custom/net8

Untuk informasi selengkapnya, lihat alur kerja Deploy Standard dari Visual Studio Code ke Azure.

Injeksi Ketergantungan

Saat Anda memilih .NET 8, kode .NET kustom dalam alur kerja Standar mendukung injeksi dependensi (DI). Kemampuan ini memungkinkan Anda mendaftarkan layanan sekali, yang membuatnya tersedia secara otomatis untuk fungsi kode kustom Anda pada runtime, daripada membuat dependensi di dalam setiap fungsi.

Catatan

Hanya .NET 8 proyek kode kustom dalam Visual Studio Code mendukung injeksi dependensi.

Tanpa penyuntikan dependensi, fungsi kode kustom sering:

  • Buat instans layanan langsung dalam fungsi .
  • Menduplikasi logika di beberapa fungsi atau alur kerja.
  • Mencampurkan logika bisnis dengan kode pengaturan dan konfigurasi.

Seiring bertambahnya alur kerja, kode kustom menjadi lebih sulit untuk diuji, digunakan kembali, dan dipertahankan. Dengan menggunakan injeksi ketergantungan, Anda dapat:

  • Pisahkan logika bisnis dari eksekusi alur kerja.
  • Gunakan kembali layanan bersama di berbagai fungsi kode kustom.
  • Sejajarkan kode kustom dengan pola pengembangan .NET standar.

Kode kustom menjadi lebih mudah dikelola dalam alur kerja produksi, terutama ketika beberapa alur kerja mengandalkan logika yang sama.

Kapan harus menggunakan injeksi dependensi

Jika Anda memiliki fungsi kode kustom sederhana atau satu kali, Anda mungkin tidak memerlukan injeksi dependensi. Namun, jika kode kustom Anda memiliki persyaratan berikut, pertimbangkan menggunakan injeksi dependensi:

  • Beberapa alur kerja menggunakan atau berbagi fungsi kode kustom yang sama.
  • Fungsi kode kustom Anda berisi logika bisnis atau perutean yang berubah dari waktu ke waktu.
  • Anda memerlukan uji coba yang lebih baik atau pemeliharaan jangka panjang.

Bagaimana injeksi dependensi memengaruhi fungsi .NET kustom

Injeksi dependensi tidak mengubah cara Anda memanggil fungsi .NET kustom atau perilaku alur kerja Anda. Kemampuan ini hanya mengubah struktur kode kustom yang mendasar tetapi menghasilkan hasil yang sama. Langkah-langkah berikut menjelaskan proses ini:

  1. Azure Logic Apps memuat proyek kode kustom Anda.
  2. Azure Logic Apps menginstansiasi, mendaftarkan, dan menyuntikkan layanan yang diperlukan ke dalam fungsi.
  3. Fungsi beroperasi menggunakan dependensi yang disuntikkan.

Aktifkan injeksi dependensi

Untuk menggunakan injeksi dependensi dengan kode .NET kustom Anda, lengkapi persyaratan berikut:

  1. Saat Anda membuat proyek kode kustom, pilih .NET 8.

    Hanya .NET 8 proyek kode kustom yang mendukung injeksi dependensi.

  2. Dalam proyek Anda, tambahkan StartupConfiguration kelas untuk menentukan daftar dependensi. Terapkan IConfigureStartup antarmuka dan daftarkan dependensi Anda dengan menggunakan IServiceCollection, misalnya:

    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Extensions.DependencyInjection;
    
    public class StartupConfiguration : IConfigureStartup
    {
        /// <summary>
        /// Configures services for the custom code function to use.
        /// </summary>
        /// <param name="services">The service collection to configure.</param>
        public void Configure(IServiceCollection services)
        {
            // Register the routing service with dependency injection
            services.AddSingleton<IRoutingService, OrderRoutingService>();
            services.AddSingleton<IDiscountService, DiscountService>();
        }
    }
    

    Antarmuka IConfigureStartup didefinisikan dalam Microsoft.Azure.Functions.Extensions.Workflows, sementara IServiceCollection didefinisikan dalam Microsoft.Extensions.DependencyInjection. Untuk informasi lebih lanjut, lihat StartupConfiguration.cs.

  3. Dalam konstruktor kelas fungsi kode kustom Anda, inisialisasi layanan terdaftar dengan mendefinisikannya sebagai parameter konstruktor, daripada membuatnya di dalam fungsi, misalnya:

    public class MySampleFunction
    {
        private readonly ILogger<MySampleFunction> logger;
        private readonly IRoutingService routingService;
        private readonly IDiscountService discountService;
    
        public MySampleFunction(ILoggerFactory loggerFactory, IRoutingService routingService, IDiscountService discountService)
        {
            this.logger = loggerFactory.CreateLogger<MySampleFunction>();
            this.routingService = routingService;
            this.discountService = discountService;
        }
    
        // Add your function logic here
    
    } 
    

Selain membangun dan menyebarkan proyek kode kustom, Anda tidak perlu mengambil langkah lain, mengedit alur kerja Anda, atau membuat perubahan penyiapan lainnya di Azure Logic Apps untuk mengaktifkan injeksi dependensi.

Untuk informasi selengkapnya, lihat Contoh Penerapan Injeksi Dependensi Kode Khusus.

Bawa paket NuGet Anda sendiri ke proyek kode kustom

Untuk proyek kode kustom berbasis NuGet yang menggunakan .NET 8, Anda dapat menyertakan dan mengelola paket NuGet Anda sendiri tanpa harus mengatasi konflik dengan dependensi yang digunakan oleh host pekerja bahasa. Cukup tambahkan dependensi perakitan secara langsung ke lokasi perakitan terpisah di proyek Anda. Dengan pengecualian berikut, Anda dapat membawa versi rakitan dependen yang kompatibel dengan .NET 8 yang dibutuhkan oleh proyek Anda:

  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Azure.Functions.Extensions.Workflows.Abstractions

Memecahkan masalah

Kesalahan panel informasi tindakan

Pada perancang alur kerja, saat Anda memilih tindakan bawaan bernama Panggil fungsi lokal di aplikasi logika ini, panel informasi tindakan memperlihatkan pesan berikut:

Failed to retrieve dynamic inputs. Error details:

Dalam skenario ini, periksa proyek aplikasi logika Anda untuk melihat apakah folder LogicApp\lib\custom kosong. Jika kosong, dari menu Terminal, pilih Jalankan Tugas>build Functions.

Tidak ada proses dengan nama yang ditentukan yang sedang berjalan

Jika Anda mendapatkan pesan kesalahan ini saat menjalankan alur kerja, Anda mungkin melampirkan proses debugger ke .NET Functions, bukan ke aplikasi logika Anda.

Untuk memperbaiki masalah ini, dari daftar Jalankan dan Debug , pilih Lampirkan ke aplikasi logika (LogicApp), lalu pilih Putar (segitiga hijau).

Paket tidak diimpor dengan benar

Jika jendela Output memperlihatkan kesalahan yang mirip dengan pesan berikut, pastikan Anda telah menginstal setidaknya .NET 6.0. Jika Anda telah menginstal versi ini, coba hapus instalan lalu instal ulang.

C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.targets(83,5): warning : The ExtensionsMetadataGenerator package was not imported correctly. Are you missing 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets' or 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.props'? [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] WeatherForecast -> C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\\bin\Debug\net472\WeatherForecast.dll C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : It was not possible to find any compatible framework version [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : The specified framework 'Microsoft.NETCore.App', version '6.0.0' was not found. [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : - Check application dependencies and target a framework version installed at: [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj]

Kegagalan kompilasi dengan kesalahan CS1031 dan CS1001

Jika fungsi Anda tidak menyertakan variabel dan Anda membangun kode, jendela Output mungkin menampilkan pesan kesalahan berikut:

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

Build FAILED.

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

0 Warning(s)
2 Error(s)

Untuk memperbaiki masalah ini, dalam metode kode Run Anda, tambahkan parameter berikut:

string parameter1 = null

Contoh berikut menunjukkan bagaimana signature metode Run muncul:

public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)

Buat alur kerja aplikasi logika Standar dengan Visual Studio Code