Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Important
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
I den här handledningen lär du grunderna i att skapa en realtidsapp med hjälp av SignalR. Du lär dig att:
- Skapa ett webbprojekt.
- SignalR Lägg till klientbiblioteket.
- Skapa en SignalR hubb.
- Konfigurera projektet så att det använder SignalR.
- Lägg till kod som skickar meddelanden från alla klienter till alla anslutna klienter.
I slutet har du en fungerande chattapp:
Prerequisites
Visual Studio 2022 med arbetsuppgiften ASP.NET och webbutveckling.
Skapa ett webbappsprojekt
Starta Visual Studio 2022 och välj Skapa ett nytt projekt.
I dialogrutan Skapa ett nytt projekt väljer du ASP.NET Core Web App (Razor Pages) och väljer sedan Nästa.
I dialogrutan Konfigurera det nya projektet anger du SignalRChat som Projektnamn. Det är viktigt att namnge projektet SignalRChat och se till att versalerna matchar, så att namnrymderna matchar koden i handledningen.
Välj Nästa.
I dialogrutan Ytterligare information väljer du .NET 8.0 (långsiktig support) och väljer sedan Skapa.
Lägg till SignalR-klientbiblioteket
Serverbiblioteket SignalR ingår i det delade ramverket ASP.NET Core. JavaScript-klientbiblioteket ingår inte automatiskt i projektet. I den här självstudien använder du Bibliotekshanteraren (LibMan) för att hämta klientbiblioteket från unpkg.
unpkgär ett snabbt, globalt nätverk för innehållsleverans för allt på npm.
Högerklicka på projektet i Solution Explorer och välj Lägg till>Client-Side-bibliotek.
I dialogrutan Lägg till Client-Side-bibliotek :
- Välj unpkg för provider
- Ange
@microsoft/signalr@latestför Bibliotek. - Välj Välj specifika filer, expandera mappen dist/browser och välj
signalr.jsochsignalr.min.js. - Ange Målplats till
wwwroot/js/signalr/. - Välj Installera.
LibMan skapar en wwwroot/js/signalr mapp och kopierar de markerade filerna till den.
Skapa en SignalR hubb
En hubb är en klass som fungerar som en pipeline på hög nivå som hanterar kommunikation mellan klient och server.
Skapa en Hubs mapp i projektmappen SignalRChat.
Hubs Skapa klassen i mappen ChatHub med följande kod:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Klassen ChatHub ärver från SignalRHub klassen. Klassen Hub hanterar anslutningar, grupper och meddelanden.
Metoden SendMessage kan anropas av en ansluten klient för att skicka ett meddelande till alla klienter. JavaScript-klientkod som anropar metoden visas senare i självstudien.
SignalR koden är asynkron för att ge maximal skalbarhet.
Konfigurera SignalR
Servern SignalR måste konfigureras för att skicka SignalR begäranden till SignalR. Lägg till följande markerade kod i Program.cs filen.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
Den föregående markerade koden lägger SignalR till i ASP.NET Core-beroendeinmatnings- och routningssystem.
Lägg till SignalR klientkod
Ersätt innehållet i Pages/Index.cshtml med följande kod:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
Föregående markering:
- Skapar textrutor och en skicka-knapp.
- Skapar en lista med
id="messagesList"för att visa meddelanden som tas emot från SignalR hubben. - Innehåller skriptreferenser till SignalR och
chat.jsappkoden skapas i nästa steg.
I mappen wwwroot/js skapar du en chat.js fil med följande kod:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
Föregående JavaScript:
- Skapar och startar en anslutning.
- Lägger till en hanterare i skicka-knappen som skickar meddelanden till hubben.
- Lägger till en hanterare i anslutningsobjektet som tar emot meddelanden från hubben och lägger till dem i listan.
Kör appen
Välj Ctrl+F5 för att köra appen utan felsökning.
Kopiera URL:en från adressfältet, öppna en annan webbläsarinstans eller flik och klistra in URL:en i adressfältet.
Välj någon av webbläsarna, ange ett namn och ett meddelande och välj knappen Skicka meddelande .
Namnet och meddelandet visas omedelbart på båda sidorna.
Tip
Om appen inte fungerar öppnar du webbläsarutvecklarverktygen (F12) och går till konsolen. Leta efter möjliga fel som rör HTML- och JavaScript-kod. Om signalr.js har placerats i en annan mapp än den angivna, kommer referensen till filen inte att fungera, vilket resulterar i ett 404-fel i konsolen.
Om ett ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fel har uppstått i Chrome kör du följande kommandon för att uppdatera utvecklingscertifikatet:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicera till Azure
Information om hur du distribuerar till Azure finns i Snabbstart: Distribuera en ASP.NET webbapp. Mer information om Azure SignalR Service finns i Vad är Azure SignalR Service?.
Nästa steg
I den här handledningen lär du grunderna i att skapa en realtidsapp med hjälp av SignalR. Du lär dig att:
- Skapa ett webbprojekt.
- SignalR Lägg till klientbiblioteket.
- Skapa en SignalR hubb.
- Konfigurera projektet så att det använder SignalR.
- Lägg till kod som skickar meddelanden från alla klienter till alla anslutna klienter.
I slutet har du en fungerande chattapp:
Prerequisites
Visual Studio 2022 med arbetsuppgiften ASP.NET och webbutveckling.
Skapa ett webbappsprojekt
Starta Visual Studio 2022 och välj Skapa ett nytt projekt.
I dialogrutan Skapa ett nytt projekt väljer du ASP.NET Core Web App och väljer sedan Nästa.
I dialogrutan Konfigurera det nya projektet anger du SignalRChat som Projektnamn. Det är viktigt att namnge projektet SignalRChat och se till att versalerna matchar, så att namnrymderna matchar koden i handledningen.
Välj Nästa.
I dialogrutan Ytterligare information väljer du .NET 7.0 (Standard Term Support) och väljer sedan Skapa.
Lägg till SignalR-klientbiblioteket
Serverbiblioteket SignalR ingår i det delade ramverket ASP.NET Core. JavaScript-klientbiblioteket ingår inte automatiskt i projektet. I den här självstudien använder du Bibliotekshanteraren (LibMan) för att hämta klientbiblioteket från unpkg.
unpkgär ett snabbt, globalt nätverk för innehållsleverans för allt på npm.
Högerklicka på projektet i Solution Explorer och välj Lägg till>Client-Side-bibliotek.
I dialogrutan Lägg till Client-Side-bibliotek :
- Välj unpkg för provider
- Ange
@microsoft/signalr@latestför Bibliotek. - Välj Välj specifika filer, expandera mappen dist/browser och välj
signalr.jsochsignalr.min.js. - Ange Målplats till
wwwroot/js/signalr/. - Välj Installera.
LibMan skapar en wwwroot/js/signalr mapp och kopierar de markerade filerna till den.
Skapa en SignalR hubb
En hubb är en klass som fungerar som en pipeline på hög nivå som hanterar kommunikation mellan klient och server.
Skapa en Hubs mapp i projektmappen SignalRChat.
Hubs Skapa klassen i mappen ChatHub med följande kod:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Klassen ChatHub ärver från SignalRHub klassen. Klassen Hub hanterar anslutningar, grupper och meddelanden.
Metoden SendMessage kan anropas av en ansluten klient för att skicka ett meddelande till alla klienter. JavaScript-klientkod som anropar metoden visas senare i självstudien.
SignalR koden är asynkron för att ge maximal skalbarhet.
Konfigurera SignalR
Servern SignalR måste konfigureras för att skicka SignalR begäranden till SignalR. Lägg till följande markerade kod i Program.cs filen.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
Den föregående markerade koden lägger SignalR till i ASP.NET Core-beroendeinmatnings- och routningssystem.
Lägg till SignalR klientkod
Ersätt innehållet i Pages/Index.cshtml med följande kod:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
Föregående markering:
- Skapar textrutor och en skicka-knapp.
- Skapar en lista med
id="messagesList"för att visa meddelanden som tas emot från SignalR hubben. - Innehåller skriptreferenser till SignalR och
chat.jsappkoden skapas i nästa steg.
I mappen wwwroot/js skapar du en chat.js fil med följande kod:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
Föregående JavaScript:
- Skapar och startar en anslutning.
- Lägger till en hanterare i skicka-knappen som skickar meddelanden till hubben.
- Lägger till en hanterare i anslutningsobjektet som tar emot meddelanden från hubben och lägger till dem i listan.
Kör appen
Välj Ctrl+F5 för att köra appen utan felsökning.
Kopiera URL:en från adressfältet, öppna en annan webbläsarinstans eller flik och klistra in URL:en i adressfältet.
Välj någon av webbläsarna, ange ett namn och ett meddelande och välj knappen Skicka meddelande .
Namnet och meddelandet visas omedelbart på båda sidorna.
Tip
Om appen inte fungerar öppnar du webbläsarutvecklarverktygen (F12) och går till konsolen. Leta efter möjliga fel som rör HTML- och JavaScript-kod. Om signalr.js har placerats i en annan mapp än den angivna, kommer referensen till filen inte att fungera, vilket resulterar i ett 404-fel i konsolen.
Om ett ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fel har uppstått i Chrome kör du följande kommandon för att uppdatera utvecklingscertifikatet:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicera till Azure
Information om hur du distribuerar till Azure finns i Snabbstart: Distribuera en ASP.NET webbapp. Mer information om Azure SignalR Service finns i Vad är Azure SignalR Service?.
Nästa steg
I den här handledningen lär du grunderna i att skapa en realtidsapp med hjälp av SignalR. Du lär dig att:
- Skapa ett webbprojekt.
- SignalR Lägg till klientbiblioteket.
- Skapa en SignalR hubb.
- Konfigurera projektet så att det använder SignalR.
- Lägg till kod som skickar meddelanden från alla klienter till alla anslutna klienter.
I slutet har du en fungerande chattapp:
Prerequisites
- Visual Studio 2022 med arbetsuppgiften ASP.NET och webbutveckling.
- .NET 6 SDK
Skapa ett webbappsprojekt
Starta Visual Studio 2022 och välj Skapa ett nytt projekt.
I dialogrutan Skapa ett nytt projekt väljer du ASP.NET Core Web App och väljer sedan Nästa.
I dialogrutan Konfigurera det nya projektet anger du SignalRChat som Projektnamn. Det är viktigt att namnge projektet SignalRChat och se till att versalerna matchar, så att namnrymderna matchar koden i handledningen.
Välj Nästa.
I dialogrutan Ytterligare information väljer du .NET 6.0 (långsiktigt stöd) och sedan Skapa.
Lägg till SignalR-klientbiblioteket
Serverbiblioteket SignalR ingår i det delade ramverket ASP.NET Core. JavaScript-klientbiblioteket ingår inte automatiskt i projektet. I den här självstudien använder du Bibliotekshanteraren (LibMan) för att hämta klientbiblioteket från unpkg.
unpkgär ett snabbt, globalt nätverk för innehållsleverans för allt på npm.
Högerklicka på projektet i Solution Explorer och välj Lägg till>Client-Side-bibliotek.
I dialogrutan Lägg till Client-Side-bibliotek :
- Välj unpkg för provider
- Ange
@microsoft/signalr@latestför Bibliotek. - Välj Välj specifika filer, expandera mappen dist/browser och välj
signalr.jsochsignalr.min.js. - Ange Målplats till
wwwroot/js/signalr/. - Välj Installera.
LibMan skapar en wwwroot/js/signalr mapp och kopierar de markerade filerna till den.
Skapa en SignalR hubb
En hubb är en klass som fungerar som en pipeline på hög nivå som hanterar kommunikation mellan klient och server.
Skapa en Hubs mapp i projektmappen SignalRChat.
Hubs Skapa klassen i mappen ChatHub med följande kod:
using Microsoft.AspNetCore.SignalR;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Klassen ChatHub ärver från SignalRHub klassen. Klassen Hub hanterar anslutningar, grupper och meddelanden.
Metoden SendMessage kan anropas av en ansluten klient för att skicka ett meddelande till alla klienter. JavaScript-klientkod som anropar metoden visas senare i självstudien.
SignalR koden är asynkron för att ge maximal skalbarhet.
Konfigurera SignalR
Servern SignalR måste konfigureras för att skicka SignalR begäranden till SignalR. Lägg till följande markerade kod i Program.cs filen.
using SignalRChat.Hubs;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSignalR();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.MapHub<ChatHub>("/chatHub");
app.Run();
Den föregående markerade koden lägger SignalR till i ASP.NET Core-beroendeinmatnings- och routningssystem.
Lägg till SignalR klientkod
Ersätt innehållet i Pages/Index.cshtml med följande kod:
@page
<div class="container">
<div class="row p-1">
<div class="col-1">User</div>
<div class="col-5"><input type="text" id="userInput" /></div>
</div>
<div class="row p-1">
<div class="col-1">Message</div>
<div class="col-5"><input type="text" class="w-100" id="messageInput" /></div>
</div>
<div class="row p-1">
<div class="col-6 text-end">
<input type="button" id="sendButton" value="Send Message" />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<hr />
</div>
</div>
<div class="row p-1">
<div class="col-6">
<ul id="messagesList"></ul>
</div>
</div>
</div>
<script src="~/js/signalr/dist/browser/signalr.js"></script>
<script src="~/js/chat.js"></script>
Föregående markering:
- Skapar textrutor och en skicka-knapp.
- Skapar en lista med
id="messagesList"för att visa meddelanden som tas emot från SignalR hubben. - Innehåller skriptreferenser till SignalR och
chat.jsappkoden skapas i nästa steg.
I mappen wwwroot/js skapar du en chat.js fil med följande kod:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable the send button until connection is established.
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var li = document.createElement("li");
document.getElementById("messagesList").appendChild(li);
// We can assign user-supplied strings to an element's textContent because it
// is not interpreted as markup. If you're assigning in any other way, you
// should be aware of possible script injection concerns.
li.textContent = `${user} says ${message}`;
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});
Föregående JavaScript:
- Skapar och startar en anslutning.
- Lägger till en hanterare i skicka-knappen som skickar meddelanden till hubben.
- Lägger till en hanterare i anslutningsobjektet som tar emot meddelanden från hubben och lägger till dem i listan.
Kör appen
Tryck på CTRL+F5 för att köra appen utan att felsöka.
Kopiera URL:en från adressfältet, öppna en annan webbläsarinstans eller flik och klistra in URL:en i adressfältet.
Välj någon av webbläsarna, ange ett namn och ett meddelande och välj knappen Skicka meddelande .
Namnet och meddelandet visas omedelbart på båda sidorna.
Tip
Om appen inte fungerar öppnar du webbläsarutvecklarverktygen (F12) och går till konsolen. Leta efter möjliga fel som rör HTML- och JavaScript-kod. Om signalr.js har placerats i en annan mapp än den angivna, kommer referensen till filen inte att fungera, vilket resulterar i ett 404-fel i konsolen.
Om ett ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fel har uppstått i Chrome kör du följande kommandon för att uppdatera utvecklingscertifikatet:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publicera till Azure
Information om hur du distribuerar till Azure finns i Snabbstart: Distribuera en ASP.NET webbapp. Mer information om Azure SignalR Service finns i Vad är Azure SignalR Service?.
Nästa steg
I den här handledningen lär du grunderna i att skapa en realtidsapp med hjälp av SignalR. Du lär dig att:
- Skapa ett webbprojekt.
- SignalR Lägg till klientbiblioteket.
- Skapa en SignalR hubb.
- Konfigurera projektet så att det använder SignalR.
- Lägg till kod som skickar meddelanden från alla klienter till alla anslutna klienter.
I slutet har du en fungerande chattapp:
Prerequisites
- Visual Studio 2019 16.4 eller senare med arbetsbelastningen ASP.NET och webbutveckling
- .NET Core 3.1 SDK
Skapa ett webbappsprojekt
- Välj Arkiv > Nytt projekt på menyn.
- I dialogrutan Skapa ett nytt projekt väljer du ASP.NET Core Web Application och sedan Nästa.
- I dialogrutan Konfigurera det nya projektet ger du projektet namnet SignalRChat och väljer sedan Skapa.
- I dialogrutan Skapa ett nytt ASP.NET Core-webbprogram väljer du .NET Core och ASP.NET Core 3.1.
- Välj Webbprogram för att skapa ett projekt som använder Razor sidor och välj sedan Skapa.
Lägg till SignalR-klientbiblioteket
Serverbiblioteket SignalR ingår i det delade ramverket ASP.NET Core 3.1. JavaScript-klientbiblioteket ingår inte automatiskt i projektet. I den här självstudien använder du Bibliotekshanteraren (LibMan) för att hämta klientbiblioteket från unpkg. unpkg är ett nätverk för innehållsleverans (CDN) som kan leverera allt som finns i npm, Node.js pakethanteraren.
- Högerklicka på projektet i Solution Explorer och välj Lägg till>Client-Side-bibliotek.
- I dialogrutan Lägg till Client-Side bibliotek väljer du unpkg för Provider.
- För Bibliotek anger du
@microsoft/signalr@latest. - Välj Välj specifika filer, expandera mappen dist/browser och välj
signalr.jsochsignalr.min.js. - Ange målplats till wwwroot/js/signalr/
- Välj Installera
LibMan skapar en wwwroot/js/signalr-mapp och kopierar de markerade filerna till den.
Skapa en SignalR hubb
En hubb är en klass som fungerar som en pipeline på hög nivå som hanterar kommunikation mellan klient och server.
- Skapa en Hubs-mapp i projektmappen SignalRChat.
- I mappen Hubs skapar du en
ChatHub.csfil med följande kod:
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
Klassen ChatHub ärver från SignalRHub klassen. Klassen Hub hanterar anslutningar, grupper och meddelanden.
Metoden SendMessage kan anropas av en ansluten klient för att skicka ett meddelande till alla klienter. JavaScript-klientkod som anropar metoden visas senare i självstudien.
SignalR koden är asynkron för att ge maximal skalbarhet.
Konfigurera SignalR
Servern SignalR måste konfigureras för att skicka SignalR begäranden till SignalR.
Lägg till följande markerade kod i
Startup.csfilen.using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SignalRChat.Hubs; namespace SignalRChat { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddSignalR(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapHub<ChatHub>("/chatHub"); }); } } }Dessa ändringar lägger till SignalR i ASP.NET Core-beroendeinmatnings- och routningssystem.
Lägg till SignalR klientkod
Ersätt innehållet i
Pages/Index.cshtmlmed följande kod:@page <div class="container"> <div class="row p-1"> <div class="col-1">User</div> <div class="col-5"><input type="text" id="userInput" /></div> </div> <div class="row p-1"> <div class="col-1">Message</div> <div class="col-5"><input type="text" class="w-100" id="messageInput" /></div> </div> <div class="row p-1"> <div class="col-6 text-end"> <input type="button" id="sendButton" value="Send Message" /> </div> </div> <div class="row p-1"> <div class="col-6"> <hr /> </div> </div> <div class="row p-1"> <div class="col-6"> <ul id="messagesList"></ul> </div> </div> </div> <script src="~/js/signalr/dist/browser/signalr.js"></script> <script src="~/js/chat.js"></script>Föregående kod:
- Skapar textrutor för namn och meddelandetext och en skicka-knapp.
- Skapar en lista med
id="messagesList"för att visa meddelanden som tas emot från SignalR hubben. - Innehåller skriptreferenser till SignalR och programkoden
chat.jssom du skapar i nästa steg.
I mappen wwwroot/js skapar du en
chat.jsfil med följande kod:"use strict"; var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build(); //Disable send button until connection is established document.getElementById("sendButton").disabled = true; connection.on("ReceiveMessage", function (user, message) { var li = document.createElement("li"); document.getElementById("messagesList").appendChild(li); // We can assign user-supplied strings to an element's textContent because it // is not interpreted as markup. If you're assigning in any other way, you // should be aware of possible script injection concerns. li.textContent = `${user} says ${message}`; }); connection.start().then(function () { document.getElementById("sendButton").disabled = false; }).catch(function (err) { return console.error(err.toString()); }); document.getElementById("sendButton").addEventListener("click", function (event) { var user = document.getElementById("userInput").value; var message = document.getElementById("messageInput").value; connection.invoke("SendMessage", user, message).catch(function (err) { return console.error(err.toString()); }); event.preventDefault(); });Föregående kod:
- Skapar och startar en anslutning.
- Lägger till en hanterare i skicka-knappen som skickar meddelanden till hubben.
- Lägger till en hanterare i anslutningsobjektet som tar emot meddelanden från hubben och lägger till dem i listan.
Kör appen
- Tryck på CTRL+F5 för att köra appen utan att felsöka.
- Kopiera URL:en från adressfältet, öppna en annan webbläsarinstans eller flik och klistra in URL:en i adressfältet.
- Välj någon av webbläsarna, ange ett namn och ett meddelande och välj knappen Skicka meddelande . Namnet och meddelandet visas omedelbart på båda sidorna.
Tip
Om appen inte fungerar öppnar du webbläsarutvecklarverktygen (F12) och går till konsolen. Du kan se fel som rör HTML- och JavaScript-koden. Anta till exempel att du placerar
signalr.jsi en annan mapp än den som har dirigerats. I så fall fungerar inte referensen till filen och du ser ett 404-fel i konsolen.
Om du får felet ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY i Chrome kör du följande kommandon för att uppdatera utvecklingscertifikatet:
dotnet dev-certs https --clean dotnet dev-certs https --trust
Publicera till Azure
Information om hur du distribuerar till Azure finns i Snabbstart: Distribuera en ASP.NET webbapp.
Nästa steg
ASP.NET Core