Bagikan melalui


Perbedaan antara ASP.NET SignalR dan ASP.NET Core SignalR

ASP.NET Core SignalR tidak kompatibel dengan klien atau server untuk ASP.NET SignalR. Artikel ini merinci fitur yang telah dihapus atau diubah di ASP.NET Core SignalR.

Cara mengidentifikasi SignalR versi

ASP.NET SignalR ASP.NET Core SignalR
Paket NuGet Server Microsoft.AspNet.SignalR Tidak ada. Disertakan dalam kerangka kerja bersama Microsoft.AspNetCore.App .
Paket NuGet Klien Microsoft.AspNet.SignalR. Klien
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klien
Paket npm klien JavaScript signalr @microsoft/signalr
Klien Java Repositori GitHub (tidak digunakan lagi) Paket Maven com.microsoft.signalr
Jenis aplikasi server ASP.NET (System.Web) atau OWIN Self-Host Inti ASP.NET
Platform server yang didukung .NET Framework 4.5 atau yang lebih baru .NET Core 3.0 atau yang lebih baru
ASP.NET SignalR ASP.NET Core SignalR
Paket NuGet Server Microsoft.AspNet.SignalR Microsoft.AspNetCore.App (.NET Core)
Microsoft.AspNetCore.SignalR (.NET Framework)
Paket NuGet Klien Microsoft.AspNet.SignalR. Klien
Microsoft.AspNet.SignalR.JS
Microsoft.AspNetCore.SignalR. Klien
Paket npm klien JavaScript signalr @aspnet/signalr
Klien Java Repositori GitHub (tidak digunakan lagi) Paket Maven com.microsoft.signalr
Jenis aplikasi server ASP.NET (System.Web) atau OWIN Self-Host Inti ASP.NET
Platform server yang didukung .NET Framework 4.5 atau yang lebih baru .NET Framework 4.6.1 atau yang lebih baru
.NET Core 2.1 atau yang terbaru

Perbedaan fitur

Koneksi ulang otomatis

Dalam ASP.NET SignalR:

  • Secara default, SignalR upaya untuk menyambungkan kembali ke server jika koneksi terputus.

Dalam ASP.NET Core SignalR:

  • Koneksi ulang otomatis ikut serta dengan klien .NET dan klien JavaScript:
HubConnection connection = new HubConnectionBuilder()
    .WithUrl(new Uri("http://127.0.0.1:5000/chathub"))
    .WithAutomaticReconnect()
    .Build();
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .withAutomaticReconnect()
    .build();

Sebelum ASP.NET Core 3.0, SignalR tidak mendukung koneksi ulang otomatis. Jika klien terputus, pengguna harus secara eksplisit memulai koneksi baru untuk menyambungkan kembali. Dalam ASP.NET SignalR, SignalR upaya untuk menyambungkan kembali ke server jika koneksi terputus.

Dukungan protokol

ASP.NET Core SignalR mendukung JSON, serta protokol biner baru berdasarkan MessagePack. Selain itu, protokol kustom dapat dibuat.

Transportasi

Transportasi Forever Frame tidak didukung di ASP.NET Core SignalR.

Perbedaan pada server

Pustaka sisi server ASP.NET Core SignalR disertakan dalam Microsoft.AspNetCore.App, yang digunakan dalam templat ASP.NET Core Web Application untuk Razor proyek MVC dan .

ASP.NET Core SignalR adalah middleware Core ASP.NET. Ini harus dikonfigurasi dengan memanggil AddSignalR di Startup.ConfigureServices.

services.AddSignalR()

Untuk mengonfigurasi perutean, petakan rute ke hub di dalam UseEndpoints panggilan metode dalam Startup.Configure metode .

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<ChatHub>("/hub");
});

Untuk mengonfigurasi perutean, petakan rute ke hub di dalam UseSignalR panggilan metode dalam Startup.Configure metode .

app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hub");
});

Sesi lengket

Model penskalaan untuk ASP.NET SignalR memungkinkan klien untuk menyambungkan kembali dan mengirim pesan ke server apa pun di farm. Di ASP.NET Core SignalR, klien harus berinteraksi dengan server yang sama selama durasi koneksi. Untuk peluasan skala menggunakan Redis, itu berarti sesi lengket diperlukan. Untuk penskalaan menggunakan Azure SignalR Service, sesi lengket tidak diperlukan karena layanan menangani koneksi ke klien.

Hub tunggal per koneksi

Di ASP.NET Core SignalR, model koneksi telah disederhanakan. Koneksi dibuat langsung ke satu hub, bukan satu koneksi yang digunakan untuk berbagi akses ke beberapa hub.

Streaming

ASP.NET Core SignalR sekarang mendukung data streaming dari hub ke klien.

Provinsi

Kemampuan untuk melewati status arbitrer antara klien dan hub (sering disebut HubState) telah dihapus, serta dukungan untuk pesan kemajuan. Tidak ada mitra proksi hub saat ini.

Penghapusan PersistentConnection

Di ASP.NET Core SignalR, kelas PersistentConnection telah dihapus.

GlobalHost

ASP.NET Core memiliki injeksi dependensi (DI) yang terpasang dalam kerangka kerja. Layanan dapat menggunakan DI untuk mengakses HubContext. Objek GlobalHost yang digunakan dalam ASP.NET SignalR untuk mendapatkan HubContext tidak ada di ASP.NET Core SignalR.

HubPipeline

ASP.NET Core SignalR tidak memiliki dukungan untuk HubPipeline modul.

Perbedaan pada klien

TypeScript

Klien ASP.NET Core SignalR ditulis dalam TypeScript. Anda dapat menulis di JavaScript atau TypeScript saat menggunakan klien JavaScript.

Klien JavaScript dihosting di npm

Dalam versi ASP.NET, klien JavaScript diperoleh melalui paket NuGet di Visual Studio. Dalam versi ASP.NET Core, @microsoft/signalr paket npm berisi pustaka JavaScript. Paket ini tidak disertakan dalam templat ASP.NET Core Web Application . Gunakan npm untuk mendapatkan dan menginstal @microsoft/signalr paket npm.

npm init -y
npm install @microsoft/signalr

Dalam versi ASP.NET, klien JavaScript diperoleh melalui paket NuGet di Visual Studio. Dalam versi ASP.NET Core, @aspnet/signalr paket npm berisi pustaka JavaScript. Paket ini tidak disertakan dalam templat ASP.NET Core Web Application . Gunakan npm untuk mendapatkan dan menginstal @aspnet/signalr paket npm.

npm init -y
npm install @aspnet/signalr

jQuery

Dependensi pada jQuery telah dihapus, namun proyek masih dapat menggunakan jQuery.

Dukungan Internet Explorer

ASP.NET Core SignalR tidak mendukung Microsoft Internet Explorer, sedangkan ASP.NET SignalR mendukung Microsoft Internet Explorer 8 atau yang lebih baru. Untuk informasi selengkapnya, lihat platform yang didukung ASP.NET CoreSignalR.

Sintaks metode klien JavaScript

Sintaks JavaScript telah berubah dari versi ASP.NET .SignalR Daripada menggunakan $connection objek, buat koneksi menggunakan HUBConnectionBuilder API.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Gunakan metode on untuk menentukan metode klien yang dapat dipanggil hub.

Sintaks JavaScript telah berubah dari versi ASP.NET .SignalR Daripada menggunakan $connection objek, buat koneksi menggunakan HUBConnectionBuilder API.

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub")
    .build();

Gunakan metode on untuk menentukan metode klien yang dapat dipanggil hub.

connection.on("ReceiveMessage", (user, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = `${user} says ${msg}`;
    console.log(encodedMsg);
});

Setelah membuat metode klien, mulai koneksi hub. Rantai metode tangkapan untuk mencatat atau menangani kesalahan.

connection.start().catch(err => console.error(err));

Proksi hub

Proksi hub tidak lagi dibuat secara otomatis. Sebagai gantinya, nama metode diteruskan ke API pemanggilan sebagai string.

Proksi hub tidak lagi dibuat secara otomatis. Sebagai gantinya, nama metode diteruskan ke API pemanggilan sebagai string.

.NET dan klien lainnya

Microsoft.AspNetCore.SignalR. Paket NuGet klien berisi pustaka klien .NET untuk ASP.NET Core SignalR.

HubConnectionBuilder Gunakan untuk membuat dan membangun instans koneksi ke hub.

connection = new HubConnectionBuilder()
    .WithUrl("url")
    .Build();

Perbedaan skala

SignalR ASP.NET mendukung SQL Server dan Redis. ASP.NET Core SignalR mendukung Azure SignalR Service dan Redis.

ASP.NET

Inti ASP.NET

Sumber Daya Tambahan: