全部产品
Search
文档中心

Function Compute:Penanganan Event

更新时间:Jun 24, 2025

Topik ini menjelaskan struktur dan karakteristik penanganan event dalam C#.

Antarmuka Penanganan

Saat membuat fungsi C#, Anda perlu menentukan metode penanganan yang dijalankan bersama dengan fungsi tersebut. Metode penanganan dapat berupa metode statis atau instansiasi. Untuk mengakses objek IFcContext dalam metode penanganan, parameter kedua harus ditetapkan sebagai IFcContext. Contoh berikut menunjukkan metode penanganan yang didukung oleh Function Compute.

TipeKembali NamaPenanganan(TipeMasukan masukan, IFcContext konteks);  //IFcContext termasuk 
TipeKembali NamaPenanganan(TipeMasukan masukan); //IFcContext tidak termasuk 
Async Task<TipeKembali> NamaPenanganan(TipeMasukan masukan, IFcContext konteks);
Async Task<TipeKembali> NamaPenanganan(TipeMasukan masukan);
Function Compute mendukung penggunaan Async dalam fungsi C#. Fungsi tersebut akan dijalankan setelah metode asinkron selesai dieksekusi. Dalam definisi sebelumnya:
  • TipeKembali adalah objek yang dikembalikan, yang bisa berupa void, System.IO.Stream, atau objek lain yang diserialisasi/dideserialisasi dalam format JSON. Jika objek Stream dikembalikan, isi dari objek Stream langsung dikembalikan dalam badan respons. Sebaliknya, objek tersebut dikembalikan dalam badan respons setelah diserialisasi dalam format JSON.
  • TipeMasukanTipeMasukan menunjukkan parameter masukan, yang bisa berupa atau objek lain yang diserialisasi/dideserialisasi dalam format JSON.
  • IFcContext menunjukkan objek konteks dari fungsi. Untuk informasi lebih lanjut, lihat Konteks.

Penanganan Event

Function Compute menggunakan C# untuk menulis fungsi. Paket dependensi Aliyun.Serverless.Core harus diperkenalkan. Anda dapat memperkenalkan paket ini dalam file .csproj dengan metode berikut:

  <ItemGroup>
        <PackageReference Include="Aliyun.Serverless.Core" Version="1.0.1" />
  </ItemGroup>

Paket Aliyun.Serverless.Core mendefinisikan dua tipe parameter untuk penanganan event.

  • Stream Handler

    Menggunakan aliran untuk menerima data event masukan dan mengembalikan hasil eksekusi. Anda harus membaca data masukan dari aliran masukan dan menulis hasil eksekusi ke aliran keluaran.

  • POCO Handler

    Memungkinkan Anda menyesuaikan input dan output dalam tipe plain old class object (POCO).

Stream Handler

Contoh berikut memberikan kode contoh dari penanganan stream sederhana:
using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public async Task<Stream> StreamHandler(Stream masukan, IFcContext konteks)
        {
            IFcLogger logger = konteks.Logger;
            logger.LogInformation("Menangani permintaan: {0}", konteks.RequestId);
            MemoryStream salinan = new MemoryStream();
            await masukan.CopyToAsync(salinan);
            salinan.Seek(0, SeekOrigin.Begin);
            return salinan;
        }

        static void Main(string[] args){}
    }
}
Dalam kode contoh sebelumnya:
  • Nama ruang lingkup dan kelas

    Ruang lingkup adalah Example, nama kelas adalah Hello, dan nama metode adalah StreamHandler. Jika nama assembly adalah HelloFcApp, konfigurasi penanganannya adalah HelloFcApp::Example.Hello::StreamHandler.

  • Parameter masukan Stream

    Masukan ke penanganan. Tipe masukan untuk contoh ini adalah Stream.

  • (Opsional) Parameter IFcContext konteks

    Objek konteks yang berisi informasi tentang fungsi dan permintaan.

  • Task<Stream> respons

    Nilai yang dikembalikan, bertipe Stream.

POCO Handler

Contoh berikut memberikan kode contoh dari penanganan POCO sederhana:
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public class Produk
        {
            public string Id { get; set; }
            public string Deskripsi { get; set; }
        }

        // Serializer opsional. Jika tidak ditentukan, serializer default (berdasarkan JSON.Net) akan digunakan.
        // [FcSerializer(typeof(MySerialization))]
        public Produk PocoHandler(Produk produk, IFcContext konteks)
        {
            string Id = produk.Id;
            string Deskripsi = produk.Deskripsi;
            konteks.Logger.LogInformation("Id {0}, Deskripsi {1}", Id, Deskripsi);
            return produk;
        }

        static void Main(string[] args){}
    }
}
Selain objek Stream, POCO juga dapat digunakan sebagai parameter masukan dan keluaran. Jika POCO tidak menentukan objek serialisasi JSON tertentu, Function Compute menggunakan JSON.Net untuk melakukan serialisasi dan deserialisasi JSON pada objek tersebut. Dalam kode contoh sebelumnya:
  • Nama ruang lingkup dan kelas

    Ruang lingkup adalah Example, nama kelas adalah Hello, dan nama metode adalah PocoHandler. Jika nama assembly adalah HelloFcApp, konfigurasi penanganannya adalah HelloFcApp::Example.Hello::PocoHandler.

  • Produk produk parameter

    Masukan ke penanganan. Tipe masukan untuk contoh ini adalah Kelas Produk. Jika POCO tidak menentukan objek serialisasi JSON tertentu, Function Compute menggunakan JSON.Net untuk mendeserialisasi objek tersebut.

  • (Opsional) Parameter IFcContext konteks

    Objek konteks yang berisi informasi tentang fungsi dan permintaan.

  • Produk respons

    Nilai yang dikembalikan adalah tipe POCO Produk. Jika POCO tidak menentukan objek serialisasi JSON tertentu, Function Compute menggunakan JSON.Net untuk menserialisasi objek tersebut.

Serializer Kustom

Secara default, Function Compute menyediakan antarmuka serialisasi berbasis JSON .NET. Jika antarmuka serialisasi default tidak memenuhi persyaratan bisnis Anda, Anda dapat mengimplementasikan antarmuka serialisasi kustom berdasarkan antarmuka IFcSerializer dalam Aliyun.Serverless.Core.

public interface IFcSerializer
{
    T Deserialize<T>(Stream requestStream);
    void Serialize<T>(T response, Stream responseStream);
}      

Program Contoh

Pustaka resmi Function Compute mencakup program contoh yang menggunakan berbagai jenis dan antarmuka penanganan. Setiap program contoh mencakup metode untuk kompilasi dan penerapan yang mudah.