Membuat dan menjalankan kode .NET 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 dari alur kerja aplikasi logika Standar, Anda dapat menggunakan Visual Studio Code dengan ekstensi Azure Logic Apps (Standard). 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 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
Akun dan langganan Azure. Jika Anda tidak memiliki langganan, daftar untuk mendapatkan akun Azure secara gratis.
Visual Studio Code terbaru dengan ekstensi Azure Logic Apps (Standar). Untuk memenuhi persyaratan ini, lihat prasyarat untuk Membuat alur kerja Standar di Azure Logic Apps penyewa tunggal dengan Visual Studio Code.
Kemampuan fungsi kustom saat ini hanya tersedia di Visual Studio Code, yang berjalan pada sistem operasi Windows.
Kemampuan fungsi kustom saat ini mendukung panggilan .NET Framework dan .NET 8 untuk alur kerja aplikasi logika yang dihosting Azure.
Folder lokal yang digunakan untuk membuat proyek kode Anda
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.
Fungsi kustom menggunakan pekerja terisolasi untuk memanggil kode di alur kerja aplikasi logika Anda. Untuk menghindari konflik referensi paket antara kode fungsi Anda sendiri dan pekerja, gunakan versi paket yang sama yang dirujuk oleh pekerja. Untuk daftar paket lengkap dan versi yang dirujuk oleh pekerja, lihat Dependensi pekerja dan paket.
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.
Buka Visual Studio Code. Pada Bilah Aktivitas, pilih ikon Azure . (Keyboard: Shift+Alt+A)
Di jendela Azure yang terbuka, pada toolbar bagian Ruang Kerja, dari menu Azure Logic Apps , pilih Buat ruang kerja aplikasi logika baru.
Dalam kotak Pilih folder , telusuri dan pilih folder lokal yang Anda buat untuk proyek Anda.
Saat kotak perintah Buat ruang kerja aplikasi logika baru muncul, berikan nama untuk ruang kerja Anda:
Contoh ini berlanjut dengan MyLogicAppWorkspace.
Saat kotak perintah Pilih templat proyek untuk ruang kerja aplikasi logika Anda muncul, pilih Aplikasi logika dengan proyek kode kustom.
Untuk alur kerja aplikasi logika Standar yang dihosting Azure, ikuti perintah untuk memilih .NET Framework atau .NET 8.
Ikuti perintah berikutnya untuk memberikan contoh nilai berikut:
Item Contoh nilai Nama fungsi untuk proyek fungsi .NET Anda WeatherForecast Nama namespace layanan untuk proyek fungsi .NET Anda Contoso.Enterprise Templat alur kerja:
- Alur Kerja Stateful
- Alur Kerja Tanpa StatusAlur Kerja Stateful Nama alur kerja MyWorkflow 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:
Simpul Deskripsi <nama ruang kerja> Berisi proyek fungsi .NET dan proyek alur kerja aplikasi logika Anda. Fungsi Berisi artefak untuk proyek fungsi .NET 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
Di ruang kerja Anda, perluas simpul Functions , jika belum diperluas.
Buka file .cs nama> fungsi, 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
- Tipe hasil
- 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 sampelRun
ini 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 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); <...> }
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 .NET 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 atau lib\custom\net8 , berdasarkan versi .NET Anda.
Di Visual Studio Code, dari menu Terminal , pilih Terminal Baru.
Dari daftar direktori kerja yang muncul, pilih Fungsi sebagai direktori kerja Anda saat ini untuk terminal baru.
Visual Studio Code membuka jendela terminal dengan prompt perintah.
Di jendela Terminal , pada prompt perintah, masukkan pemulihan dotnet.
Visual Studio Code menganalisis proyek Anda dan menentukan apakah proyek tersebut sudah diperbarui.
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.
Konfirmasikan bahwa item berikut ada di proyek aplikasi logika Anda:
Di ruang kerja Anda, perluas folder berikut: LogicApp>lib\custom>net472 atau net8, berdasarkan versi .NET Anda. Konfirmasikan bahwa subfolder bernama net472 atau net8, masing-masing berisi 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:
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.
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
Pilih tindakan bernama Panggil fungsi lokal di aplikasi logika ini.
Panel informasi tindakan terbuka di sebelah kanan.
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
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
Dari menu Tampilan Visual Studio Code, pilih Palet Perintah.
Pada perintah yang muncul, temukan dan pilih Azurite: Mulai Blob Service.
Dari daftar direktori kerja yang muncul, pilih LogicApp.
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:
Lampirkan debugger ke proyek aplikasi logika Anda dengan mengikuti langkah-langkah berikut:
Pada Bilah Aktivitas Visual Studio Code, pilih Jalankan dan Debug. (Keyboard: Ctrl+Shift+D)
Dari daftar Jalankan dan Debug, pilih Lampirkan ke aplikasi logika (LogicApp), jika belum dipilih, lalu pilih Putar (panah hijau).
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.
Lampirkan debugger ke proyek fungsi .NET Anda dengan mengikuti langkah-langkah ini, berdasarkan kode Anda:
Proyek .NET 8
Dari menu Tampilan Visual Studio Code, pilih Palet Perintah.
Dari palet perintah, temukan dan pilih Debug: Lampirkan ke proses .NET 5+ atau .NET Core.
Dari daftar, temukan dan pilih proses dotnet.exe . Jika ada beberapa proses dotnet.exe , pilih proses yang memiliki jalur berikut:
<drive-name>:\Users<user-name.azure-functions-core-tools>\Functions\ExtensionBundles\Microsoft.Azure.Functions.ExtensionBundle.Workflows<extension-bundle-version>\CustomCodeNetFxWorker\net8\Microsoft.Azure.Workflows.Functions.CustomCodeNetFxWorker.dll
Proyek .NET Framework
Dari daftar Jalankan dan Debug, pilih Lampirkan ke Fungsi .NET (Fungsi), jika belum dipilih, lalu pilih Putar (panah hijau).
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 di sebelah kiri, misalnya:
Untuk menjalankan pemicu Permintaan secara manual di alur kerja Anda, buka halaman Gambaran Umum alur kerja.
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.
Pada toolbar halaman Gambaran Umum , pilih Jalankan pemicu.
Setelah alur kerja Anda mulai berjalan, debugger mengaktifkan titik henti pertama Anda.
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.
Untuk meninjau informasi selengkapnya tentang eksekusi alur kerja, pilih eksekusi yang sudah selesai. Atau, dari daftar di samping kolom Durasi , pilih Perlihatkan eksekusi.
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 proyek aplikasi logika berikut sebelum Anda menyebarkan:
.NET 4.7.2: folder lib/custom/net472
.NET 8: folder lib/custom/net8
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 menunjukkan 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 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)