Membuat dan menjalankan kode .NET Framework dari alur kerja Standar di Azure Logic Apps

Berlaku pada: Azure Logic Apps (Standar)

Untuk solusi integrasi tempat Anda harus menulis dan menjalankan kode .NET Framework dari alur kerja aplikasi logika Standar, Anda dapat menggunakan Visual Studio Code dengan ekstensi Azure Logic Apps (Standar). 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. Menelusuri kode dan alur kerja Anda dalam sesi penelusuran kesalahan yang sama.
  • Sebarkan kode bersama alur kerja Anda. Tidak ada paket layanan lain yang diperlukan.
  • Dukung skenario migrasi BizTalk Server sehingga Anda dapat mengangkat dan mengalihkan investasi .NET Framework kustom dari lokal ke cloud.

Dengan kemampuan untuk menulis kode Anda sendiri, Anda dapat menyelesaikan skenario seperti berikut:

  • Implementasi logika bisnis kustom
  • Penguraian kustom untuk mengekstrak informasi dari pesan masuk
  • Validasi data dan transformasi sederhana
  • Pembentukan pesan untuk pesan keluar ke sistem lain, seperti API
  • Penghitungan

Kemampuan ini tidak cocok untuk skenario seperti berikut ini:

  • Proses yang membutuhkan waktu lebih dari 10 menit untuk dijalankan
  • Transformasi pesan dan data besar
  • Skenario batching dan debatching yang kompleks
  • Komponen alur BizTalk Server yang menerapkan streaming

Untuk informasi selengkapnya tentang batasan di Azure Logic Apps, lihat Batasan dan konfigurasi - Azure Logic Apps.

Prasyarat

Batasan

Penulisan fungsi kustom saat ini tidak tersedia di portal Azure. Namun, setelah Anda menyebarkan fungsi dari Visual Studio Code ke Azure, ikuti langkah-langkah dalam Memanggil kode Anda dari alur kerja untuk portal Azure. Anda dapat menggunakan tindakan bawaan bernama Panggil fungsi lokal di aplikasi logika ini untuk memilih dari fungsi kustom yang disebarkan dan menjalankan kode Anda. Tindakan berikutnya dalam alur kerja Anda dapat mereferensikan output dari fungsi-fungsi ini, seperti dalam alur kerja lainnya. Anda dapat melihat riwayat eksekusi, input, dan output tindakan bawaan.

Membuat proyek kode

Ekstensi Azure Logic Apps (Standar) terbaru untuk Visual Studio Code menyertakan templat proyek kode yang memberikan pengalaman yang disederhanakan 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, proyek lain untuk membuat alur kerja Anda.

Catatan

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

  1. Buka Visual Studio Code. Pada Bilah Aktivitas, pilih ikon Azure . (Keyboard: Shift+Alt+A)

  2. Di jendela Azure yang terbuka, pada toolbar bagian Ruang Kerja, dari menu Azure Logic Apps , pilih Buat ruang kerja aplikasi logika baru.

    Screenshot shows Visual Studio Code, Azure window, Workspace section toolbar, and selected option for Create new logic app workspace.

  3. Dalam kotak Pilih folder , telusuri dan pilih folder lokal yang Anda buat untuk proyek Anda.

  4. Saat kotak perintah Buat ruang kerja aplikasi logika baru muncul, berikan nama untuk ruang kerja Anda:

    Screenshot shows Visual Studio Code with prompt to enter workspace name.

    Contoh ini berlanjut dengan MyLogicAppWorkspace.

  5. Saat kotak perintah Pilih templat proyek untuk ruang kerja aplikasi logika Anda muncul, pilih Aplikasi logika dengan proyek kode kustom.

    Screenshot shows Visual Studio Code with prompt to select project template for logic app workspace.

  6. Ikuti perintah berikutnya untuk memberikan contoh nilai berikut:

    Item Contoh nilai
    Nama fungsi untuk proyek fungsi WeatherForecast
    Nama namespace untuk proyek fungsi Contoso.Enterprise
    Templat alur kerja:
    - Alur Kerja Stateful
    - Alur Kerja Tanpa Status
    Alur Kerja Stateful
    Nama alur kerja MyWorkflow
  7. Pilih Buka di jendela saat ini.

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

    Screenshot shows Visual Studio Code with created workspace.

    Simpul Deskripsi
    <nama ruang kerja> Berisi proyek fungsi dan proyek alur kerja aplikasi logika Anda.
    Fungsi Berisi artefak untuk proyek fungsi Anda. Misalnya, <file function-name.cs> adalah file kode tempat Anda dapat menulis kode Anda.
    LogicApp Berisi artefak untuk proyek aplikasi logika Anda, termasuk alur kerja kosong.

Tulis kode Anda

  1. Di ruang kerja Anda, perluas simpul Functions , jika belum diperluas.

  2. Buka file function-name.cs>, yang diberi nama WeatherForecast.cs dalam contoh ini.<

    Secara default, file ini berisi kode sampel yang memiliki elemen kode berikut bersama dengan nilai contoh yang disediakan sebelumnya jika sesuai:

    • Nama namespace
    • Nama Kelas
    • Nama fungsi
    • Parameter fungsi
    • Jenis Pengembalian
    • Jenis kompleks

    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. Metode sampel Run ini menunjukkan beberapa kemampuan yang tersedia dengan fitur fungsi kustom, seperti meneruskan input dan output yang berbeda, termasuk jenis .NET yang kompleks.

    File <function-name.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 bersama informasi jejak 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);
    
        <...>
    
    }
    
  3. Ganti kode fungsi sampel dengan kode Anda sendiri, dan edit metode default Run untuk skenario Anda sendiri. 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 tanpa perubahan apa pun.

Mengkompilasi dan membangun kode Anda

Setelah Anda selesai menulis kode, kompilasi untuk memastikan bahwa tidak ada kesalahan build. Proyek fungsi Anda secara otomatis menyertakan tugas build, yang mengkompilasi lalu menambahkan kode Anda ke folder lib\custom di proyek aplikasi logika Anda di mana alur kerja mencari fungsi kustom untuk dijalankan. Tugas-tugas ini menempatkan rakitan di folder lib\custom\net472 .

  1. Di Visual Studio Code, dari menu Terminal , pilih Terminal Baru.

  2. Dari daftar direktori kerja yang muncul, pilih Fungsi sebagai direktori kerja Anda saat ini untuk terminal baru.

    Screenshot shows Visual Studio Code, prompt for current working directory, and selected Functions directory.

    Visual Studio Code membuka jendela terminal dengan prompt perintah.

  3. Di jendela Terminal , pada prompt perintah, masukkan pemulihan dotnet.

    Visual Studio Code menganalisis proyek Anda dan menentukan apakah proyek tersebut sudah diperbarui.

    Screenshot shows Visual Studio Code, Terminal window, and completed dotnet restore command.

  4. Setelah prompt perintah muncul kembali, masukkan build dotnet. Atau, dari menu Terminal , pilih Jalankan Tugas. Dari daftar tugas, pilih build (Functions).

    Jika build Anda berhasil, jendela Terminal melaporkan bahwa Build berhasil.

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

    • Di ruang kerja Anda, perluas folder berikut: LogicApp>lib\custom>net472. Konfirmasikan bahwa subfolder bernama net472 berisi beberapa file assembly (DLL) yang diperlukan untuk menjalankan kode Anda, termasuk file bernama< function-name.dll.>

    • Di ruang kerja Anda, perluas folder berikut: LogicApp>lib\custom<>function-name.> Konfirmasikan bahwa subfolder bernama <function-name> berisi file function.json, yang menyertakan 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:

    Screenshot shows Visual Studio Code and logic app workspace with function project and logic app project, now with the generated assemblies and other required files.

Memanggil kode Anda dari alur kerja

Setelah Anda mengonfirmasi bahwa kode Anda dikompilasi dan bahwa proyek aplikasi logika Anda berisi file yang diperlukan agar kode Anda berjalan, buka alur kerja default yang disertakan dengan proyek aplikasi logika Anda.

  1. Di ruang kerja Anda, di bawah LogicApp, perluas< simpul nama> alur kerja, buka menu pintasan untuk workflow.json, dan pilih Buka Perancang.

    Pada perancang alur kerja yang terbuka, alur kerja default, disertakan dengan proyek aplikasi logika Anda, muncul dengan pemicu dan tindakan berikut:

    • Pemicu Permintaan bawaan bernama Saat permintaan HTTP diterima
    • Tindakan bawaan bernama Panggil fungsi lokal di aplikasi logika ini
    • Tindakan Respons bawaan bernama Respons, yang Anda gunakan untuk membalas penelepon hanya saat Anda menggunakan pemicu Permintaan
  2. Pilih tindakan bernama Panggil fungsi lokal di aplikasi logika ini.

    Panel informasi tindakan terbuka di sebelah kanan.

    Screenshot shows Visual Studio Code, workflow designer, and default workflow with trigger and actions.

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

Debug kode dan alur kerja Anda

  1. Ulangi langkah-langkah berikut untuk memulai emulator penyimpanan Azurite tiga kali: masing-masing satu kali untuk layanan Azure Storage berikut:

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

    2. Pada perintah yang muncul, temukan dan pilih Azurite: Mulai Blob Service.

    3. Dari daftar direktori kerja yang muncul, pilih LogicApp.

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

    Anda berhasil saat taskbar Visual Studio Code di bagian bawah layar menampilkan tiga layanan penyimpanan yang berjalan, misalnya:

    Screenshot shows Visual Studio Code taskbar with Azure Blob Service, Azure Queue Service, and Azure Table Service running.

  2. Pada Bilah Aktivitas Visual Studio Code, pilih Jalankan dan Debug. (Keyboard: Ctrl+Shift+D)

    Screenshot shows Visual Studio Code Activity Bar with Run and Debug selected.

  3. Dari daftar Jalankan dan Debug, pilih Lampirkan ke aplikasi logika (LogicApp), jika belum dipilih, lalu pilih Putar (panah hijau).

    Screenshot shows Run and Debug list with Attach to logic app selected and Play button selected.

    Jendela Terminal terbuka dan memperlihatkan proses debugging yang dimulai. Jendela Konsol Debug kemudian muncul dan menampilkan status penelusuran kesalahan. Di bagian bawah Visual Studio Code, bilah tugas berubah menjadi oranye, menunjukkan bahwa debugger .NET dimuat.

  4. Dari daftar Jalankan dan Debug, pilih Lampirkan ke Fungsi .NET (Fungsi), lalu pilih Putar (panah hijau).

    Screenshot shows Run and Debug list with Attach to NET Functions selected and Play button selected.

  5. Untuk mengatur titik henti apa pun, dalam definisi fungsi Anda (<function-name.cs>) atau definisi alur kerja (workflow.json), temukan nomor baris tempat Anda menginginkan titik henti, dan pilih kolom di sebelah kiri, misalnya:

    Screenshot shows Visual Studio Code and the open function code file with a breakpoint set for a line in code.

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

      Screenshot shows Visual Studio Code and workflow's Overview page opened.

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

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

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

  9. Untuk meninjau informasi selengkapnya tentang eksekusi alur kerja, pilih eksekusi yang sudah selesai. Atau, dari daftar di samping kolom Durasi , pilih Perlihatkan eksekusi.

    Screenshot shows Visual Studio Code and finished workflow run.

Menyebarkan kode Anda

Anda dapat menyebarkan fungsi kustom dengan cara yang sama seperti Anda menyebarkan proyek aplikasi logika Anda. Baik Anda menyebarkan dari Visual Studio Code atau menggunakan proses CI/CD DevOps, pastikan Anda membuat kode dan bahwa semua rakitan dependen ada di folder lib/custom/net472 proyek aplikasi logika sebelum Anda menyebarkan. Untuk informasi selengkapnya, lihat Menyebarkan alur kerja Standar dari Visual Studio Code ke Azure.

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 memeriksa apakah folder LogicApp\lib\custom kosong. Jika kosong, dari menu Terminal, pilih Jalankan Fungsi build Tugas>.

Tidak ada proses dengan nama yang ditentukan yang sedang berjalan

Jika Anda mendapatkan pesan kesalahan ini saat menjalankan alur kerja, Anda mungkin memiliki proses debugger yang dilampirkan 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 menampilkan kesalahan yang mirip dengan pesan berikut, pastikan Anda telah menginstal .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 build

Jika fungsi Anda tidak menyertakan variabel, dan Anda membuat 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 Run tanda tangan metode muncul:

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

Langkah berikutnya

Membuat alur kerja Standar dengan Visual Studio Code