Azure Service Bus 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 öğreticide, iletileri her rol örneğine dağıtmak için Service Bus arka düzlemini kullanarak bir SignalR uygulamasını Bir Windows Azure Web Rolüne dağıtacaksınız. (Service Bus arka düzlemini Azure App Service'daki web uygulamalarıyla da kullanabilirsiniz.)

Konu başlığından Web Rollerine ve bilgisayarlara okları gösteren diyagram. Yayımlama etiketli bir ok Web Rolleri'nde başlar ve Konu'ya gider.

Ön koşullar:

Service Bus arka planı, Windows Server, sürüm 1.1 için Service Bus ile de uyumludur. Ancak, Windows Server için Service Bus'ın 1.0 sürümüyle uyumlu değildir.

Fiyatlandırma

Service Bus arka planı, iletileri göndermek için konuları kullanır. En son fiyatlandırma bilgileri için bkz. Service Bus. Bu yazı sırasında aylık 1.000.000 ileti göndererek 1 ABD dolarından daha az bir ücret alabilirsiniz. Arka plan bir SignalR hub yönteminin her çağrısı için bir hizmet veri yolu iletisi gönderir. Bağlantılar, bağlantı kesilmeleri, gruplara katılma veya gruplardan ayrılma gibi işlemler için de bazı denetim iletileri vardır. Çoğu uygulamada, ileti trafiğinin çoğu hub yöntemi çağrıları olacaktır.

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 Service Bus ad alanı oluşturmak için Windows Azure portal kullanın.

  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 void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

Bu kod, arka planı TopicCount 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.

Her uygulama için "YourAppName" için farklı bir değer seçin. Aynı değeri birden çok uygulamada kullanmayın.

Azure Hizmetleri'ni oluşturma

Bulut Hizmeti Oluşturma ve Dağıtma bölümünde açıklandığı gibi bir Bulut Hizmeti oluşturun. "Nasıl yapılır: Hızlı Oluşturma kullanarak bulut hizmeti oluşturma" bölümündeki adımları izleyin. Bu öğretici için bir sertifikayı karşıya yüklemeniz gerekmez.

Bulut Hizmeti kırmızı daire içine alınmış seçeneğinin ekran görüntüsü.

Service Bus Konu Başlıklarını/Aboneliklerini Kullanma bölümünde açıklandığı gibi yeni bir Service Bus ad alanı oluşturun. "Hizmet Ad Alanı Oluşturma" bölümündeki adımları izleyin.

Aşağıdaki seçeneklerle yeni ad alanı ekleme başlıklı pencerenin ekran görüntüsü.

Not

Bulut hizmeti ve Service Bus ad alanı için aynı bölgeyi seçtiğinizden emin olun.

Visual Studio Projesi Oluşturma

Visual Studio’yu çalıştırın. Dosya menüsünden Yeni Proje’ye tıklayın.

Yeni Proje iletişim kutusunda Visual C# öğesini genişletin. Yüklü Şablonlar'ın altında Bulut'u ve ardından Windows Azure Bulut Hizmeti'ni seçin. Varsayılan .NET Framework 4.5'i koruyun. Uygulamaya ChatService adını verin ve Tamam'a tıklayın.

Yeni Proje iletişim kutusunu gösteren ekran görüntüsü. Bulut, Office Share Point klasöründe seçilidir. Sohbet Hizmeti Ad alanındadır.

Yeni Windows Azure Bulut Hizmeti iletişim kutusunda ASP.NET Web Rolü'ne tıklayın. Rolü çözümünüze eklemek için sağ ok düğmesine (>) tıklayın.

Kalem simgesinin görünmesi için fareyi yeni rolün üzerine getirin. Rolü yeniden adlandırmak için bu simgeye tıklayın. Rolü "SignalRChat" olarak adlandırın ve Tamam'a tıklayın.

Yeni Windows Azure Bulut Hizmeti iletişim kutusunu gösteren ekran görüntüsü. Signal R Chat A S P dot NET Web Rolünün üzerine yazıldı.

Yeni ASP.NET Projesi iletişim kutusunda MVC'yi seçin ve Tamam'a tıklayın.

Yeni A S P nokta NET Projesi iletişim kutusunu gösteren ekran görüntüsü. M V C seçili şablondur.

Proje sihirbazı iki proje oluşturur:

  • ChatService: Bu proje Windows Azure uygulamasıdır. Azure rollerini ve diğer yapılandırma seçeneklerini tanımlar.
  • SignalRChat: Bu proje, ASP.NET MVC 5 projenizdir.

SignalR Sohbet Uygulaması Oluşturma

Sohbet uygulamasını oluşturmak için SignalR ve MVC 5 ile Çalışmaya Başlama öğreticisindeki adımları izleyin.

Gerekli kitaplıkları yüklemek için NuGet kullanın. 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 komutları girin:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName Paketleri Windows Azure projesi yerine ASP.NET MVC projesine yüklemek için seçeneğini kullanın.

Arka Düzlemi yapılandırma

Uygulamanızın Startup.cs dosyasına aşağıdaki kodu ekleyin:

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

Şimdi service bus bağlantı dizenizi almanız gerekir. Azure portal, oluşturduğunuz service bus ad alanını seçin ve Erişim Anahtarı simgesine tıklayın.

Oluştur etiketli bir artı işaretini, Erişim Anahtarı etiketli bir anahtarı ve Sil etiketli bir çöp kutusunu gösteren ekran görüntüsü.

Bağlantı dizesini panoya kopyalayın ve connectionString değişkenine yapıştırın.

Erişim Anahtarı Ad alanınıza bağlanma iletişim kutusunu gösteren ekran görüntüsü.

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Azure’a dağıtın

Çözüm Gezgini'da, ChatService projesinin içindeki Roller klasörünü genişletin.

Roller adlı açık klasörü gösteren ekran görüntüsü. R Sohbeti'nin seçili olduğuna işaret edin.

SignalRChat rolüne sağ tıklayın ve Özellikler'i seçin. Yapılandırma sekmesini seçin. Örnekler'in altında 2'yi seçin. AYRıCA VM boyutunu Fazladan Küçük olarak da ayarlayabilirsiniz.

Örnekleri gösteren ekran görüntüsü. Örnek sayısı 2, V M Boyutu ise Ekstra küçük olarak ayarlanır.

Değişiklikleri kaydedin.

Çözüm Gezgini'da ChatService projesine sağ tıklayın. Yayımla’yı seçin.

Çözüm Gezgini gösteren ekran görüntüsü. Sohbet Hizmeti bağlam menüsünde Yayımla seçilidir.

Windows Azure'da ilk kez yayımlıyorsanız kimlik bilgilerinizi indirmeniz gerekir. Yayımla sihirbazında "Kimlik bilgilerini indirmek için oturum aç"a tıklayın. Bu işlem, Windows Azure portal oturum açmanızı ve bir yayımlama ayarları dosyası indirmenizi ister.

Windows Azure Uygulaması Yayımla iletişim kutusunu gösteren ekran görüntüsü. Kimlik bilgilerini indirmek için oturum açın kırmızı daire içine alınır.

İçeri Aktar'a tıklayın ve indirdiğiniz yayımlama ayarları dosyasını seçin.

İleri’ye tıklayın. Yayımlama Ayarları iletişim kutusundaki Bulut Hizmeti'nin altında daha önce oluşturduğunuz bulut hizmetini seçin.

Windows Azure Yayımlama Ayarları sayfasını gösteren ekran görüntüsü.

Yayımla’ya tıklayın. Uygulamanın dağıtılması ve VM'lerin başlatılması birkaç dakika sürebilir.

Artık sohbet uygulamasını çalıştırdığınızda rol örnekleri service bus konusunu kullanarak Azure Service Bus üzerinden iletişim kurar. Konu başlığı, birden çok aboneye izin veren bir ileti kuyruğudur.

Arka plan, konuyu ve abonelikleri otomatik olarak oluşturur. Abonelikleri ve ileti etkinliğini görmek için Azure portal açın, Service Bus ad alanını seçin ve "Konular"a tıklayın.

Konuların seçili olduğu gezinti menüsünün ekran görüntüsü.

İleti etkinliğinin panoda gösterilmesi birkaç dakika sürer.

Zaman çizelgesinde abonelik ve ileti etkinliğinin grafiğini gösteren ekran görüntüsü.

SignalR, konu ömrünü yönetir. Uygulamanız dağıtıldıktan sonra konuları el ile silmeyi veya konu üzerindeki ayarları değiştirmeyi denemeyin.

Sorun giderme

System.InvalidOperationException "Desteklenen tek IsolationLevel: 'IsolationLevel.Serializable'."

Bir işlemin işlem düzeyi dışında Serializablebir değere ayarlanırsa bu hata oluşabilir. Diğer işlem düzeyleriyle işlem gerçekleştirildiğini doğrulayın.