Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Warning
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Important
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikel voor de huidige release.
In deze zelfstudie leert u de basisbeginselen van het bouwen van een realtime-app met behulp van SignalR. U leert het volgende:
- Maak een webproject.
 - Voeg de SignalR clientbibliotheek toe.
 - SignalR Een hub maken.
 - Configureer het project om SignalR te gebruiken.
 - Voeg code toe waarmee berichten van elke client naar alle verbonden clients worden verzonden.
 
Aan het einde hebt u een werkende chat-app:
              
              
            
Prerequisites
Visual Studio 2022 met de workload voor ASP.NET en webontwikkeling.
              
            
Een web-app-project maken
Start Visual Studio 2022 en selecteer Een nieuw project maken.
              
              
            
Selecteer in het dialoogvenster Een nieuw project makenASP.NET Core Web App (Razor pagina's) en selecteer vervolgens Volgende.
              
              
            
Voer in het dialoogvenster Configureer uw nieuwe projectSignalRChat in voor projectnaam. Het is belangrijk om het project SignalRChateen naam te geven, inclusief het overeenkomen van het hoofdlettergebruik, zodat de naamruimten overeenkomen met de code in de zelfstudie.
Kies Volgende.
Selecteer in het dialoogvenster Aanvullende informatie de optie .NET 8.0 (Long Term Support) en selecteer vervolgens Maken.
              
              
            
De SignalR-clientbibliotheek toevoegen
De SignalR serverbibliotheek is opgenomen in het gedeelde ASP.NET Core-framework. De JavaScript-clientbibliotheek wordt niet automatisch opgenomen in het project. Voor deze zelfstudie gebruikt u Library Manager (LibMan) om de clientbibliotheek op te halen uit unpkg. 
              unpkgis een snel wereldwijd netwerk voor contentlevering voor alles op npm.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteerClient-Side Bibliotheek>.
In het dialoogvenster Client-Side bibliotheek toevoegen :
- Unpkg voor Provider selecteren
 - Voer in 
@microsoft/signalr@latestvoor bibliotheek. - Selecteer Specifieke bestanden kiezen, vouw de dist/browsermap uit en selecteer 
signalr.jsensignalr.min.js. - Stel doellocatie in op 
wwwroot/js/signalr/. - Selecteer Installeren.
 
              
              
            
LibMan maakt een wwwroot/js/signalr map en kopieert de geselecteerde bestanden ernaar.
SignalR Een hub maken
Een hub is een klasse die fungeert als een pijplijn op hoog niveau die communicatie van clientservers afhandelt.
Maak een Hubs map in de projectmap SignalRChat.
Maak in de Hubs map de ChatHub klasse met de volgende code:
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);
        }
    }
}
De ChatHub klasse neemt over van de SignalRHub klasse. De Hub klasse beheert verbindingen, groepen en berichten.
De SendMessage methode kan worden aangeroepen door een verbonden client om een bericht naar alle clients te verzenden. JavaScript-clientcode die de methode aanroept, wordt verderop in de zelfstudie weergegeven. 
              SignalR code is asynchroon om de maximale schaalbaarheid te bieden.
SignalR configureren
De SignalR server moet worden geconfigureerd om aanvragen door te geven SignalR aan SignalR. Voeg de volgende gemarkeerde code toe aan het Program.cs bestand.
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();
De voorgaande gemarkeerde code voegt SignalR toe aan de systemen voor afhankelijkheidsinjectie en routering in ASP.NET Core.
Clientcode toevoegen SignalR
Vervang de inhoud in Pages/Index.cshtml door de volgende code:
@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>
De voorgaande markeringen:
- Hiermee maakt u tekstvakken en een verzendknop.
 - Hiermee maakt u een lijst met 
id="messagesList"voor het weergeven van berichten die zijn ontvangen van de SignalR hub. - Bevat scriptverwijzingen naar SignalR en de 
chat.jsapp-code wordt gemaakt in de volgende stap. 
Maak in de wwwroot/js map een chat.js bestand met de volgende code:
"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();
});
De voorgaande JavaScript:
- Hiermee maakt en start u verbinding.
 - Voegt toe aan de verzendknop een handler die berichten naar de hub verzendt.
 - Voegt toe aan het verbindingsobject een handler die berichten van de hub ontvangt en deze toevoegt aan de lijst.
 
De app uitvoeren
Selecteer Ctrl+F5 om de app uit te voeren zonder foutopsporing.
Kopieer de URL van de adresbalk, open een ander browserexemplaar of tabblad en plak de URL in de adresbalk.
Kies een van beide browsers, voer een naam en bericht in en selecteer de knop Bericht verzenden .
De naam en het bericht worden direct op beide pagina's weergegeven.
              
              
            
Tip
Als de app niet werkt, opent u de hulpprogramma's voor browserontwikkelaars (F12) en gaat u naar de console. Zoek naar mogelijke fouten met betrekking tot HTML- en JavaScript-code. Als signalr.js bijvoorbeeld in een andere map is geplaatst dan aangegeven, werkt de verwijzing naar dat bestand niet, wat resulteert in een 404-fout in de console.
              
               Als er een ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fout is opgetreden in Chrome, voert u de volgende opdrachten uit om het ontwikkelingscertificaat bij te werken:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publiceren naar Azure
Zie Quickstart: Een ASP.NET-web-app implementerenvoor meer informatie over het implementeren in Azure. Zie SignalRSignalR Service.
Volgende stappen
In deze zelfstudie leert u de basisbeginselen van het bouwen van een realtime-app met behulp van SignalR. U leert het volgende:
- Maak een webproject.
 - Voeg de SignalR clientbibliotheek toe.
 - SignalR Een hub maken.
 - Configureer het project om SignalR te gebruiken.
 - Voeg code toe waarmee berichten van elke client naar alle verbonden clients worden verzonden.
 
Aan het einde hebt u een werkende chat-app:
              
              
            
Prerequisites
Visual Studio 2022 met de workload voor ASP.NET en webontwikkeling.
              
            
Een web-app-project maken
Start Visual Studio 2022 en selecteer Een nieuw project maken.
              
              
            
Selecteer in het dialoogvenster Een nieuw project makenASP.NET Core Web App en selecteer vervolgens Volgende.
              
              
            
Voer in het dialoogvenster Configureer uw nieuwe projectSignalRChat in voor projectnaam. Het is belangrijk om het project SignalRChateen naam te geven, inclusief het overeenkomen van het hoofdlettergebruik, zodat de naamruimten overeenkomen met de code in de zelfstudie.
Kies Volgende.
Selecteer in het dialoogvenster Aanvullende informatie.NET 7.0 (Standaardtermondersteuning) en selecteer Vervolgens Maken.
              
              
            
De SignalR-clientbibliotheek toevoegen
De SignalR serverbibliotheek is opgenomen in het gedeelde ASP.NET Core-framework. De JavaScript-clientbibliotheek wordt niet automatisch opgenomen in het project. Voor deze zelfstudie gebruikt u Library Manager (LibMan) om de clientbibliotheek op te halen uit unpkg. 
              unpkgis een snel wereldwijd netwerk voor contentlevering voor alles op npm.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteerClient-Side Bibliotheek>.
In het dialoogvenster Client-Side bibliotheek toevoegen :
- Unpkg voor Provider selecteren
 - Voer in 
@microsoft/signalr@latestvoor bibliotheek. - Selecteer Specifieke bestanden kiezen, vouw de dist/browsermap uit en selecteer 
signalr.jsensignalr.min.js. - Stel doellocatie in op 
wwwroot/js/signalr/. - Selecteer Installeren.
 
              
              
            
LibMan maakt een wwwroot/js/signalr map en kopieert de geselecteerde bestanden ernaar.
SignalR Een hub maken
Een hub is een klasse die fungeert als een pijplijn op hoog niveau die communicatie van clientservers afhandelt.
Maak een Hubs map in de projectmap SignalRChat.
Maak in de Hubs map de ChatHub klasse met de volgende code:
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);
        }
    }
}
De ChatHub klasse neemt over van de SignalRHub klasse. De Hub klasse beheert verbindingen, groepen en berichten.
De SendMessage methode kan worden aangeroepen door een verbonden client om een bericht naar alle clients te verzenden. JavaScript-clientcode die de methode aanroept, wordt verderop in de zelfstudie weergegeven. 
              SignalR code is asynchroon om de maximale schaalbaarheid te bieden.
SignalR configureren
De SignalR server moet worden geconfigureerd om aanvragen door te geven SignalR aan SignalR. Voeg de volgende gemarkeerde code toe aan het Program.cs bestand.
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();
De voorgaande gemarkeerde code voegt SignalR toe aan de systemen voor afhankelijkheidsinjectie en routering in ASP.NET Core.
Clientcode toevoegen SignalR
Vervang de inhoud in Pages/Index.cshtml door de volgende code:
@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>
De voorgaande markeringen:
- Hiermee maakt u tekstvakken en een verzendknop.
 - Hiermee maakt u een lijst met 
id="messagesList"voor het weergeven van berichten die zijn ontvangen van de SignalR hub. - Bevat scriptverwijzingen naar SignalR en de 
chat.jsapp-code wordt gemaakt in de volgende stap. 
Maak in de wwwroot/js map een chat.js bestand met de volgende code:
"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();
});
De voorgaande JavaScript:
- Hiermee maakt en start u verbinding.
 - Voegt toe aan de verzendknop een handler die berichten naar de hub verzendt.
 - Voegt toe aan het verbindingsobject een handler die berichten van de hub ontvangt en deze toevoegt aan de lijst.
 
De app uitvoeren
Selecteer Ctrl+F5 om de app uit te voeren zonder foutopsporing.
Kopieer de URL van de adresbalk, open een ander browserexemplaar of tabblad en plak de URL in de adresbalk.
Kies een van beide browsers, voer een naam en bericht in en selecteer de knop Bericht verzenden .
De naam en het bericht worden direct op beide pagina's weergegeven.
              
              
            
Tip
Als de app niet werkt, opent u de hulpprogramma's voor browserontwikkelaars (F12) en gaat u naar de console. Zoek naar mogelijke fouten met betrekking tot HTML- en JavaScript-code. Als signalr.js bijvoorbeeld in een andere map is geplaatst dan aangegeven, werkt de verwijzing naar dat bestand niet, wat resulteert in een 404-fout in de console.
              
               Als er een ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fout is opgetreden in Chrome, voert u de volgende opdrachten uit om het ontwikkelingscertificaat bij te werken:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publiceren naar Azure
Zie Quickstart: Een ASP.NET-web-app implementerenvoor meer informatie over het implementeren in Azure. Zie SignalRSignalR Service.
Volgende stappen
In deze zelfstudie leert u de basisbeginselen van het bouwen van een realtime-app met behulp van SignalR. U leert het volgende:
- Maak een webproject.
 - Voeg de SignalR clientbibliotheek toe.
 - SignalR Een hub maken.
 - Configureer het project om SignalR te gebruiken.
 - Voeg code toe waarmee berichten van elke client naar alle verbonden clients worden verzonden.
 
Aan het einde hebt u een werkende chat-app:
              
              
            
Prerequisites
- Visual Studio 2022 met de workload voor ASP.NET en webontwikkeling.
 - .NET 6 SDK
 
Een web-app-project maken
Start Visual Studio 2022 en selecteer Een nieuw project maken.
              
              
            
Selecteer in het dialoogvenster Een nieuw project makenASP.NET Core Web App en selecteer vervolgens Volgende.
              
              
            
Voer in het dialoogvenster Configureer uw nieuwe projectSignalRChat in voor projectnaam. Het is belangrijk om het project SignalRChateen naam te geven, inclusief het overeenkomen van het hoofdlettergebruik, zodat de naamruimten overeenkomen met de code in de zelfstudie.
Kies Volgende.
Selecteer in het dialoogvenster Aanvullende informatie.NET 6.0 (langetermijnondersteuning) en selecteer vervolgens Maken.
              
              
            
De SignalR-clientbibliotheek toevoegen
De SignalR serverbibliotheek is opgenomen in het gedeelde ASP.NET Core-framework. De JavaScript-clientbibliotheek wordt niet automatisch opgenomen in het project. Voor deze zelfstudie gebruikt u Library Manager (LibMan) om de clientbibliotheek op te halen uit unpkg. 
              unpkgis een snel wereldwijd netwerk voor contentlevering voor alles op npm.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteerClient-Side Bibliotheek>.
In het dialoogvenster Client-Side bibliotheek toevoegen :
- Unpkg voor Provider selecteren
 - Voer in 
@microsoft/signalr@latestvoor bibliotheek. - Selecteer Specifieke bestanden kiezen, vouw de dist/browsermap uit en selecteer 
signalr.jsensignalr.min.js. - Stel doellocatie in op 
wwwroot/js/signalr/. - Selecteer Installeren.
 
              
              
            
LibMan maakt een wwwroot/js/signalr map en kopieert de geselecteerde bestanden ernaar.
SignalR Een hub maken
Een hub is een klasse die fungeert als een pijplijn op hoog niveau die communicatie van clientservers afhandelt.
Maak een Hubs map in de projectmap SignalRChat.
Maak in de Hubs map de ChatHub klasse met de volgende code:
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);
        }
    }
}
De ChatHub klasse neemt over van de SignalRHub klasse. De Hub klasse beheert verbindingen, groepen en berichten.
De SendMessage methode kan worden aangeroepen door een verbonden client om een bericht naar alle clients te verzenden. JavaScript-clientcode die de methode aanroept, wordt verderop in de zelfstudie weergegeven. 
              SignalR code is asynchroon om de maximale schaalbaarheid te bieden.
SignalR configureren
De SignalR server moet worden geconfigureerd om aanvragen door te geven SignalR aan SignalR. Voeg de volgende gemarkeerde code toe aan het Program.cs bestand.
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();
De voorgaande gemarkeerde code voegt SignalR toe aan de systemen voor afhankelijkheidsinjectie en routering in ASP.NET Core.
Clientcode toevoegen SignalR
Vervang de inhoud in Pages/Index.cshtml door de volgende code:
@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>
De voorgaande markeringen:
- Hiermee maakt u tekstvakken en een verzendknop.
 - Hiermee maakt u een lijst met 
id="messagesList"voor het weergeven van berichten die zijn ontvangen van de SignalR hub. - Bevat scriptverwijzingen naar SignalR en de 
chat.jsapp-code wordt gemaakt in de volgende stap. 
Maak in de wwwroot/js map een chat.js bestand met de volgende code:
"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();
});
De voorgaande JavaScript:
- Hiermee maakt en start u verbinding.
 - Voegt toe aan de verzendknop een handler die berichten naar de hub verzendt.
 - Voegt toe aan het verbindingsobject een handler die berichten van de hub ontvangt en deze toevoegt aan de lijst.
 
De app uitvoeren
Druk op Ctrl+F5 om de app uit te voeren zonder foutopsporing.
Kopieer de URL van de adresbalk, open een ander browserexemplaar of tabblad en plak de URL in de adresbalk.
Kies een van beide browsers, voer een naam en bericht in en selecteer de knop Bericht verzenden .
De naam en het bericht worden direct op beide pagina's weergegeven.
              
              
            
Tip
Als de app niet werkt, opent u de hulpprogramma's voor browserontwikkelaars (F12) en gaat u naar de console. Zoek naar mogelijke fouten met betrekking tot HTML- en JavaScript-code. Als signalr.js bijvoorbeeld in een andere map is geplaatst dan aangegeven, werkt de verwijzing naar dat bestand niet, wat resulteert in een 404-fout in de console.
              
               Als er een ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY fout is opgetreden in Chrome, voert u de volgende opdrachten uit om het ontwikkelingscertificaat bij te werken:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Publiceren naar Azure
Zie Quickstart: Een ASP.NET-web-app implementerenvoor meer informatie over het implementeren in Azure. Zie SignalRSignalR Service.
Volgende stappen
In deze zelfstudie leert u de basisbeginselen van het bouwen van een realtime-app met behulp van SignalR. U leert het volgende:
- Maak een webproject.
 - Voeg de SignalR clientbibliotheek toe.
 - SignalR Een hub maken.
 - Configureer het project om SignalR te gebruiken.
 - Voeg code toe waarmee berichten van elke client naar alle verbonden clients worden verzonden.
 
Aan het einde hebt u een werkende chat-app:
              
              
            
Prerequisites
- Visual Studio 2019 16.4 of hoger met de ASP.NET- en webontwikkelingsworkload
 - .NET Core 3.1 SDK
 
Een web-app-project maken
- Selecteer bestand > nieuw project in het menu.
 - Selecteer in het dialoogvenster Een nieuw project makenASP.NET Core-webtoepassing en selecteer vervolgens Volgende.
 - Geef in het dialoogvenster Uw nieuwe project configureren de naam van het project SignalRChat en selecteer vervolgens Maken.
 - Selecteer in het dialoogvenster Een nieuwe ASP.NET Core-webtoepassingmaken .NET Core en ASP.NET Core 3.1.
 - Selecteer Webtoepassing om een project te maken dat gebruikmaakt van Razor Pages en selecteer vervolgens Maken.
 
              
              
            
De SignalR-clientbibliotheek toevoegen
De SignalR serverbibliotheek is opgenomen in het gedeelde framework ASP.NET Core 3.1. De JavaScript-clientbibliotheek wordt niet automatisch opgenomen in het project. Voor deze zelfstudie gebruikt u Library Manager (LibMan) om de clientbibliotheek op te halen uit unpkg. unpkg is een CDN (Content Delivery Network) dat alles kan leveren in npm, de Node.js package manager.
- Klik in Solution Explorer met de rechtermuisknop op het project en selecteerClient-Side Bibliotheek>.
 - Selecteer unpkg in het dialoogvenster Client-Side Bibliotheek toevoegen voor Provider.
 - Voer voor Bibliotheek in 
@microsoft/signalr@latest. - Selecteer Specifieke bestanden kiezen, vouw de dist/browsermap uit en selecteer 
signalr.jsensignalr.min.js. - Doelmap instellen op wwwroot/js/signalr/
 - Installeren selecteren
 
              
              
            
LibMan maakt een map wwwroot/js/signalr en kopieert de geselecteerde bestanden ernaar.
SignalR Een hub maken
Een hub is een klasse die fungeert als een pijplijn op hoog niveau die communicatie van clientservers afhandelt.
- Maak in de projectmap SignalRChat een Hubs map.
 - Maak in de map Hubs een 
ChatHub.csbestand met de volgende code: 
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);
        }
    }
}
De ChatHub klasse neemt over van de SignalRHub klasse. De Hub klasse beheert verbindingen, groepen en berichten.
De SendMessage methode kan worden aangeroepen door een verbonden client om een bericht naar alle clients te verzenden. JavaScript-clientcode die de methode aanroept, wordt verderop in de zelfstudie weergegeven. 
              SignalR code is asynchroon om de maximale schaalbaarheid te bieden.
SignalR configureren
De SignalR server moet worden geconfigureerd om aanvragen door te geven SignalR aan SignalR.
Voeg de volgende gemarkeerde code toe aan het
Startup.csbestand.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"); }); } } }Deze wijzigingen voegen SignalR toe aan de ASP.NET Core-afhankelijkheidsinjectie- en routeringssystemen.
Clientcode toevoegen SignalR
Vervang de inhoud in
Pages/Index.cshtmldoor de volgende code:@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>De voorgaande code:
- Hiermee maakt u tekstvakken voor naam en berichttekst en een verzendknop.
 - Hiermee maakt u een lijst met 
id="messagesList"voor het weergeven van berichten die zijn ontvangen van de SignalR hub. - Bevat scriptverwijzingen naar SignalR en de 
chat.jstoepassingscode die u in de volgende stap maakt. 
Maak in de map wwwroot/js een
chat.jsbestand met de volgende code:"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(); });De voorgaande code:
- Hiermee maakt en start u verbinding.
 - Voegt toe aan de verzendknop een handler die berichten naar de hub verzendt.
 - Voegt toe aan het verbindingsobject een handler die berichten van de hub ontvangt en deze toevoegt aan de lijst.
 
De app uitvoeren
- Druk op Ctrl+F5 om de app uit te voeren zonder foutopsporing.
 
- Kopieer de URL van de adresbalk, open een ander browserexemplaar of tabblad en plak de URL in de adresbalk.
 - Kies een van beide browsers, voer een naam en bericht in en selecteer de knop Bericht verzenden . De naam en het bericht worden direct op beide pagina's weergegeven.
 
              
              
            
Tip
Als de app niet werkt, opent u uw hulpprogramma's voor browserontwikkelaars (F12) en gaat u naar de console. Mogelijk ziet u fouten met betrekking tot uw HTML- en JavaScript-code. Stel dat u
signalr.jsin een andere map plaatst dan aangegeven. In dat geval werkt de verwijzing naar dat bestand niet en ziet u een 404-fout in de console.
              
            Als u de foutmelding ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY in Chrome ontvangt, voert u deze opdrachten uit om uw ontwikkelingscertificaat bij te werken:
dotnet dev-certs https --clean dotnet dev-certs https --trust
Publiceren naar Azure
Zie Quickstart: Een ASP.NET-web-app implementerenvoor meer informatie over het implementeren in Azure.