Bagikan melalui


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

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.

Diagram yang memperlihatkan panah dari S Q L Server ke V M ke komputer. Satu panah berlabel Pembaruan dimulai pada V M dan masuk ke S Q L Server.

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.

  1. Buat database kosong baru. Backplane akan membuat tabel yang diperlukan dalam database ini.

  2. Tambahkan paket NuGet ini ke aplikasi Anda:

  3. Membuat aplikasi SignalR.

  4. 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.

Cuplikan layar kotak dialog Object Explorer. Folder berlabel Database dipilih.

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]

Cuplikan layar jendela yang menampilkan tampilan katalog database titik sys.

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.

Cuplikan layar yang memperlihatkan kotak dialog Wizard Tambahkan Peran dan Fitur. Peran Server dan Protokol WebSocket dipilih.

Sertakan juga Layanan Manajemen (tercantum di bawah "Alat Manajemen").

Cuplikan layar yang memperlihatkan kotak dialog Wizard Tambahkan Peran dan Fitur. Peran Server dan Layanan Manajemen dipilih.

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

Cuplikan layar dengan penyebaran web 3 poin 0 dipilih dalam hasil pencarian.

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.)

Cuplikan layar dua jendela browser terbuka memperlihatkan aplikasi yang disebarkan ke dua server.

Setelah menjalankan aplikasi, Anda dapat melihat bahwa SignalR telah secara otomatis membuat tabel dalam database:

Cuplikan layar kotak dialog Object Explorer menampilkan folder dan file.

SignalR mengelola tabel. Selama aplikasi Anda disebarkan, jangan hapus baris, ubah tabel, dan sebagainya.