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);- 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
eventmasukan 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
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){}
}
}- Nama ruang lingkup dan kelas
Ruang lingkup adalah
Example, nama kelas adalahHello, dan nama metode adalahStreamHandler. Jika nama assembly adalahHelloFcApp, konfigurasi penanganannya adalahHelloFcApp::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
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){}
}
}- Nama ruang lingkup dan kelas
Ruang lingkup adalah
Example, nama kelas adalahHello, dan nama metode adalahPocoHandler. Jika nama assembly adalahHelloFcApp, konfigurasi penanganannya adalahHelloFcApp::Example.Hello::PocoHandler. Produk produkparameterMasukan 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.
ProdukresponsNilai 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
- dotnet3-blank-stream-event: menggunakan panggilan balik event dalam format stream.
- dotnet3-blank-poco-event: menggunakan panggilan balik event dalam format POCO.