Aracılığıyla paylaş


SQL Server ile SignalR Ölçeğini Genişletme

Patrick Fletcher tarafından

Uyarı

Bu belgeler SignalR'nin en son sürümüne yönelik değildir. SignalR ASP.NET Core göz atın.

Bu konuda kullanılan yazılım sürümleri

Bu konunun önceki sürümleri

SignalR'nin önceki sürümleri hakkında bilgi için bkz. SignalR Eski Sürümleri.

Sorular ve yorumlar

Lütfen bu öğreticiyi nasıl beğendiğiniz ve sayfanın altındaki yorumlarda neleri geliştirebileceğimiz hakkında geri bildirim bırakın. Öğreticiyle doğrudan ilgili olmayan sorularınız varsa bunları ASP.NET SignalR forumunu veya StackOverflow.com gönderebilirsiniz.

Bu öğreticide, iki ayrı IIS örneğinde dağıtılan signalr uygulaması arasında iletileri dağıtmak için SQL Server kullanacaksınız. Bu öğreticiyi tek bir test makinesinde de çalıştırabilirsiniz, ancak tam etkiyi elde etmek için SignalR uygulamasını iki veya daha fazla sunucuya dağıtmanız gerekir. Ayrıca SQL Server sunuculardan birine veya ayrı bir ayrılmış sunucuya yüklemeniz gerekir. Bir diğer seçenek de öğreticiyi Azure'da VM'leri kullanarak çalıştırmaktır.

S Q L Sunucusundan V M'ye ve bilgisayarlara giden okları gösteren diyagram. Güncelleştirme etiketli bir ok V M'de başlar ve S Q L Sunucusu'na gider.

Önkoşullar

Microsoft SQL Server 2005 veya üzeri. Arka plan, SQL Server'nin hem masaüstü hem de sunucu sürümlerini destekler. SQL Server Compact Sürümünü veya Azure SQL Veritabanını desteklemez. (Uygulamanız Azure'da barındırılıyorsa bunun yerine Service Bus arka düzlemini göz önünde bulundurun.)

Genel Bakış

Ayrıntılı öğreticiye geçmeden önce, neler yapacağınıza ilişkin hızlı bir genel bakış aşağıda verilmiştir.

  1. Yeni bir boş veritabanı oluşturun. Arka plan bu veritabanında gerekli tabloları oluşturur.

  2. Bu NuGet paketlerini uygulamanıza ekleyin:

  3. SignalR uygulaması oluşturun.

  4. Arka düzlemi yapılandırmak için Startup.cs dosyasına aşağıdaki kodu ekleyin:

    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();
        }
    }
    

    Bu kod, arka planı TableCount ve MaxQueueLength için varsayılan değerlerle yapılandırıyor. Bu değerleri değiştirme hakkında bilgi için bkz. SignalR Performansı: Ölçek Genişletme Ölçümleri.

Veritabanını Yapılandırma

Uygulamanın veritabanına erişmek için Windows kimlik doğrulaması mı yoksa SQL Server kimlik doğrulaması mı kullanacağını belirleyin. Ne olursa olsun, veritabanı kullanıcısının oturum açma, şema oluşturma ve tablo oluşturma izinlerine sahip olduğundan emin olun.

Arka düzlemin kullanması için yeni bir veritabanı oluşturun. Veritabanına herhangi bir ad verebilirsiniz. Veritabanında tablo oluşturmanız gerekmez; arka düzlem gerekli tabloları oluşturur.

Nesne Gezgini iletişim kutusunun ekran görüntüsü. Veritabanları etiketli klasör seçilidir.

Hizmet Aracısı'nı etkinleştirme

Arka plan veritabanı için Hizmet Aracısı'nın etkinleştirilmesi önerilir. Hizmet Aracısı, SQL Server'de mesajlaşma ve kuyruğa alma için yerel destek sağlar ve bu da arka düzlemin güncelleştirmeleri daha verimli bir şekilde almasını sağlar. (Ancak, arka plan Hizmet Aracısı olmadan da çalışır.)

Hizmet Aracısı'nın etkinleştirilip etkinleştirilmediğini denetlemek için sys.databases katalog görünümündeki is_broker_enabled sütununu sorgula.

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Sys nokta veritabanları katalog görünümünü gösteren pencerenin ekran görüntüsü.

Hizmet Aracısı'nı etkinleştirmek için aşağıdaki SQL sorgusunu kullanın:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Not

Bu sorgu kilitlenme olarak görünüyorsa, DB'ye bağlı uygulama olmadığından emin olun.

İzlemeyi etkinleştirdiyseniz, izlemeler Hizmet Aracısı'nın etkin olup olmadığını da gösterir.

SignalR Uygulaması Oluşturma

Bu öğreticilerden birini izleyerek bir SignalR uygulaması oluşturun:

Daha sonra sohbet uygulamasını SQL Server ile ölçeği genişletmeyi destekleyecek şekilde değiştireceğiz. İlk olarak SignalR.SqlServer NuGet paketini projenize ekleyin. Visual Studio'da Araçlar menüsünde NuGet Paket Yöneticisi'ni ve ardından Paket Yöneticisi Konsolu'nu seçin. Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu girin:

Install-Package Microsoft.AspNet.SignalR.SqlServer

Ardından Startup.cs dosyasını açın. Configure yöntemine aşağıdaki kodu ekleyin:

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();
    }
}

Uygulamayı Dağıtma ve Çalıştırma

SignalR uygulamasını dağıtmak için Windows Server örneklerinizi hazırlayın.

IIS rolünü ekleyin. WebSocket Protokolü de dahil olmak üzere "Uygulama Geliştirme" özelliklerini ekleyin.

Rol ve Özellik Ekleme Sihirbazı iletişim kutusunu gösteren ekran görüntüsü. Sunucu Rolleri ve WebSocket Protokolü seçilir.

Ayrıca Yönetim Hizmeti'ni de ekleyin ("Yönetim Araçları" altında listelenir).

Rol ve Özellik Ekleme Sihirbazı iletişim kutusunu gösteren ekran görüntüsü. Sunucu Rolleri ve Yönetim Hizmeti seçilir.

Web Dağıtımı 3.0'ı yükleyin. IIS Yöneticisi'ni çalıştırdığınızda, Microsoft Web Platformu yüklemeniz istenir veya yükleyiciyi indirebilirsiniz. Platform Yükleyicisi'nde Web Dağıtımı'nı arayın ve Web Dağıtımı 3.0'ı yükleyin

Arama sonuçlarında web dağıtımı 3 nokta 0'ın seçili olduğu ekran görüntüsü.

Web Yönetim Hizmeti'nin çalıştığını denetleyin. Çalışmıyorsa, hizmeti başlatın. (Windows hizmetleri listesinde Web Yönetim Hizmeti'ni görmüyorsanız, IIS rolünü eklerken Yönetim Hizmeti'ni yüklediğinizden emin olun.)

Son olarak TCP için 8172 numaralı bağlantı noktasını açın. Bu, Web Dağıtımı aracının kullandığı bağlantı noktasıdır.

Artık Visual Studio projesini geliştirme makinenizden sunucuya dağıtmaya hazırsınız. Çözüm Gezgini'da çözüme sağ tıklayın ve Yayımla'ya tıklayın.

Web dağıtımı hakkında daha ayrıntılı belgeler için bkz. Visual Studio ve ASP.NET için Web Dağıtımı İçerik Haritası.

Uygulamayı iki sunucuya dağıtırsanız, her örneği ayrı bir tarayıcı penceresinde açabilir ve her bir örneğin diğerinden SignalR iletileri aldığını görebilirsiniz. (Elbette, üretim ortamında iki sunucu bir yük dengeleyicinin arkasında durur.)

İki sunucuya dağıtılan uygulamayı gösteren iki tarayıcı penceresinin ekran görüntüsü.

Uygulamayı çalıştırdıktan sonra SignalR'nin veritabanında otomatik olarak tablolar oluşturduğunu görebilirsiniz:

Klasörleri ve dosyaları görüntüleyen Nesne Gezgini iletişim kutusunun ekran görüntüsü.

SignalR tabloları yönetir. Uygulamanız dağıtıldıktan sonra satırları silmeyin, tabloyu değiştirmeyin vb.