Pengikatan input SignalR Service untuk Azure Functions
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
Fungsi C# dapat dibuat 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 LTS dan non-LTS .NET dan .NET Framework.
- Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime 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 ${context.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 yang berisi string koneksi SignalR Service, defaultnya adalah 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. |
category | Nilai ini harus ditetapkan sebagai kategori pesan agar fungsi dipicu. Kategori bisa menjadi salah satu nilai berikut:
|
event | 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 yang berisi string koneksi SignalR Service, defaultnya adalah AzureSignalRConnectionString . |
Lihat Bagian contoh untuk contoh lengkapnya.
Penggunaan
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.
InvocationContext
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. |
Hub | 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