Scaleout SignalR dengan SQL Server
oleh Patrick Fletcher
Peringatan
Dokumentasi ini bukan untuk versi terbaru SignalR. Lihat ASP.NET Core SignalR.
Versi perangkat lunak yang digunakan dalam topik ini
- Visual Studio 2013
- .NET 4.5
- SignalR versi 2
Versi sebelumnya dari topik ini
Untuk informasi tentang versi SignalR yang lebih lama, lihat SignalR Versi Lama.
Pertanyaan dan komentar
Silakan tinggalkan umpan balik tentang bagaimana Anda menyukai tutorial ini dan apa yang dapat kami tingkatkan di komentar di bagian bawah halaman. Jika Anda memiliki pertanyaan yang tidak terkait langsung dengan tutorial, Anda dapat mempostingnya ke forum ASP.NET SignalR atau StackOverflow.com.
Dalam tutorial ini, Anda akan menggunakan SQL Server untuk mendistribusikan pesan di seluruh aplikasi SignalR yang disebarkan dalam dua instans IIS terpisah. Anda juga dapat menjalankan tutorial ini pada satu mesin uji, tetapi untuk mendapatkan efek penuh, Anda perlu menyebarkan aplikasi SignalR ke dua server atau lebih. Anda juga harus menginstal SQL Server di salah satu server, atau di server khusus terpisah. Opsi lain adalah menjalankan tutorial menggunakan VM di Azure.
Prasyarat
Microsoft SQL Server 2005 atau yang lebih baru. Backplane mendukung edisi desktop dan server SQL Server. Ini tidak mendukung SQL Server Compact Edition atau Azure SQL Database. (Jika aplikasi Anda dihosting di Azure, pertimbangkan backplane Bus Layanan sebagai gantinya.)
Gambaran Umum
Sebelum kita sampai ke tutorial terperinci, berikut adalah gambaran umum singkat tentang apa yang akan Anda lakukan.
Buat database kosong baru. Backplane akan membuat tabel yang diperlukan dalam database ini.
Tambahkan paket NuGet ini ke aplikasi Anda:
Membuat aplikasi SignalR.
Tambahkan kode berikut ke Startup.cs untuk mengonfigurasi backplane:
public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here string sqlConnectionString = "Connecton string to your SQL DB"; GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString); app.MapSignalR(); } }
Kode ini mengonfigurasi backplane dengan nilai default untuk TableCount dan MaxQueueLength. Untuk informasi tentang mengubah nilai-nilai ini, lihat Performa SignalR: Metrik Scaleout.
Mengonfigurasi Database
Tentukan apakah aplikasi akan menggunakan autentikasi Windows atau autentikasi SQL Server untuk mengakses database. Terlepas dari itu, pastikan pengguna database memiliki izin untuk masuk, membuat skema, dan membuat tabel.
Buat database baru untuk digunakan backplane. Anda bisa memberikan nama apa pun pada database. Anda tidak perlu membuat tabel apa pun di database; backplane akan membuat tabel yang diperlukan.
Aktifkan Service Broker
Disarankan untuk mengaktifkan Service Broker untuk database backplane. Service Broker menyediakan dukungan asli untuk olahpesan dan antrean dalam SQL Server, yang memungkinkan backplane menerima pembaruan secara lebih efisien. (Namun, backplane juga berfungsi tanpa Service Broker.)
Untuk memeriksa apakah Service Broker diaktifkan, kueri kolom is_broker_enabled dalam tampilan katalog sys.databases .
SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]
Untuk mengaktifkan Service Broker, gunakan kueri SQL berikut:
ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER
Catatan
Jika kueri ini tampak mengalami kebuntuan, pastikan tidak ada aplikasi yang terhubung ke DB.
Jika Anda telah mengaktifkan pelacakan, jejak juga akan menunjukkan apakah Service Broker diaktifkan.
Membuat Aplikasi SignalR
Buat aplikasi SignalR dengan mengikuti salah satu tutorial berikut:
Selanjutnya, kita akan memodifikasi aplikasi obrolan untuk mendukung peluasan skala dengan SQL Server. Pertama, tambahkan paket SignalR.SqlServer NuGet ke proyek Anda. Di Visual Studio, dari menu Alat , pilih NuGet Package Manager, lalu pilih Package Manager Console. Di jendela Konsol Manajer Paket, masukkan perintah berikut:
Install-Package Microsoft.AspNet.SignalR.SqlServer
Selanjutnya, buka file Startup.cs. Tambahkan kode berikut ke metode Configure:
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
string sqlConnectionString = "Connecton string to your SQL DB";
GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
app.MapSignalR();
}
}
Menyebarkan dan Menjalankan Aplikasi
Siapkan instans Windows Server Anda untuk menyebarkan aplikasi SignalR.
Tambahkan peran IIS. Sertakan fitur "Pengembangan Aplikasi", termasuk Protokol WebSocket.
Sertakan juga Layanan Manajemen (tercantum di bawah "Alat Manajemen").
Instal Web Deploy 3.0. Saat Anda menjalankan IIS Manager, ia akan meminta Anda untuk menginstal Microsoft Web Platform, atau Anda dapat mengunduh alat penginstal. Di Penginstal Platform, cari Web Deploy dan instal Web Deploy 3.0
Periksa apakah Layanan Manajemen Web sedang berjalan. Jika tidak, mulai layanan. (Jika Anda tidak melihat Layanan Manajemen Web dalam daftar layanan Windows, pastikan Anda menginstal Layanan Manajemen saat menambahkan peran IIS.)
Terakhir, buka port 8172 untuk TCP. Ini adalah port yang digunakan alat Web Deploy.
Sekarang Anda siap untuk menyebarkan proyek Visual Studio dari komputer pengembangan Anda ke server. Di Penjelajah Solusi, klik kanan solusi dan klik Terbitkan.
Untuk dokumentasi selengkapnya tentang penyebaran web, lihat Peta Konten Penyebaran Web untuk Visual Studio dan ASP.NET.
Jika Anda menyebarkan aplikasi ke dua server, Anda dapat membuka setiap instans di jendela browser terpisah dan melihat bahwa mereka masing-masing menerima pesan SignalR dari yang lain. (Tentu saja, di lingkungan produksi, kedua server akan duduk di belakang load balancer.)
Setelah menjalankan aplikasi, Anda dapat melihat bahwa SignalR telah secara otomatis membuat tabel dalam database:
SignalR mengelola tabel. Selama aplikasi Anda disebarkan, jangan hapus baris, ubah tabel, dan sebagainya.