Kurz: SignalR v místním prostředí
Upozornění
Tato dokumentace není určená pro nejnovější verzi SignalR. Podívejte se na ASP.NET Core SignalR.
V tomto kurzu se dozvíte, jak vytvořit server SignalR 2 v místním prostředí a jak se k němu připojit pomocí javascriptového klienta.
Verze softwaru použité v tomto kurzu
- Visual Studio 2013
- .NET 4.5
- SignalR verze 2
Použití sady Visual Studio 2012 v tomto kurzu
Pokud chcete v tomto kurzu použít Visual Studio 2012, postupujte takto:
- Aktualizujte Správce balíčků na nejnovější verzi.
- Nainstalujte instalační program webové platformy.
- V instalačním programu webové platformy vyhledejte a nainstalujte ASP.NET and Web Tools 2013.1 pro Visual Studio 2012. Tím se nainstalují šablony sady Visual Studio pro třídy SignalR, jako je Hub.
- Některé šablony (například spouštěcí třída OWIN) nebudou k dispozici; místo nich použijte soubor třídy.
Dotazy a komentáře
Pošlete nám prosím zpětnou vazbu k tomu, jak se vám tento kurz líbil a co bychom mohli vylepšit v komentářích v dolní části stránky. Pokud máte dotazy, které přímo nesouvisejí s kurzem, můžete je publikovat na fóru ASP.NET SignalR nebo StackOverflow.com.
Přehled
Server SignalR je obvykle hostovaný v aplikaci ASP.NET ve službě IIS, ale může být také hostovaný v místním prostředí (například v konzolové aplikaci nebo službě Systému Windows) pomocí knihovny místního hostitele. Tato knihovna, stejně jako všechny SignalR 2, je postavená na OWIN (Open Web Interface for .NET). OWIN definuje abstrakci mezi webovými servery .NET a webovými aplikacemi. OWIN odděluje webovou aplikaci od serveru, díky čemuž je OWIN ideální pro samoobslužné hostování webové aplikace ve vašem vlastním procesu, mimo službu IIS.
Mezi důvody, proč není hostování ve službě IIS, patří:
- Prostředí, ve kterých není služba IIS dostupná nebo žádoucí, například existující serverová farma bez služby IIS.
- Je třeba se vyhnout režijním nákladům na výkon služby IIS.
- Funkce SignalR se má přidat do existující aplikace, která běží ve službě Windows, roli pracovního procesu Azure nebo jiném procesu.
Pokud se řešení vyvíjí jako samoobslužný hostitel z důvodů výkonu, doporučuje se také otestovat aplikaci hostovanou ve službě IIS, aby se zjistilo využití výkonu.
Tento kurz obsahuje následující části:
Vytvoření serveru
V tomto kurzu vytvoříte server, který je hostovaný v konzolové aplikaci, ale server může být hostovaný v libovolném procesu, například ve službě Windows nebo roli pracovního procesu Azure. Ukázkový kód pro hostování serveru SignalR ve službě Windows najdete v tématu Samoobslužné hostování SignalR ve službě Windows.
Otevřete Visual Studio 2013 s oprávněními správce. Vyberte Soubor, Nový projekt. V podokně Šablony v uzlu Visual C# vyberte Windows a pak vyberte šablonu Konzolová aplikace. Pojmenujte nový projekt SignalRSelfHost a klikněte na OK.
Otevřete konzolu správce balíčků NuGet výběrem nástroje Správce> balíčků > NuGetKonzola správce balíčkůNuGet.
V konzole správce balíčků zadejte následující příkaz:
Install-Package Microsoft.AspNet.SignalR.SelfHost
Tento příkaz přidá do projektu knihovny signalR 2 Self-Host.
V konzole správce balíčků zadejte následující příkaz:
Install-Package Microsoft.Owin.Cors
Tento příkaz přidá do projektu knihovnu Microsoft.Owin.Cors. Tato knihovna se použije pro podporu mezi doménami, která se vyžaduje pro aplikace hostující SignalR a klienta webové stránky v různých doménách. Vzhledem k tomu, že budete hostovat server SignalR a webového klienta na různých portech, znamená to, že komunikace mezi těmito komponentami musí být povolená mezi doménami.
Obsah souboru Program.cs nahraďte následujícím kódem.
using System; using Microsoft.AspNet.SignalR; using Microsoft.Owin.Hosting; using Owin; using Microsoft.Owin.Cors; namespace SignalRSelfHost { class Program { static void Main(string[] args) { // This will *ONLY* bind to localhost, if you want to bind to all addresses // use http://*:8080 to bind to all addresses. // See http://msdn.microsoft.com/library/system.net.httplistener.aspx // for more information. string url = "http://localhost:8080"; using (WebApp.Start(url)) { Console.WriteLine("Server running on {0}", url); Console.ReadLine(); } } } class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } public class MyHub : Hub { public void Send(string name, string message) { Clients.All.addMessage(name, message); } } }
Výše uvedený kód obsahuje tři třídy:
- Program, včetně metody Main definující primární cestu provádění. V této metodě se webová aplikace typu Startup spustí na zadané adrese URL (
http://localhost:8080
). Pokud se na koncovém bodu vyžaduje zabezpečení, je možné implementovat protokol SSL. Další informace najdete v tématu Postupy: Konfigurace portu s certifikátem SSL . - Spuštění, třída obsahující konfiguraci pro server SignalR (jedinou konfigurací, kterou tento kurz používá, je volání
UseCors
) a voláníMapSignalR
, které vytváří trasy pro všechny objekty Centra v projektu. - MyHub, třída SignalR Hub, kterou aplikace poskytne klientům. Tato třída má jednu metodu , Send, kterou klienti budou volat, aby vysílali zprávu všem ostatním připojeným klientům.
- Program, včetně metody Main definující primární cestu provádění. V této metodě se webová aplikace typu Startup spustí na zadané adrese URL (
Zkompilujte a spusťte aplikaci. Adresa spuštěná na serveru by se měla zobrazit v okně konzoly.
Pokud spuštění selže s výjimkou
System.Reflection.TargetInvocationException was unhandled
, budete muset restartovat Visual Studio s oprávněními správce.Před pokračováním k dalšímu oddílu aplikaci zastavte.
Přístup k serveru pomocí javascriptového klienta
V této části použijete stejného javascriptového klienta z kurzu Začínáme. V klientovi provedeme jenom jednu změnu, a to explicitně definovat adresu URL centra. U aplikace v místním prostředí nemusí být server nutně na stejné adrese jako adresa URL připojení (kvůli reverzním proxy serverům a nástrojům pro vyrovnávání zatížení), takže adresa URL musí být definována explicitně.
V Průzkumník řešení klikněte pravým tlačítkem na řešení a vyberte Přidat, Nový projekt. Vyberte uzel Web a vyberte šablonu ASP.NET Webová aplikace . Projekt pojmenujte JavascriptClient a klikněte na OK.
Vyberte šablonu Prázdné a ponechte zbývající možnosti nevybrané. Vyberte Vytvořit projekt.
V konzole správce balíčků vyberte v rozevíracím seznamu Výchozí projekt projekt JavascriptClient a spusťte následující příkaz:
Install-Package Microsoft.AspNet.SignalR.JS
Tento příkaz nainstaluje knihovny SignalR a JQuery, které budete potřebovat v klientovi.
Klikněte pravým tlačítkem na projekt a vyberte Přidat, Nová položka. Vyberte webový uzel a vyberte Stránka HTML. Pojmenujte stránku Default.html.
Obsah nové stránky HTML nahraďte následujícím kódem. Ověřte, že odkazy na skripty odpovídají skriptům ve složce Scripts projektu.
<!DOCTYPE html> <html> <head> <title>SignalR Simple Chat</title> <style type="text/css"> .container { background-color: #99CCFF; border: thick solid #808080; padding: 20px; margin: 20px; } </style> </head> <body> <div class="container"> <input type="text" id="message" /> <input type="button" id="sendmessage" value="Send" /> <input type="hidden" id="displayname" /> <ul id="discussion"></ul> </div> <!--Script references. --> <!--Reference the jQuery library. --> <script src="Scripts/jquery-1.6.4.min.js"></script> <!--Reference the SignalR library. --> <script src="Scripts/jquery.signalR-2.1.0.min.js"></script> <!--Reference the autogenerated SignalR hub script. --> <script src="http://localhost:8080/signalr/hubs"></script> <!--Add script to update the page and send messages.--> <script type="text/javascript"> $(function () { //Set the hubs URL for the connection $.connection.hub.url = "http://localhost:8080/signalr"; // Declare a proxy to reference the hub. var chat = $.connection.myHub; // Create a function that the hub can call to broadcast messages. chat.client.addMessage = function (name, message) { // Html encode display name and message. var encodedName = $('<div />').text(name).html(); var encodedMsg = $('<div />').text(message).html(); // Add the message to the page. $('#discussion').append('<li><strong>' + encodedName + '</strong>: ' + encodedMsg + '</li>'); }; // Get the user name and store it to prepend to messages. $('#displayname').val(prompt('Enter your name:', '')); // Set initial focus to message input box. $('#message').focus(); // Start the connection. $.connection.hub.start().done(function () { $('#sendmessage').click(function () { // Call the Send method on the hub. chat.server.send($('#displayname').val(), $('#message').val()); // Clear text box and reset focus for next comment. $('#message').val('').focus(); }); }); }); </script> </body> </html>
Následující kód (zvýrazněný v ukázce kódu výše) je doplněk, který jste provedli u klienta použitého v kurzu Získání hvězdičky (kromě upgradu kódu na SignalR verze 2 beta). Tento řádek kódu explicitně nastaví adresu URL základního připojení pro SignalR na serveru.
//Set the hubs URL for the connection $.connection.hub.url = "http://localhost:8080/signalr";
Klikněte pravým tlačítkem na řešení a vyberte Nastavit projekty po spuštění.... Vyberte přepínač Více projektů po spuštění a nastavte Akce obou projektů na Spustit.
Klikněte pravým tlačítkem na "Default.html" a vyberte Nastavit jako úvodní stránku.
Spusťte aplikaci. Spustí se server a stránka. Pokud se stránka načte před spuštěním serveru, může být nutné webovou stránku znovu načíst (nebo v ladicím programu vybrat Pokračovat ).
V prohlížeči po zobrazení výzvy zadejte uživatelské jméno. Zkopírujte adresu URL stránky na jinou kartu nebo okno prohlížeče a zadejte jiné uživatelské jméno. Budete moct posílat zprávy z jednoho podokna prohlížeče do druhého, jako v Začínáme kurzu.