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.)
Ön koşullar:
- Bir Windows Azure hesabı.
- Windows Azure SDK'sı.
- Visual Studio 2012 veya 2013.
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.
Yeni bir Service Bus ad alanı oluşturmak için Windows Azure portal kullanın.
Bu NuGet paketlerini uygulamanıza ekleyin:
SignalR uygulaması oluşturun.
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.
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.
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 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 ASP.NET Projesi iletişim kutusunda MVC'yi seçin ve Tamam'a tıklayın.
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.
Bağlantı dizesini panoya kopyalayın ve connectionString değişkenine yapıştırın.
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.
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.
Değişiklikleri kaydedin.
Çözüm Gezgini'da ChatService projesine sağ tıklayın. Yayımla’yı seçin.
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.
İç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.
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.
İleti etkinliğinin panoda gösterilmesi birkaç dakika sürer.
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 Serializable
bir değere ayarlanırsa bu hata oluşabilir. Diğer işlem düzeyleriyle işlem gerçekleştirildiğini doğrulayın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin