Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan pengikatan pemicu SignalR untuk merespons pesan yang dikirim dari Azure SignalR Service. Ketika fungsi dipicu, pesan yang diteruskan ke fungsi dipilah sebagai objek json.
Dalam mode serverless SignalR Service, SignalR Service menggunakan fitur Upstream untuk mengirim pesan dari klien ke Function App. Dan Function App menggunakan pengikatan pemicu SignalR Service untuk menangani pesan-pesan ini. Arsitektur umum ditunjukkan di bawah ini:
Untuk informasi tentang pengaturan dan detail konfigurasi, lihat gambaran umum.
Contoh
Anda dapat membuat fungsi C# dengan menggunakan salah satu mode C# berikut:
- Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi dukungan jangka panjang (LTS) dan non-LTS untuk .NET dan .NET Framework.
- Model dalam proses: Fungsi C# terkompilasi yang berjalan dalam proses yang sama dengan runtime Azure Functions.
- Skrip C#: Digunakan terutama saat Anda membuat fungsi C# di portal Azure.
Penting
Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.
Contoh berikut menunjukkan fungsi C# yang menerima peristiwa pesan dari klien dan mencatat konten pesan.
[Function(nameof(OnClientMessage))]
public static void OnClientMessage(
[SignalRTrigger("Hub", "messages", "sendMessage", "content", ConnectionStringSetting = "SignalRConnection")]
SignalRInvocationContext invocationContext, string content, FunctionContext functionContext)
{
var logger = functionContext.GetLogger(nameof(OnClientMessage));
logger.LogInformation("Connection {connectionId} sent a message. Message content: {content}", invocationContext.ConnectionId, content);
}
Penting
Model berbasis kelas pengikatan SignalR Service di pekerja terisolasi C# tidak mengoptimalkan cara Anda menulis pemicu SignalR karena keterbatasan model pekerja C#. Untuk informasi selengkapnya tentang model berbasis kelas, lihat Model berbasis kelas.
Pemicu SignalR saat ini tidak didukung untuk Java.
Berikut data pengikatan dalam file function.json:
{
"type": "signalRTrigger",
"name": "invocation",
"hubName": "hubName1",
"category": "messages",
"event": "SendMessage",
"parameterNames": [
"message"
],
"direction": "in"
}
app.generic("function1",
{
trigger: { "type": "signalRTrigger", "name": "invocation", "direction": "in", "hubName": "hubName1", "event": "SendMessage", "category": "messages" },
handler: (triggerInput, context) => {
context.log(`Receive ${triggerInput.Arguments[0]} from ${triggerInput.ConnectionId}.`)
}
})
Contoh PowerShell lengkap sedang tertunda.
Berikut adalah kode Python:
import logging
import json
import azure.functions as func
def main(invocation) -> None:
invocation_json = json.loads(invocation)
logging.info("Receive {0} from {1}".format(invocation_json['Arguments'][0], invocation_json['ConnectionId']))
Atribut
Pustaka C# proses dalam proses dan terisolasi menggunakan SignalRTrigger atribut untuk menentukan fungsi . Sebagai gantinya, skrip C# menggunakan file konfigurasi function.json.
Tabel berikut menjelaskan properti atribut SignalRTrigger.
| Properti atribut | Deskripsi |
|---|---|
| HubName | Nilai ini harus disetel ke nama hub SignalR agar fungsi dipicu. |
| Golongan | Nilai ini harus ditetapkan sebagai kategori pesan agar fungsi dipicu. Kategori bisa menjadi salah satu nilai berikut:
|
| Kejadian | Nilai ini harus ditetapkan sebagai kategori pesan agar fungsi dipicu. Untuk kategori pesan, kejadian adalah target dalam pesan pemanggilan yang dikirim klien. Untuk kategori koneksi, hanya tersambung dan terputus yang digunakan. |
| ParameterNames | (Opsional) Daftar nama yang mengikat parameter. |
| ConnectionStringSetting | Nama pengaturan aplikasi atau kumpulan pengaturan yang berisi string koneksi SignalR Service, yang default ke AzureSignalRConnectionString. |
Anotasi
Saat ini tidak ada anotasi Java yang didukung untuk pemicu SignalR.
Konfigurasi
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
| Properti function.json | Deskripsi |
|---|---|
| jenis | Harus diatur ke SignalRTrigger. |
| arah | Harus diatur ke in. |
| nama | Nama variabel yang digunakan dalam kode fungsi untuk objek konteks pemanggilan pemicu. |
| hubName | Nilai ini harus disetel ke nama hub SignalR agar fungsi dipicu. |
| kategori | Nilai ini harus ditetapkan sebagai kategori pesan agar fungsi dipicu. Kategori bisa menjadi salah satu nilai berikut:
|
| peristiwa | Nilai ini harus ditetapkan sebagai kategori pesan agar fungsi dipicu. Untuk kategori pesan, kejadian adalah target dalam pesan pemanggilan yang dikirim klien. Untuk kategori koneksi, hanya tersambung dan terputus yang digunakan. |
| parameterNames | (Opsional) Daftar nama yang mengikat parameter. |
| connectionStringSetting | Nama pengaturan aplikasi atau kumpulan pengaturan yang berisi string koneksi SignalR Service, yang default ke AzureSignalRConnectionString. |
Lihat Bagian contoh untuk contoh lengkapnya.
Penggunaan
Koneksi berbasis identitas terkelola
Untuk keamanan yang optimal, aplikasi fungsi Anda harus menggunakan identitas terkelola saat menyambungkan ke layanan Azure SignalR alih-alih menggunakan string koneksi, yang berisi kunci rahasia bersama. Untuk informasi selengkapnya, lihat Mengotorisasi permintaan ke sumber daya Azure SignalR Service dengan identitas terkelola Microsoft Entra.
Payload
Jenis input pemicu dinyatakan sebagai InvocationContext atau jenis kustom. Jika Anda memilih InvocationContext, Anda mendapatkan akses penuh ke konten permintaan. Untuk jenis kustom, runtime mencoba mengurai isi permintaan JSON untuk mengatur properti objek.
KonteksPemanggilan
InvocationContext berisi semua konten dalam pesan yang dikirim dari layanan SignalR, yang mencakup properti berikut:
| Properti | Deskripsi |
|---|---|
| Argumen | Tersedia untuk kategori pesan. Berisi argumen dalam pesan pemanggilan |
| Kesalahan | Tersedia untuk kejadian terputus. Bisa Kosong jika sambungan ditutup tanpa galat, atau memuat pesan galat. |
| Pusat | Nama hub tempat pesan berada. |
| Kategori | Kategori pesan. |
| Kejadian | Kejadian pesan. |
| ConnectionId | ID koneksi klien yang mengirim pesan. |
| UserId | Identitas pengguna klien yang mengirim pesan. |
| Header | Header permintaan. |
| Kueri | Kueri permintaan saat klien tersambung ke layanan. |
| Klaim | Klaim klien. |
Menggunakan ParameterNames
Properti ParameterNames di SignalRTrigger memungkinkan Anda mengikat argumen pesan pemanggilan ke parameter fungsi. Anda dapat menggunakan nama yang Anda tentukan sebagai bagian dari ekspresi pengikatan dalam pengikatan lain atau sebagai parameter dalam kode Anda. Itu memberi Anda cara yang lebih nyaman untuk mengakses argumen InvocationContext.
Anggaplah Anda memiliki klien JavaScript SignalR yang mencoba memanggil metode broadcast di Azure Function dengan dua argumen message1, message2.
await connection.invoke("broadcast", message1, message2);
Setelah Anda mengatur parameterNames, nama yang Anda tentukan sesuai dengan argumen yang dikirim di sisi klien.
[SignalRTrigger(parameterNames: new string[] {"arg1, arg2"})]
Kemudian, arg1 berisi konten message1, dan arg2 berisi konten message2.
ParameterNames pertimbangan
Untuk parameter yang mengikat, urutannya penting. Jika Anda menggunakan ParameterNames, urutan di ParameterNames cocok dengan urutan argumen yang Anda panggil di klien. Jika Anda menggunakan atribut [SignalRParameter] di C#, urutan argumen dalam metode Azure Function cocok dengan urutan argumen di klien.
ParameterNames atribut [SignalRParameter]dan tidak dapat digunakan pada saat yang sama, atau Anda akan mendapatkan pengecualian.
Integrasi SignalR Service
SignalR Service memerlukan URL untuk mengakses Function App saat Anda menggunakan pengikatan pemicu SignalR Service. URL harus dikonfigurasi di Pengaturan Upstream pada sisi SignalR Service.
Saat menggunakan pemicu SignalR Service, URL dapat sederhana dan diformat sebagai berikut:
<Function_App_URL>/runtime/webhooks/signalr?code=<API_KEY>
Function_App_URL dapat ditemukan di halaman Gambaran Umum Aplikasi Fungsi dan API_KEY dihasilkan oleh Azure Function. Anda bisa mendapatkan API_KEY dari signalr_extension dalam bilah Kunci aplikasi dari Function App.
Jika Anda ingin menggunakan lebih dari satu Function App bersama dengan satu SignalR Service, upstream juga dapat mendukung aturan perutean yang kompleks. Temukan detail selengkapnya di Pengaturan upstream.
Sampel langkah demi langkah
Anda dapat mengikuti sampel di GitHub untuk menyebarkan ruang obrolan di Function App dengan pengikatan pemicu SignalR Service dan fitur upstream: Sampel ruang obrolan dua arah