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:

Arsitektur Pemicu SignalR

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:
  • koneksi: Termasuk kejadian yang tersambung dan terputus
  • pesan: Menyertakan semua kejadian lain kecuali yang ada dalam kategori koneksi
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:
  • koneksi: Termasuk kejadian yang tersambung dan terputus
  • pesan: Menyertakan semua kejadian lain kecuali yang ada dalam kategori koneksi
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.

Portal Upstream

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. Kunci API

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

Langkah berikutnya