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.
Referensi ini menjelaskan cara menangani peristiwa Web PubSub di Azure Functions.
Web PubSub adalah layanan yang dikelola Azure yang membantu pengembang dengan mudah membangun aplikasi web dengan fitur waktu nyata dan pola publish-subscribe.
| Perbuatan | Jenis |
|---|---|
| Menjalankan fungsi saat pesan berasal dari layanan | Pengikatan pemicu |
| Mengikat permintaan ke objek target di bawah pemicu HTTP untuk negosiasi dan permintaan upstram | Pengikatan masukan |
| Minta layanan melakukan tindakan | Pengikatan output |
Kode sumber | Paket | dokumentasi referensi API | Dokumentasi produk | Sampel
Tambahkan ke aplikasi fungsi Anda
Bekerja dengan pemicu dan pengikatan mengharuskan Anda mereferensikan paket yang sesuai. Paket NuGet digunakan untuk pustaka kelas .NET sementara bundel ekstensi digunakan untuk semua jenis aplikasi lainnya.
| Bahasa | Tambahkan dengan... |
|---|---|
| C# | Instal paket NuGet dan targetkan versi tertentu |
| Skrip-skrip JavaScript, Python, PowerShell, dan C# (hanya di portal Azure) | Gunakan bundel ekstensi ( disarankan), instal ekstensi secara eksplisit |
Konsep kunci
(1)-(2) WebPubSubConnection pengikatan input dengan HttpTrigger untuk menghasilkan koneksi klien.
(3)-(4) WebPubSubTrigger memicu pengikatan atau WebPubSubContext input pengikatan dengan HttpTrigger untuk menangani permintaan layanan.
(5)-(6) WebPubSub keluaran yang mengikat untuk meminta layanan melakukan sesuatu.
Pengikatan pemicu
Gunakan pemicu fungsi untuk menangani permintaan dari layanan Azure Web PubSub.
WebPubSubTrigger digunakan saat Anda perlu menangani permintaan dari sisi layanan. Pola titik akhir pemicu akan seperti di bawah ini yang harus diatur di sisi layanan Web PubSub (Portal: pengaturan -> penanganan aktivitas -> Templat URL). Dalam pola titik akhir, bagian kueri code=<API_KEY>DIPERLUKAN saat Anda menggunakan Aplikasi Fungsi Azure karena alasan keamanan. Kuncinya dapat ditemukan di portal Microsoft Azure. Temukan sumber daya aplikasi fungsi Anda dan navigasikan ke Functions ->Kunci aplikasi ->Kunci sistem ->webpubsub_extension setelah Anda menyebarkan aplikasi fungsi ke Azure. Meskipun, kunci ini tidak diperlukan ketika Anda bekerja dengan fungsi lokal.
<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>
Contoh
[FunctionName("WebPubSubTrigger")]
public static void Run(
[WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request, ILogger log)
{
log.LogInformation($"Request from: {request.ConnectionContext.UserId}");
log.LogInformation($"Request message data: {request.Data}");
log.LogInformation($"Request message dataType: {request.DataType}");
}
Pengikatan WebPubSubTrigger juga mendukung nilai pengembalian dalam sinkronisasi skenario, misalnya, sistem Connect dan peristiwa pengguna, saat server dapat memeriksa dan menolak permintaan klien, atau mengirim pesan lagsung ke pemanggil.
Connect peristiwa menghormati ConnectEventResponse dan EventErrorResponse, dan peristiwa pengguna menghormati UserEventResponse dan EventErrorResponse, jenis istirahat yang tidak cocok dengan skenario saat ini diabaikan. Dan jika EventErrorResponse dikembalikan, layanan akan menghilangkan koneksi klien.
[FunctionName("WebPubSubTriggerReturnValueFunction")]
public static UserEventResponse Run(
[WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] UserEventRequest request)
{
return request.CreateResponse(BinaryData.FromString("ack"), WebPubSubDataType.Text);
}
Atribut dan anotasi
Di pustaka kelas C#, gunakan atribut WebPubSubTrigger.
Berikut ini adalah atributWebPubSubTrigger dalam metode yang khas:
[FunctionName("WebPubSubTrigger")]
public static void Run([WebPubSubTrigger("<hub>", <WebPubSubEventType>, "<event-name>")]
WebPubSubConnectionContext context, ILogger log)
{
...
}
Untuk contoh lengkapnya, lihat contoh C#.
Konfigurasi
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
| Properti function.json | Properti atribut | Deskripsi |
|---|---|---|
| jenis | N/a | Wajib - harus diatur ke webPubSubTrigger. |
| arah | N/a | Wajib - harus diatur ke in. |
| nama | N/a | Diperlukan - nama variabel yang digunakan dalam kode fungsi untuk parameter yang menerima data peristiwa. |
| Hub | Pusat | Wajib - nilai harus disetel ke nama hub Web PubSub agar fungsi dapat dipicu. Kami mendukung pengaturan nilai dalam atribut sebagai prioritas yang lebih tinggi, atau dapat diatur dalam pengaturan aplikasi sebagai nilai global. |
| eventType | WebPubSubEventType | Wajib - nilai harus ditetapkan sebagai jenis pesan peristiwa agar fungsi dapat dipicu. Nilainya harus user atau system. |
| eventName | Nama Acara | Wajib - nilai harus ditetapkan sebagai peristiwa pesan agar fungsi dapat dipicu.
Untuk system jenis peristiwa, nama peristiwa harus dalam connect, , connecteddisconnected.
Untuk subprotokola yang ditentukan pengguna, nama peristiwanya adalah message.
Untuk subprotokola json.webpubsub.azure.v1.yang didukung sistem, nama peristiwa adalah nama peristiwa yang ditentukan pengguna. |
| koneksi | Koneksi | Opsional - nama pengaturan aplikasi atau kumpulan pengaturan yang menentukan layanan Azure Web PubSub upstream. Nilai digunakan untuk validasi tanda tangan. Dan nilai diselesaikan secara otomatis dengan pengaturan aplikasi "WebPubSubConnectionString" secara default. Dan null berarti validasi tidak diperlukan dan selalu berhasil. |
Penggunaan
Di C#, WebPubSubEventRequest adalah jenis parameter pengikatan yang dikenali, parameter lainnya terikat oleh nama parameter. Periksa tabel di bawah parameter dan jenis yang tersedia.
Dalam bahasa yang ditik lemah seperti JavaScript, name di function.json digunakan untuk mengikat objek pemicu mengenai tabel pemetaan di bawah ini. Dan hormati dataTypefunction.json untuk mengonversi pesan yang sesuai ketika name diatur ke data sebagai objek pengikatan untuk input pemicu. Semua parameter dapat dibaca dari context.bindingData.<BindingName> dan dikonversi JObject .
| Nama mengikat | Jenis Pengikatan Data | Deskripsi | Properti |
|---|---|---|---|
| permintaan | WebPubSubEventRequest |
Menjelaskan permintaan upstream | Properti berbeda dengan jenis peristiwa yang berbeda, termasuk kelas turunan ConnectEventRequest, ConnectedEventRequest, UserEventRequest, dan DisconnectedEventRequest |
| connectionContext | WebPubSubConnectionContext |
Informasi permintaan umum | EventType, EventName, Hub, ConnectionId, UserId, Headers, Asal, Tanda Tangan, Status |
| data |
BinaryData,string,,Stream,byte[] |
Meminta data pesan dari klien dalam peristiwa message pengguna |
- |
| Datatype | WebPubSubDataType |
Meminta dataType pesan, yang mendukung binary, , textjson |
- |
| klaim | IDictionary<string, string[]> |
Klaim Pengguna dalam permintaan sistem connect |
- |
| kueri | IDictionary<string, string[]> |
Kueri pengguna dalam permintaan sistem connect |
- |
| subrotokol | IList<string> |
Subprotokol yang tersedia di permintaan sistem connect |
- |
| sertifikat klien | IList<ClientCertificate> |
Daftar thumbprint sertifikat dari klien di permintaan sistem connect |
- |
| alasan | string |
Alasan dalam permintaan sistem disconnected |
- |
Penting
Di C#, beberapa jenis parameter yang didukung HARUS dimasukkan ke dalam yang pertama, yaitu request atau data bahwa selain jenis default BinaryData untuk membuat pengikatan fungsi dengan benar.
Mengembalikan respons
WebPubSubTrigger menghormati respons yang dikembalikan pelanggan untuk peristiwa connect sinkron dan peristiwa pengguna. Hanya respons yang cocok yang dikirim kembali ke layanan, jika tidak, respons tersebut diabaikan. Selain itu, objek pengembalia WebPubSubTrigger mendukung pengguna ke SetState() dan ClearStates() untuk mengelola metadata untuk koneksi. Dan ekstensi menggabungkan hasil dari nilai pengembalian dengan yang asli dari permintaan WebPubSubConnectionContext.States. Nilai dalam kunci yang ada ditimpa dan nilai dalam kunci baru ditambahkan.
| Jenis Hasil | Deskripsi | Properti |
|---|---|---|
ConnectEventResponse |
Tanggapan untuk connect acara |
Grup, Peran, UserId, Subprotokol |
UserEventResponse |
Respons untuk acara pengguna | DataType, Data |
EventErrorResponse |
Respons kesalahan untuk acara sinkronisasi | Kode, ErrorMessage |
*WebPubSubEventResponse |
Jenis respons dasar dari yang didukung yang digunakan untuk kasus pengembalian yang tidak pasti | - |
Pengikatan masukan
Ekstensi kami menyediakan dua pengikatan input yang menargetkan kebutuhan yang berbeda.
WebPubSubConnectionAgar klien dapat terhubung ke Layanan Azure Web PubSub, klien harus mengetahui URL titik akhir layanan dan token akses yang valid. Ikatan masukan
WebPubSubConnectionmenghasilkan informasi yang diperlukan, sehingga klien tidak perlu menangani pembuatan token ini sendiri. Karena token dibatasi waktu dan dapat digunakan untuk mengautentikasi pengguna tertentu ke koneksi, jangan menyimpan token atau membagikannya di antara klien. Pemicu HTTP yang bekerja dengan pengikatan input ini dapat digunakan bagi klien untuk mengambil informasi koneksi.WebPubSubContextSaat menggunakan Aplikasi Web Statis,
HttpTriggeradalah satu-satunya pemicu yang didukung dan di bawah skenario Web PubSub, kami menyediakanWebPubSubContextpengikatan input yang membantu pengguna membatalkan permintaan http upstream dari sisi layanan di bawah protokol Web PubSub. Jadi pelanggan bisa mendapatkan hasil serupa dibandingkan denganWebPubSubTriggeruntuk menangani fungsi dengan mudah. Lihat contoh di bawah. Saat digunakan denganHttpTrigger, pelanggan perlu mengonfigurasi url terbuka HttpTrigger di penanganan aktivitas yang sesuai.
Contoh - WebPubSubConnection
Contoh berikut menunjukkan fungsi C# yang memperoleh informasi koneksi Web PubSub menggunakan pengikatan input dan mengembalikannya melalui HTTP. Pada contoh di bawah ini, UserId dilewatkan melalui bagian kueri permintaan klien seperti ?userid={User-A}.
[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[WebPubSubConnection(Hub = "<hub>", UserId = "{query.userid}")] WebPubSubConnection connection)
{
return connection;
}
token yang diautentikasi
Jika fungsi dipicu oleh klien yang diautentikasi, Anda dapat menambahkan klaim ID pengguna ke token yang dihasilkan. Anda dapat dengan mudah menambahkan autentikasi ke aplikasi fungsi menggunakan Autentikasi App Service.
Autentikasi App Service menetapkan header HTTP bernama x-ms-client-principal-id dan x-ms-client-principal-name yang masing-masingnya berisi ID dan nama utama klien pengguna yang diautentikasi.
Anda dapat mengatur properti UserId dari pengikatan ke nilai dari salah satu header menggunakan ekspresi pengikatan: {headers.x-ms-client-principal-id} atau {headers.x-ms-client-principal-name}.
[FunctionName("WebPubSubConnectionInputBinding")]
public static WebPubSubConnection Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[WebPubSubConnection(Hub = "<hub>", UserId = "{headers.x-ms-client-principal-name}")] WebPubSubConnection connection)
{
return connection;
}
Catatan
Dibatasi oleh jenis parameter yang mengikat, tidak ada dukungan untuk cara meneruskan daftar atau array. WebPubSubConnection tidak sepenuhnya didukung dengan semua parameter yang dimiliki SDK server, terutama roles, serta mencakup groups dan expiresAfter. Jika pelanggan perlu menambahkan peran atau menunda membangun token akses dalam fungsi, disarankan untuk bekerja dengan SDK server untuk C#.
[FunctionName("WebPubSubConnectionCustomRoles")]
public static async Task<Uri> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req)
{
var serviceClient = new WebPubSubServiceClient(new Uri(endpoint), "<hub>", "<web-pubsub-connection-string>");
var userId = req.Query["userid"].FirstOrDefault();
// your method to get custom roles.
var roles = GetRoles(userId);
return await serviceClient.GetClientAccessUriAsync(TimeSpan.FromMinutes(5), userId, roles);
}
Contoh - WebPubSubContext
Contoh berikut menunjukkan fungsi C# yang memperoleh informasi permintaan upstream Web PubSub menggunakan pengikatan input di bawah jenis peristiwa connect dan mengembalikannya melalui HTTP.
[FunctionName("WebPubSubContextInputBinding")]
public static object Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[WebPubSubContext] WebPubSubContext wpsContext)
{
// in the case request is a preflight or invalid, directly return prebuild response by extension.
if (wpsContext.IsPreflight || wpsContext.HasError)
{
return wpsContext.Response;
}
var request = wpsContext.Request as ConnectEventRequest;
var response = new ConnectEventResponse
{
UserId = wpsContext.Request.ConnectionContext.UserId
};
return response;
}
Konfigurasi
WebPubSubConnection
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda tetapkan dalam file function.json dan WebPubSubConnection atribut .
| Properti function.json | Properti atribut | Deskripsi |
|---|---|---|
| jenis | N/a | Harus disetel ke webPubSubConnection |
| arah | N/a | Harus disetel ke in |
| nama | N/a | Nama variabel yang digunakan dalam kode fungsi untuk objek pengikatan koneksi input. |
| Hub | Pusat | Wajib - Nilai harus diatur ke nama hub Web PubSub agar fungsi dapat dipicu. Kami mendukung pengaturan nilai dalam atribut sebagai prioritas yang lebih tinggi, atau dapat diatur dalam pengaturan aplikasi sebagai nilai global. |
| userId | UserId | Opsional - nilai klaim pengenal pengguna ditetapkan dalam token kunci akses. |
| koneksi | Koneksi | Diperlukan - Nama pengaturan aplikasi yang berisi string koneksi Layanan Web PubSub (defaultnya adalah "WebPubSubConnectionString"). |
WebPubSubContext
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda tetapkan di file functions.json dan atribut WebPubSubContext.
| Properti function.json | Properti atribut | Deskripsi |
|---|---|---|
| jenis | N/a | Harus diatur ke webPubSubContext. |
| arah | N/a | Harus diatur ke in. |
| nama | N/a | Nama variabel yang digunakan dalam kode fungsi untuk input permintaan Web PubSub. |
| koneksi | Koneksi | Opsional - nama pengaturan aplikasi atau kumpulan pengaturan yang menentukan layanan Azure Web PubSub upstream. Nilai digunakan untuk Perlindungan Penyalahgunaan dan validasi Tanda Tangan. Nilai diselesaikan secara otomatis dengan "WebPubSubConnectionString" secara default. Dan null berarti validasi tidak diperlukan dan selalu berhasil. |
Penggunaan
WebPubSubConnection
WebPubSubConnection menyediakan properti di bawah ini.
| Nama mengikat | Jenis Pengikatan Data | Deskripsi |
|---|---|---|
| BaseUri | Uri | Uri koneksi klien Web PubSub. |
| Uri | Uri | Uri Absolut dari koneksi Web PubSub, berisi AccessToken yang dibuat berdasarkan permintaan. |
| AccessToken | string | Menghasilkan AccessToken berdasarkan permintaan UserId dan informasi layanan. |
WebPubSubContext
WebPubSubContext menyediakan properti di bawah ini.
| Nama mengikat | Jenis Pengikatan Data | Deskripsi | Properti |
|---|---|---|---|
| permintaan | WebPubSubEventRequest |
Permintaan dari klien, lihat tabel di bawah ini untuk detailnya. |
WebPubSubConnectionContext dari header permintaan dan properti lainnya yang diseralisasi dari badan permintaan menjelaskan permintaan, misalnya, Reason untuk DisconnectedEventRequest. |
| respons | HttpResponseMessage |
Ekstensi membangun respons terutama untuk AbuseProtection dan kasus kesalahan. |
- |
| ErrorMessage | string | Jelaskan detail kesalahan saat memproses permintaan upstream. | - |
| terjadiKesalahan | bool | Tandai dengan bendera untuk menunjukkan apakah itu permintaan upstream Web PubSub yang valid. | - |
| isPreflight | bool | Tandai dengan bendera untuk menunjukkan apakah itu permintaan prapenerbangan AbuseProtection. |
- |
Untuk WebPubSubEventRequest, dideserialisasikan ke kelas berbeda yang memberikan informasi berbeda tentang skenario permintaan. Untuk PreflightRequest atau kasus yang tidak valid, pengguna dapat memeriksa bendera IsPreflight dan HasError untuk mengetahuinya. Disarankan untuk mengembalikan respons build sistem WebPubSubContext.Response secara langsung, atau pelanggan dapat mencatat kesalahan sesuai permintaan. Dalam skenario yang berbeda, pelanggan dapat membaca properti permintaan seperti di bawah ini.
| Kelas Turunan | Deskripsi | Properti |
|---|---|---|
PreflightRequest |
Digunakan di AbuseProtection bila IsPreflighttrue |
- |
ConnectEventRequest |
Digunakan dalam jenis peristiwa sistem Connect |
Klaim, Kueri, Subprotokol, Sertifikat Klien |
ConnectedEventRequest |
Digunakan dalam jenis peristiwa sistem Connected |
- |
UserEventRequest |
Digunakan dalam jenis peristiwa pengguna | Data, Tipe Data |
DisconnectedEventRequest |
Digunakan dalam jenis peristiwa sistem Disconnected |
Alasan |
Catatan
Meskipun WebPubSubContext adalah pengikatan input yang menyediakan metode deserialisasi permintaan serupa di bawah HttpTrigger jika dibandingkan dengan WebPubSubTrigger, terdapat batasan; yaitu, status koneksi setelah penggabungan tidak didukung. Respons pengembalian masih dihormati oleh sisi layanan, tetapi pengguna harus membangun respons itu sendiri. Jika pengguna perlu mengatur respons peristiwa, Anda harus mengembalikan HttpResponseMessage berisi ConnectEventResponse atau pesan untuk peristiwa pengguna sebagai isi respons dan menempatkan status koneksi dengan kunci ce-connectionstate di header respons.
Pengikatan output
Gunakan pengikatan output Web PubSub untuk memanggil layanan Azure Web PubSub untuk melakukan sesuatu. Anda dapat menyiarkan pesan ke:
- Semua klien terhubung
- Klien tersambung diautentikasi ke pengguna tertentu
- Klien yang terhubung bergabung dalam grup tertentu
- Koneksi klien tertentu
Pengikatan output juga memungkinkan Anda untuk mengelola klien dan grup, serta memberikan/mencabut izin yang menargetkan connectionId dengan grup.
- Tambahkan koneksi ke grup
- Menambahkan pengguna ke grup
- Hapus koneksi dari grup
- Menghapus pengguna dari grup
- Hapus pengguna dari semua grup
- Tutup semua koneksi klien
- Tutup koneksi klien tertentu
- Tutup koneksi dalam grup
- Berikan izin koneksi
- Cabut izin koneksi
Untuk informasi tentang pengaturan dan detail konfigurasi, lihat gambaran umum.
Contoh
[FunctionName("WebPubSubOutputBinding")]
public static async Task RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
[WebPubSub(Hub = "<hub>")] IAsyncCollector<WebPubSubAction> actions)
{
await actions.AddAsync(WebPubSubAction.CreateSendToAllAction("Hello Web PubSub!", WebPubSubDataType.Text));
}
WebPubsubaction
WebPubSubAction adalah jenis abstrak dasar dari pengikatan keluaran. Jenis turunan mewakili server tindakan ingin layanan panggil.
Dalam bahasa C #, kami menyediakan beberapa metode statis di bawah WebPubSubAction untuk membantu menemukan tindakan yang tersedia. Misalnya, pengguna dapat membuat SendToAllAction dengan memanggil WebPubSubAction.CreateSendToAllAction().
| Kelas Turunan | Properti |
|---|---|
SendToAllAction |
Data, DataType, Dikecualikan |
SendToGroupAction |
Grup, Data, DataType, Dikecualikan |
SendToUserAction |
UserId, Data, JenisData |
SendToConnectionAction |
ConnectionId, Data, JenisData |
AddUserToGroupAction |
UserId, Grup |
RemoveUserFromGroupAction |
UserId, Grup |
RemoveUserFromAllGroupsAction |
UserId |
AddConnectionToGroupAction |
ConnectionId, Grup |
RemoveConnectionFromGroupAction |
ConnectionId, Grup |
CloseAllConnectionsAction |
Dikecualikan, Alasan |
CloseClientConnectionAction |
ConnectionId, Alasan |
CloseGroupConnectionsAction |
Grup, Dikecualikan, Alasan |
GrantPermissionAction |
ConnectionId, Izin, TargetName |
RevokePermissionAction |
ConnectionId, Izin, TargetName |
Konfigurasi
WebPubSub
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda tetapkan dalam file function.json dan WebPubSub atribut .
| Properti function.json | Properti atribut | Deskripsi |
|---|---|---|
| jenis | N/a | Harus disetel ke webPubSub |
| arah | N/a | Harus disetel ke out |
| nama | N/a | Nama variabel yang digunakan dalam kode fungsi untuk objek pengikatan keluaran. |
| Hub | Pusat | Nilai harus disetel ke nama hub Web PubSub agar fungsi dapat dipicu. Kami mendukung pengaturan nilai dalam atribut sebagai prioritas yang lebih tinggi, atau dapat diatur dalam pengaturan aplikasi sebagai nilai global. |
| koneksi | Koneksi | Nama pengaturan aplikasi yang berisi string koneksi Layanan Web PubSub (defaultnya adalah "WebPubSubConnectionString"). |
Pemecahan Masalah
Menyiapkan pembuatan log konsol
Anda juga dapat dengan mudah mengaktifkan pencatatan log konsol jika Anda ingin menggali lebih dalam permintaan yang Anda buat terhadap layanan tersebut.
Langkah berikutnya
Gunakan sumber daya ini untuk mulai membangun aplikasi Anda sendiri: