Aracılığıyla paylaş


Uygulamalı Laboratuvar: SignalR ile Gerçek Zamanlı Web Uygulamaları

Web Camps Ekibi 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.

Web Camps Eğitim Seti, Ekim 2015 Sürümünü İndir

Gerçek zamanlı Web uygulamaları, sunucu tarafı içeriği bağlı istemcilere gerçek zamanlı olarak gönderme özelliğine sahiptir. ASP.NET geliştiriciler için ASP.NET SignalR , uygulamalarına gerçek zamanlı web işlevselliği eklemeye yönelik bir kitaplıktır. İstemci ve sunucunun en iyi kullanılabilir aktarımı göz önüne alındığında otomatik olarak en iyi kullanılabilir aktarımı seçerek çeşitli aktarımlardan yararlanır. Tarayıcı ve sunucu arasında çift yönlü iletişim sağlayan bir HTML5 API'si olan WebSocket'in avantajlarından yararlanır.

SignalR ayrıca, ASP.NET uygulamanızda istemciye RPC (istemcilerinizin tarayıcılarında sunucu tarafı .NET kodundan JavaScript işlevlerini çağırma) yapmak için basit, üst düzey bir API'nin yanı sıra bağlantı yönetimi için bağlama/bağlantı kesme olayları, bağlantıları gruplandırma ve yetkilendirme gibi yararlı kancalar ekler.

SignalR , istemci ile sunucu arasında gerçek zamanlı iş yapmak için gereken bazı aktarımların soyutlamasıdır. SignalR bağlantısı HTTP olarak başlar ve varsa WebSocket bağlantısına yükseltilir. WebSocket, sunucu belleğini en verimli şekilde kullandığından, en düşük gecikme süresine sahip olduğundan ve en temel alınan özelliklere (istemci ile sunucu arasındaki tam çift yönlü iletişim gibi) sahip olduğundan SignalR için ideal aktarımdır, ancak en katı gereksinimlere de sahiptir: WebSocket, sunucunun Windows Server 2012 veya Windows 8 kullanmasını gerektirir. .NET Framework 4.5 ile birlikte. Bu gereksinimler karşılanmazsa SignalR , bağlantılarını yapmak için diğer aktarımları kullanmayı dener ( Ajax uzun yoklama gibi).

SignalR API'sinde istemciler ve sunucular arasında iletişim kurmak için iki model bulunur: Kalıcı Bağlantılar ve Hub'lar. Bağlantı, tek alıcılı, gruplandırılmış veya yayın iletileri göndermek için basit bir uç noktayı temsil eder. Hub, bağlantı API'sinin üzerine kurulmuş, istemcinizin ve sunucunuzun doğrudan birbirleri üzerinde yöntemler çağırmasına olanak tanıyan daha üst düzey bir işlem hattıdır.

SignalR Mimarisi

Tüm örnek kod ve kod parçacıkları, Adresinde bulunan Web Camps Eğitim Seti Ekim 2015 Sürümü'ne https://github.com/Microsoft-Web/WebCampTrainingKit/releases/tag/v2015.10.13bdahildir. Bu sayfadaki Yükleyici bağlantısının artık çalışmadığını lütfen unutmayın; bunun yerine Varlıklar bölümünün altındaki bağlantılardan birini kullanın.

Genel Bakış

Hedefler

Bu uygulamalı laboratuvarda şunların nasıl yapılacağını öğreneceksiniz:

  • SignalR kullanarak sunucudan istemciye bildirim gönderin.
  • SQL Server kullanarak SignalR uygulamanızın ölçeğini genişletme.

Önkoşullar

Bu uygulamalı laboratuvarı tamamlamak için aşağıdakiler gereklidir:

Kurulum

Alıştırmaları bu uygulamalı laboratuvarda çalıştırmak için önce ortamınızı ayarlamanız gerekir.

  1. Bir Windows Gezgini penceresi açın ve laboratuvarın Kaynak klasörüne göz atın.
  2. Setup.cmd'ye sağ tıklayıp Yönetici olarak çalıştır'ı seçerek ortamınızı yapılandıracak kurulum işlemini başlatın ve bu laboratuvar için Visual Studio kod parçacıklarını yükleyin.
  3. Kullanıcı Hesabı Denetimi iletişim kutusu gösteriliyorsa, devam etmek için eylemi onaylayın.

Not

Kurulumu çalıştırmadan önce bu laboratuvar için tüm bağımlılıkları denetlediğinizden emin olun.

Kod Parçacıklarını Kullanma

Laboratuvar belgesinin tamamında kod blokları eklemeniz istenir. Size kolaylık olması için, bu kodun çoğu el ile eklemek zorunda kalmamak için Visual Studio 2013 içinden erişebileceğiniz Visual Studio Code Kod Parçacıkları olarak sağlanır.

Not

Her alıştırmaya, alıştırmanın Begin klasöründe bulunan ve her alıştırmayı diğerlerinden bağımsız olarak izlemenizi sağlayan bir başlangıç çözümü eşlik eder. Alıştırma sırasında eklenen kod parçacıklarının bu başlangıç çözümlerinde eksik olduğunu ve siz alıştırmayı tamamlayana kadar çalışmayabileceğini unutmayın. Bir alıştırmanın kaynak kodunun içinde, ilgili alıştırmadaki adımların tamamlanmasıyla sonuçlanacak kodu içeren visual studio çözümünü içeren bir End klasörü de bulacaksınız. Bu uygulamalı laboratuvarda çalışırken ek yardıma ihtiyacınız varsa bu çözümleri rehberlik olarak kullanabilirsiniz.


Egzersiz

Bu uygulamalı laboratuvar aşağıdaki alıştırmaları içerir:

  1. SignalR Kullanarak Real-Time Verileriyle Çalışma
  2. SQL Server Kullanarak Ölçeği Genişletme

Bu laboratuvarın tamamlanması için tahmini süre: 60 dakika

Not

Visual Studio'yu ilk kez başlattığınızda, önceden tanımlanmış ayarlar koleksiyonlarından birini seçmeniz gerekir. Önceden tanımlanmış her koleksiyon belirli bir geliştirme stiliyle eşleşecek şekilde tasarlanmıştır ve pencere düzenlerini, düzenleyici davranışını, IntelliSense kod parçacıklarını ve iletişim kutusu seçeneklerini belirler. Bu laboratuvardaki yordamlar, Genel Geliştirme Ayarları koleksiyonunu kullanırken Visual Studio'da belirli bir görevi gerçekleştirmek için gereken eylemleri açıklar. Geliştirme ortamınız için farklı bir ayar koleksiyonu seçerseniz, dikkate almanız gereken adımlarda farklılıklar olabilir.

Alıştırma 1: SignalR Kullanarak Real-Time Verilerle Çalışma

Sohbet genellikle örnek olarak kullanılırken, gerçek zamanlı Web işlevselliğiyle çok daha fazlasını yapabilirsiniz. Bir kullanıcı yeni verileri görmek için bir web sayfasını yenilese veya sayfa yeni verileri almak için Ajax uzun yoklama uyguladığında SignalR'yi kullanabilirsiniz.

SignalR , sunucu gönderme veya yayınlama işlevselliğini destekler; bağlantı yönetimini otomatik olarak işler. İstemci-sunucu iletişimi için klasik HTTP bağlantılarında, her istek için bağlantı yeniden kurulur, ancak SignalR istemci ile sunucu arasında kalıcı bağlantı sağlar. SignalR'de sunucu kodu, bugün bildiğimiz istek-yanıt modeli yerine Uzaktan Yordam Çağrılarını (RPC) kullanarak tarayıcıdaki bir istemci kodunu çağırır.

Bu alıştırmada Geek Test uygulamasını SignalR kullanarak sayfanın tamamını yenilemeye gerek kalmadan güncelleştirilmiş ölçümlerle İstatistik panosunu görüntüleyecek şekilde yapılandıracaksınız.

Görev 1 – Geek Test İstatistikleri Sayfasını Keşfetme

Bu görevde, uygulamayı gözden geçirip istatistik sayfasının nasıl gösterildiğini ve bilgilerin güncelleştirilme şeklini nasıl geliştirebileceğinizi doğrulayacaksınız.

  1. Web için Visual Studio Express 2013'i açın ve Source\Ex1-WorkingWithRealTimeData\Begin klasöründe bulunan GeekQuiz.sln çözümünü açın.

  2. Çözümü çalıştırmak için F5 tuşuna basın. Oturum aç sayfası tarayıcıda görünmelidir.

    Çözümü çalıştırma

    Çözümü çalıştırma

  3. Uygulamada yeni bir kullanıcı oluşturmak için sayfanın sağ üst köşesindeki Kaydet'e tıklayın.

    Kayıt bağlantısı

    Kayıt bağlantısı

  4. Kaydol sayfasında, bir Kullanıcı adı ve Parola girin ve Kaydet'e tıklayın.

    Kullanıcı kaydetme Kullanıcıyı

    Kullanıcı kaydetme

  5. Uygulama yeni hesabı kaydeder ve kullanıcının kimliği doğrulanır ve ilk test sorusunun gösterildiği giriş sayfasına yönlendirilir.

  6. İstatistikler sayfasını yeni bir pencerede açın ve Giriş sayfası ile İstatistikler sayfasını yan yana yerleştirin.

    Yan yana pencereler

    Yan yana pencereler

  7. Giriş sayfasında, seçeneklerden birine tıklayarak soruyu yanıtlayın.

    Bir soruyu yanıtlama

    Bir soruyu yanıtlama

  8. Düğmelerden birine tıkladıktan sonra yanıt görüntülenmelidir.

    Soru doğru yanıtlandı

    Soru doğru yanıtlandı

  9. İstatistikler sayfasında sağlanan bilgilerin eski olduğuna dikkat edin. Güncelleştirilmiş sonuçları görmek için sayfayı yenileyin.

    İstatistikler sayfası

    İstatistikler sayfası

  10. Visual Studio'ya Geri dön ve hata ayıklamayı durdurun.

Görev 2 – Çevrimiçi Grafikleri Göstermek için Geek Testine SignalR Ekleme

Bu görevde, çözüme SignalR ekleyecek ve sunucuya yeni bir yanıt gönderildiğinde istemcilere güncelleştirmeleri otomatik olarak göndereceksiniz.

  1. Visual Studio'daki Araçlar menüsünde NuGet Paket Yöneticisi'ni seçin ve ardından Paket Yöneticisi Konsolu'na tıklayın.

  2. Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu yürütebilirsiniz:

    Install-Package Microsoft.AspNet.SignalR
    

    SignalR paketi yüklemesi

    SignalR paketi yüklemesi

    Not

    Yepyeni bir MVC 5 uygulamasından SignalR NuGet sürüm 2.0.2'yi yüklerken SignalR'yi yüklemeden önce OWIN paketlerini el ile sürüm 2.0.1 'e (veya üzeri) güncelleştirmeniz gerekir. Bunu yapmak için Paket Yöneticisi Konsolu'nda aşağıdaki betiği yürütebilirsiniz:

    get-package | where-object { $_.Id -like "Microsoft.Owin*"} | Update-Package
    

    SignalR'nin gelecek bir sürümünde OWIN bağımlılıkları otomatik olarak güncelleştirilecektir.

  3. Çözüm Gezginibetikler klasörünü genişletin ve SignalR js dosyalarının çözüme eklendiğine dikkat edin.

    SignalR JavaScript başvuruları

    SignalR JavaScript başvuruları

  4. Çözüm Gezgini'da GeekQuiz projesine sağ tıklayın,Yeni Klasör Ekle'yi | seçin ve Hubs olarak adlandırın.

  5. Hubs klasörüne sağ tıklayın ve Ekle | öğesini seçin Yeni Öğe.

    Yeni öğe ekle

    Yeni öğe ekle

  6. Yeni Öğe Ekle iletişim kutusunda Visual C# | öğesini seçin Web | Sol bölmedeki SignalR düğümü, orta bölmeden SignalR Hub Sınıfı (v2) öğesini seçin, StatisticsHub.cs dosyasını adlandırın ve Ekle'ye tıklayın.

    Yeni öğe ekle iletişim kutusu

    Yeni öğe ekle iletişim kutusu

  7. StatisticsHub sınıfındaki kodu aşağıdaki kodla değiştirin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - StatisticsHubClass)

    namespace GeekQuiz.Hubs
    {
        using Microsoft.AspNet.SignalR;
    
        public class StatisticsHub : Hub
        {
        }
    }
    
  8. Startup.cs dosyasını açın ve Configuration yönteminin sonuna aşağıdaki satırı ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - MapSignalR)

    public void Configuration(IAppBuilder app)
    {
        this.ConfigureAuth(app);
        app.MapSignalR();
    }
    
  9. Services klasörünün içindeki StatisticsService.cs sayfasını açın ve aşağıdaki using yönergelerini ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - UsingDirectives)

    using Microsoft.AspNet.SignalR;
    using GeekQuiz.Hubs;
    
  10. Bağlı istemcilere güncelleştirmeleri bildirmek için önce geçerli bağlantı için bir Context nesnesi alırsınız. Hub nesnesi, tek bir istemciye ileti gönderme veya tüm bağlı istemcilere yayınlama yöntemleri içerir. İstatistik verilerini yayınlamak için StatisticsService sınıfına aşağıdaki yöntemi ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - NotifyUpdatesMethod)

    public async Task NotifyUpdates()
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<StatisticsHub>();
        if (hubContext != null)
        {
             var stats = await this.GenerateStatistics();
             hubContext.Clients.All.updateStatistics(stats);
        }
    }
    

    Not

    Yukarıdaki kodda, istemcideki bir işlevi çağırmak için rastgele bir yöntem adı kullanıyorsunuz (örneğin: updateStatistics). Belirttiğiniz yöntem adı dinamik bir nesne olarak yorumlanır; başka bir deyişle bu nesne için IntelliSense veya derleme zamanı doğrulaması yoktur. İfade çalışma zamanında değerlendirilir. Yöntem çağrısı yürütürken SignalR yöntem adını ve parametre değerlerini istemciye gönderir. İstemcinin adıyla eşleşen bir yöntemi varsa, bu yöntem çağrılır ve parametre değerleri bu yönteme geçirilir. İstemcide eşleşen bir yöntem bulunamazsa hata oluşmaz. Daha fazla bilgi için bkz. ASP.NET SignalR Hubs API Kılavuzu.

  11. Controllers klasörünün içindeki TriviaController.cs sayfasını açın ve aşağıdaki using yönergelerini ekleyin.

    using GeekQuiz.Services;
    
  12. Post eylem yöntemine aşağıdaki vurgulanmış kodu ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - NotifyUpdatesCall)

    public async Task<IHttpActionResult> Post(TriviaAnswer answer)
    {
        if (!ModelState.IsValid)
        {
             return this.BadRequest(this.ModelState);
        }
    
        answer.UserId = User.Identity.Name;
    
        var isCorrect = await this.StoreAsync(answer);
    
        var statisticsService = new StatisticsService(this.db);
        await statisticsService.NotifyUpdates();
    
        return this.Ok<bool>(isCorrect);
    }
    
  13. Görünümler | içinde Statistics.cshtml sayfasını açın Giriş klasörü. Betikler bölümünü bulun ve bölümün başına aşağıdaki betik başvurularını ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - SignalRScriptReferences)

    @section Scripts {
        @Scripts.Render("~/Scripts/jquery.signalR-2.0.2.min.js");
        @Scripts.Render("~/signalr/hubs");
        ...
    }
    

    Not

    Visual Studio projenize SignalR ve diğer betik kitaplıklarını eklediğinizde, Paket Yöneticisi SignalR betik dosyasının bu konuda gösterilen sürümden daha yeni bir sürümünü yükleyebilir. Kodunuzdaki betik başvurusunun projenizde yüklü olan betik kitaplığı sürümüyle eşleştiğinden emin olun.

  14. İstemciyi SignalR hub'ına bağlamak ve hub'dan yeni bir ileti alındığında istatistik verilerini güncelleştirmek için aşağıdaki vurgulanmış kodu ekleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex1 - SignalRClientCode)

    @section Scripts {
        ...
        <script>
            ...
    
            var connection = $.hubConnection();
            var hub = connection.createHubProxy("StatisticsHub");
            hub.on("updateStatistics", function (statistics) {
                    statisticsData = statistics;
                    $("#correctAnswersCounter").text(statistics.CorrectAnswers);
                    $("#incorrectAnswersCounter").text(statistics.IncorrectAnswers);
    
                    showCharts(statisticsData);
              });
    
            connection.start();
        </script>
    }
    

    Bu kodda, bir Hub Proxy'si oluşturup sunucu tarafından gönderilen iletileri dinlemek için bir olay işleyicisi kaydediyorsunuz. Bu durumda updateStatistics yöntemi aracılığıyla gönderilen iletileri dinlersiniz.

Görev 3 – Çözümü Çalıştırma

Bu görevde, yeni bir soruyu yanıtladıktan sonra istatistik görünümünün SignalR kullanılarak otomatik olarak güncelleştirildiğini doğrulamak için çözümü çalıştıracaksınız.

  1. Çözümü çalıştırmak için F5 tuşuna basın.

    Not

    Uygulamada henüz oturum açmadıysanız, Görev 1'de oluşturduğunuz kullanıcıyla oturum açın.

  2. İstatistikler sayfasını yeni bir pencerede açın ve Giriş sayfası ile İstatistikler sayfasını Görev 1'de yaptığınız gibi yan yana yerleştirin.

  3. Giriş sayfasında, seçeneklerden birine tıklayarak soruyu yanıtlayın.

    Başka bir soruyu yanıtlama Başka bir soruyu

    Başka bir soruyu yanıtlama

  4. Düğmelerden birine tıkladıktan sonra yanıt görüntülenmelidir. Sayfadaki İstatistik bilgilerinin, sayfanın tamamını yenilemeye gerek kalmadan güncelleştirilmiş bilgilerle soruyu yanıtladıktan sonra otomatik olarak güncelleştirildiğini fark edin.

    Yanıt sonrasında istatistik sayfası yenilendi Yanıt sonrasında

    Yanıt sonrasında yenilenen istatistikler sayfası

Alıştırma 2: SQL Server Kullanarak Ölçeği Genişletme

Bir web uygulamasını ölçeklendirirken genellikle ölçeği artırmave genişletme seçenekleri arasında seçim yapabilirsiniz. Ölçeği artırma , daha fazla kaynakla (CPU, RAM vb.) daha büyük bir sunucu kullanmak, ölçeği genişletme ise yükü işlemek için daha fazla sunucu eklemek anlamına gelir. İkincisinde sorun, istemcilerin farklı sunuculara yönlendirilebiliyor olmasıdır. Bir sunucuya bağlı bir istemci, başka bir sunucudan gönderilen iletileri almaz.

İletileri sunucular arasında iletmek için geri düzlem adlı bir bileşen kullanarak bu sorunları çözebilirsiniz. Bir geri düzlem etkinleştirildiğinde, her uygulama örneği iletileri arka düzleme gönderir ve arka plan bunları diğer uygulama örneklerine iletir.

SignalR için şu anda üç tür arka plan vardır:

  • Windows Azure Service Bus. Service Bus, bileşenlerin gevşek bir şekilde bağlanmış iletiler göndermesine olanak tanıyan bir mesajlaşma altyapısıdır.
  • SQL Server. SQL Server arka düzlemi, iletileri SQL tablolarına yazar. Arka plan, verimli mesajlaşma için Hizmet Aracısı'nı kullanır. Ancak, Hizmet Aracısı etkin değilse de çalışır.
  • Redis'i seçin. Redis bir bellek içi anahtar-değer deposudur. Redis, ileti göndermek için yayımlama/abone olma ("pub/sub") deseni destekler.

Her ileti bir ileti veri yolu üzerinden gönderilir. İleti veri yolu, yayımlama/abone olma soyutlaması sağlayan IMessageBus arabirimini uygular. Arka düzlemler, varsayılan IMessageBus'i bu arka plan için tasarlanmış bir veri yolu ile değiştirerek çalışır.

Her sunucu örneği veri yolu aracılığıyla arka plana bağlanır. bir ileti gönderildiğinde, geri düzleme gider ve arka plan onu her sunucuya gönderir. Bir sunucu arka düzlemden bir ileti aldığında, iletiyi yerel önbelleğinde depolar. Sunucu daha sonra iletileri istemcilere yerel önbelleğinden teslim eder.

SignalR arka düzleminin nasıl çalıştığı hakkında daha fazla bilgi için bu makaleyi okuyun.

Not

Arka düzlemin bir performans sorununa dönüşebileceği bazı senaryolar vardır. Bazı tipik SignalR senaryoları şunlardır:

  • Sunucu yayını (örneğin hisse senedi değerleyicisi): Sunucu iletilerin gönderilme hızını denetlediğinden, bu senaryo için geri düzlemler iyi çalışır.
  • İstemciden istemciye (örneğin, sohbet): Bu senaryoda, ileti sayısı istemci sayısıyla ölçeklendirilirse arka plan bir performans sorunu olabilir; diğer bir ifadeyle, daha fazla istemci katıldıkça iletilerin oranı orantılı olarak artar.
  • Yüksek frekanslı gerçek zamanlı (örneğin, gerçek zamanlı oyunlar): Bu senaryo için arka plan önerilmez.

Bu alıştırmada, SQL Server kullanarak iletileri Geek Test uygulamasına dağıtacaksınız. Yapılandırmayı ayarlamayı öğrenmek için bu görevleri tek bir test makinesinde çalıştıracaksınız, 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.

SQL Server Diyagramı Kullanarak Ölçeği Genişletme

Görev 1 - Senaryoyu Anlama

Bu görevde, yerel makinenizde birden çok IIS örneğinin benzetimini yaparak 2 Geek Testi örneği çalıştıracaksınız. Bu senaryoda, bir uygulamada trivia sorularını yanıtlarken güncelleştirme, ikinci örneğin istatistik sayfasında bildirilmeyecektir. Bu simülasyon, uygulamanızın birden çok örneğe dağıtıldığı ve bunlarla iletişim kurmak için yük dengeleyicinin kullanıldığı bir ortama benzer.

  1. Source/Ex2-ScalingOutWithSQLServer/Begin klasöründe bulunan Begin.sln çözümünü açın. Yüklendikten sonra , Sunucu Gezgini'ne çözümün aynı yapılara ancak farklı adlara sahip iki projesi olduğunu fark edeceksiniz. Bu, yerel makinenizde aynı uygulamanın iki örneğini çalıştırma benzetimini yapacaktır.

    Geek Testinin 2 Örneğini Simulating Çözümü Başlatma

    Geek Testinin 2 Örneğini Taklit Eden Çözümü Başlatma

  2. Çözüm düğümüne sağ tıklayıp Özellikler'i seçerek çözümün özellikler sayfasını açın. Başlangıç Projesi'nin altında Birden çok başlangıç projesi'ni seçin ve her iki projenin Eylem değerini Başlat olarak değiştirin.

    Birden Çok Proje Başlatma

    Birden Çok Proje Başlatma

  3. Çözümü çalıştırmak için F5 tuşuna basın. Uygulama, aynı uygulamanın birden çok örneğinin simülasyonunu yaparak farklı bağlantı noktalarında iki Geek Testi örneği başlatacak. Tarayıcılardan birini sola, diğerini de ekranınızın sağ tarafında sabitleyin. Kimlik bilgilerinizle oturum açın veya yeni bir kullanıcı kaydedin. Oturum açtıktan sonra Trivia sayfasını sol tarafta tutun ve sağdaki tarayıcıda İstatistikler sayfasına gidin.

    Yan Yana Geek Testi

    Yan Yana Geek Testi

    Farklı Bağlantı Noktalarında Geek Testi

    Farklı Bağlantı Noktalarında Geek Testi

  4. Sol tarayıcıda soruları yanıtlamaya başladığınızda sağ tarayıcıdaki İstatistikler sayfasının güncelleştirilmediğini fark edeceksiniz. Bunun nedeni SignalR'nin iletileri istemcileri arasında dağıtmak için yerel bir önbellek kullanması ve bu senaryonun birden çok örneğin benzetimini gerçekleştirmesi ve bu nedenle önbelleğin bunlar arasında paylaşılmamasıdır. Aynı adımları test ederek ancak tek bir uygulama kullanarak SignalR'nin çalıştığını doğrulayabilirsiniz. Aşağıdaki görevlerde, iletileri örnekler arasında çoğaltmak için bir arka plan yapılandıracaksınız.

  5. Visual Studio'ya Geri dön ve hata ayıklamayı durdurun.

Görev 2 – SQL Server Arka Düzlemi Oluşturma

Bu görevde, Geek Test uygulaması için arka plan görevi görecek bir veritabanı oluşturacaksınız. Sunucunuza göz atmak ve veritabanını başlatmak için SQL Server Nesne Gezgini kullanacaksınız. Ayrıca Hizmet Aracısı'nı da etkinleştirebilirsiniz.

  1. Visual Studio'daGörünüm menüsünü açın ve SQL Server Nesne Gezgini seçin.

  2. SQL Server düğümüne sağ tıklayıp SQL Server ekle... seçeneğini belirleyerek LocalDB örneğinize bağlanın.

    SQL Server Örneği Ekleme SQL Server

    SQL Server Nesne Gezgini'a SQL Server örneği ekleme

  3. Sunucu adını(localdb)\v11.0 olarak ayarlayın ve kimlik doğrulama modu olarak Windows Kimlik Doğrulaması'nı bırakın. Devam etmek için Bağlan’a tıklayın.

    LocalDB'ye Bağlanma

    LocalDB'ye bağlanma

  4. Artık LocalDB örneğine bağlandığınıza göre SignalR için SQL Server arka düzlemini temsil edecek bir veritabanı oluşturmanız gerekir. Bunu yapmak için Veritabanları düğümüne sağ tıklayın ve Yeni Veritabanı Ekle'yi seçin.

    Yeni veritabanı ekleme

    Yeni veritabanı ekleme

  5. Veritabanı adını SignalR olarak ayarlayın ve oluşturmak için Tamam'a tıklayın.

    SignalR veritabanını oluşturma

    SignalR veritabanını oluşturma

    Not

    Veritabanı için herhangi bir ad seçebilirsiniz.

  6. Güncelleştirmeleri arka düzlemden daha verimli bir şekilde almak için veritabanı için Hizmet Aracısı'nı etkinleştirmeniz önerilir. Hizmet Aracısı, SQL Server'da mesajlaşma ve kuyruğa alma için yerel destek sağlar. Arka plan, Hizmet Aracısı olmadan da çalışır. Veritabanına sağ tıklayıp Yeni Sorgu'yu seçerek yeni bir sorgu açın.

    Yeni Sorgu Açma

    Yeni Sorgu Açma

  7. 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. Son açılan sorgu penceresinde aşağıdaki betiği yürütebilirsiniz.

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

    Hizmet Aracısı Durumunu Sorgulama

    Hizmet Aracısı Durumunu Sorgulama

  8. Veritabanınızdaki is_broker_enabled sütununun değeri "0" ise, etkinleştirmek için aşağıdaki komutu kullanın. YOUR-DATABASE değerini, veritabanını oluştururken ayarladığınız adla değiştirin <(örneğin: SignalR).>

    ALTER DATABASE <YOUR-DATABASE> SET ENABLE_BROKER
    

    Hizmet Aracısı Etkinleştirme

    Hizmet Aracısı'nın etkinleştirilmesi

    Not

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

Görev 3 – SignalR Uygulamasını Yapılandırma

Bu görevde, Geek Test'i SQL Server arka planına bağlanacak şekilde yapılandıracaksınız. İlk olarak SignalR.SqlServer NuGet paketini ekleyecek ve bağlantı dizesini arka plan veritabanınıza ayarlayacaksınız.

  1. Araçlar>NuGet Paket Yöneticisi'nden Paket YöneticisiKonsolu'nu açın. Varsayılan proje açılan listesinde GeekQuizprojesinin seçili olduğundan emin olun. Microsoft.AspNet.SignalR.SqlServer NuGet paketini yüklemek için aşağıdaki komutu yazın.

    Install-Package Microsoft.AspNet.SignalR.SqlServer
    
  2. Önceki adımı yineleyin, ancak bu kez GeekQuiz2 projesi için.

  3. SQL Server arka düzlemini yapılandırmak için GeekQuiz projesinin Startup.cs dosyasını açın ve Configure yöntemine aşağıdaki kodu ekleyin. YOUR-DATABASE değerini, SQL Server arka düzlemini oluştururken kullandığınız veritabanı adıyla değiştirin<.> GeekQuiz2 projesi için bu adımı yineleyin.

    (Kod Parçacığı - RealTimeSignalR - Ex2 - StartupConfiguration)

    public class Startup 
    {   
        public void Configuration(IAppBuilder app) 
        {           
            var sqlConnectionString = @"Server=(localdb)\v11.0;Database=<YOUR-DATABASE>;Integrated Security=True;";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString); 
            this.ConfigureAuth(app);
            app.MapSignalR();
        }
    }
    
  4. Her iki proje de SQL Server arka düzlemini kullanacak şekilde yapılandırıldığına göre, bunları aynı anda çalıştırmak için F5 tuşuna basın.

  5. Visual Studio yine farklı bağlantı noktalarında iki Geek Testi örneği başlatacak. Tarayıcılardan birini ekranınızın soluna, diğerini de sağ tarafa sabitleyin ve kimlik bilgilerinizle oturum açın. Trivia sayfasını sol tarafta tutun ve sağ tarayıcıda İstatistikler sayfasına gidin.

  6. Sol tarayıcıda soruları yanıtlamaya başlayın. Bu kez İstatistikler sayfası arka düzlem sayesinde güncelleştirilir. Uygulamalar arasında geçiş yapın (İstatistikler artık sol tarafta ve Trivia sağda) ve her iki örnekte de çalıştığını doğrulamak için testi yineleyin. Arka plan, bağlı her sunucu için iletilerin paylaşılan önbelleği görevi görür ve her sunucu, bağlı istemcilere dağıtmak üzere iletileri kendi yerel önbelleğinde depolar.

  7. Visual Studio'ya Geri dön ve hata ayıklamayı durdurun.

  8. SQL Server arka plan bileşeni, belirtilen veritabanında gerekli tabloları otomatik olarak oluşturur. SQL Server Nesne Gezgini panelinde, arka plan için oluşturduğunuz veritabanını açın (ör. SignalR) ve tablolarını genişletin. Aşağıdaki tabloları görmeniz gerekir:

    Backplane Tarafından Oluşturulan Tablolar

    Backplane Tarafından Oluşturulan Tablolar

  9. SignalR.Messages_0 tablosuna sağ tıklayın ve Verileri Görüntüle'yi seçin.

    SignalR Arka Düzlem İletileri Tablosunu Görüntüleme

    SignalR Arka Düzlem İletileri Tablosunu Görüntüleme

  10. Trivia sorularını yanıtlarken Hub'a gönderilen farklı iletileri görebilirsiniz. Arka plan bu iletileri bağlı herhangi bir örneğe dağıtır.

    Geri Düzlem İletileri Tablosu

    Geri Düzlem İletileri Tablosu


Özet

Bu uygulamalı laboratuvarda Hubs kullanarak SignalR'yi uygulamanıza eklemeyi ve sunucudan bağlı istemcilerinize bildirim göndermeyi öğrendiniz. Ayrıca, uygulamanız birden çok IIS örneğine dağıtıldığında bir arka plan bileşeni kullanarak uygulamanızın ölçeğini genişletmeyi öğrendiniz.