Škálování aplikace SignalR službou Azure Service Bus
Upozornění
Tato dokumentace není určená pro nejnovější verzi SignalR. Podívejte se na ASP.NET Core SignalR.
V tomto kurzu nasadíte aplikaci SignalR do webové role Windows Azure pomocí backplane služby Service Bus k distribuci zpráv do každé instance role. (Backplane služby Service Bus můžete použít také s webovými aplikacemi v Azure App Service.)
Požadavky:
- Účet Windows Azure.
- Sada Windows Azure SDK.
- Visual Studio 2012 nebo 2013.
Backplane služby Service Bus je také kompatibilní se službou Service Bus pro Windows Server verze 1.1. Není ale kompatibilní s verzí 1.0 služby Service Bus pro Windows Server.
Ceny
Backplane služby Service Bus používá k odesílání zpráv témata. Nejnovější informace o cenách najdete v tématu Service Bus. V době psaní tohoto textu můžete posílat 1 000 000 zpráv měsíčně za méně než 1 USD. Backplane odešle zprávu service bus pro každé vyvolání metody centra SignalR. K dispozici jsou také řídicí zprávy pro připojení, odpojení, spojování nebo opouštění skupin atd. Ve většině aplikací bude většina provozu zpráv vyvoláním metod centra.
Přehled
Než se dostaneme k podrobnému kurzu, tady je stručný přehled toho, co budete dělat.
Pomocí windows Azure Portal vytvořte nový obor názvů služby Service Bus.
Přidejte do aplikace tyto balíčky NuGet:
Vytvořte aplikaci SignalR.
Do souboru Startup.cs přidejte následující kód pro konfiguraci backplane:
public void Configuration(IAppBuilder app) { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); app.MapSignalR(); // ... }
Tento kód nakonfiguruje backplane s výchozími hodnotami TopicCount a MaxQueueLength. Informace o změně těchto hodnot najdete v tématu Výkon služby SignalR: Metriky škálování.
Pro každou aplikaci vyberte jinou hodnotu pro "YourAppName". Nepoužívejte stejnou hodnotu ve více aplikacích.
Vytvoření služeb Azure
Vytvořte cloudovou službu, jak je popsáno v tématu Vytvoření a nasazení cloudové služby. Postupujte podle kroků v části Postupy: Vytvoření cloudové služby pomocí rychlého vytvoření. Pro účely tohoto kurzu nemusíte nahrávat certifikát.
Vytvořte nový obor názvů služby Service Bus, jak je popsáno v tématu Použití témat a předplatných služby Service Bus. Postupujte podle kroků v části Vytvoření oboru názvů služby.
Poznámka
Nezapomeňte vybrat stejnou oblast pro cloudovou službu a obor názvů služby Service Bus.
Vytvoření projektu sady Visual Studio
Spusťte Visual Studio. V nabídce Soubor klikněte na Nový projekt.
V dialogovém okně Nový projekt rozbalte Visual C#. V části Nainstalované šablony vyberte Cloud a pak vyberte Cloudová služba Windows Azure. Ponechte výchozí rozhraní .NET Framework 4.5. Pojmenujte aplikaci ChatService a klikněte na OK.
V dialogovém okně Nová cloudová služba Windows Azure vyberte ASP.NET Webová role. Kliknutím na tlačítko se šipkou vpravo (>) přidejte roli do řešení.
Najeďte myší na novou roli, aby se zobrazila ikona tužky. Kliknutím na tuto ikonu roli přejmenujete. Pojmenujte roli SignalRChat a klikněte na OK.
V dialogovém okně Nový projekt ASP.NET vyberte MVC a klikněte na OK.
Průvodce projektem vytvoří dva projekty:
- Chatservice: Tento projekt je aplikace Windows Azure. Definuje role Azure a další možnosti konfigurace.
- SignalRChat: Tento projekt je váš projekt ASP.NET MVC 5.
Vytvoření chatovací aplikace SignalR
Pokud chcete vytvořit chatovací aplikaci, postupujte podle pokynů v kurzu Začínáme s využitím SignalR a MVC 5.
K instalaci požadovaných knihoven použijte NuGet. V nabídce Nástroje vyberte Správce balíčků NuGet a pak vyberte Konzola Správce balíčků. V okně konzoly Správce balíčků zadejte následující příkazy:
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
Pomocí možnosti -ProjectName
nainstalujte balíčky do projektu ASP.NET MVC místo do projektu Windows Azure.
Konfigurace backplane
Do souboru Startup.cs vaší aplikace přidejte následující kód:
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();
}
Teď potřebujete získat připojovací řetězec služby Service Bus. V Azure Portal vyberte obor názvů služby Service Bus, který jste vytvořili, a klikněte na ikonu Přístupová klávesa.
Zkopírujte připojovací řetězec do schránky a vložte ho do proměnné connectionString .
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
Nasazení do Azure
V Průzkumník řešení rozbalte složku Role v projektu ChatService.
Klikněte pravým tlačítkem na roli SignalRChat a vyberte Vlastnosti. Vyberte kartu Konfigurace . V části Instance vyberte 2. Můžete také nastavit velikost virtuálního počítače na Extra Small.
Uložte změny.
V Průzkumník řešení klikněte pravým tlačítkem na projekt ChatService. Vyberte Publikovat.
Pokud do Windows Azure publikujete poprvé, musíte si stáhnout přihlašovací údaje. V průvodci publikováním klikněte na Přihlásit se a stáhněte si přihlašovací údaje. Zobrazí se výzva, abyste se přihlásili k Azure Portal Windows a stáhli soubor nastavení publikování.
Klikněte na Importovat a vyberte stažený soubor nastavení publikování.
Klikněte na Next (Další). V dialogovém okně Nastavení publikování v části Cloudová služba vyberte cloudovou službu, kterou jste vytvořili dříve.
Klikněte na Publikovat. Nasazení aplikace a spuštění virtuálních počítačů může trvat několik minut.
Když teď spustíte chatovací aplikaci, instance rolí komunikují prostřednictvím Azure Service Bus pomocí tématu Služby Service Bus. Téma je fronta zpráv, která umožňuje více odběratelům.
Backplane automaticky vytvoří téma a předplatná. Pokud chcete zobrazit odběry a aktivitu zpráv, otevřete Azure Portal, vyberte obor názvů služby Service Bus a klikněte na Témata.
Několik minut trvá, než se aktivita zpráv zobrazí na řídicím panelu.
SignalR spravuje životnost tématu. Pokud je vaše aplikace nasazená, nepokoušejte se ručně odstraňovat témata ani měnit nastavení tématu.
Poradce při potížích
System.InvalidOperationException Jediná podporovaná úroveň IsolationLevel je IsolationLevel.Serializable.
K této chybě může dojít, pokud je úroveň transakce pro operaci nastavená na jinou hodnotu než Serializable
. Ověřte, že se neprovádí žádné operace s jinými úrovněmi transakcí.