Delen via


ASP.NET Core SignalR-configuratie

In dit artikel wordt ASP.NET Core-configuratie SignalR behandeld.

Zie BlazorSignalRASP.NET Kernrichtlijnen BlazorSignalRvoor hulp die wordt toegevoegd aan of vervangen door de richtlijnen in dit artikel.

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Startup.ConfigureServices. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Program.cs gebruiken:

builder.Services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.
MaximumParallelInvocationsPerClient 1 Het maximum aantal hubmethoden dat elke client parallel kan aanroepen voordat er een wachtrij ontstaat.
DisableImplicitFromServicesParameters false Hubmethodeargumenten worden indien mogelijk omgezet vanuit DI.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Program.cs.

 builder.Services.AddSignalR(hubOptions =>
 {
     hubOptions.EnableDetailedErrors = true;
     hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
 });

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Program.cs.

using Microsoft.AspNetCore.Http.Connections;

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", options =>
{
    options.Transports =
        HttpTransportType.WebSockets |
        HttpTransportType.LongPolling;
}
);
app.Run();

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 64 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressie toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 64 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.
MinimumProtocolVersion 0 Geef de minimale versie van het onderhandelingsprotocol op. Dit wordt gebruikt om clients te beperken tot nieuwere versies.
CloseOnAuthenticationExpiration onwaar Stel deze optie in om het bijhouden van verificatieverloop in te schakelen, waardoor verbindingen worden gesloten wanneer een token verloopt.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag:

Optie Standaardwaarde Beschrijving
WithServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit en wordt rechtstreeks ingesteld op HubConnectionBuilder. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste het dubbele is van de keep-alive-intervalwaarde (WithKeepAliveInterval) van de server, zodat de tijd voor pings binnenkomt.
HandshakeTimeout 15 seconden Time-out voor eerste serverhandshake en beschikbaar op het HubConnection object zelf. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
WithKeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt en direct is ingesteld op HubConnectionBuilder. Met deze instelling kan de server harde ontkoppelingen herkennen, zoals wanneer een client hun computer loskoppelt van het netwerk. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

In het volgende voorbeeld ziet u waarden die dubbele standaardwaarden zijn:

var builder = new HubConnectionBuilder()
    .WithUrl(Navigation.ToAbsoluteUri("/chathub"))
    .WithServerTimeout(TimeSpan.FromSeconds(60))
    .WithKeepAliveInterval(TimeSpan.FromSeconds(30))
    .Build();

builder.On<string, string>("ReceiveMessage", (user, message) => ...

await builder.StartAsync();

Stel stateful opnieuw verbinden in

SignalR stateful opnieuw verbinding maken vermindert de waargenomen downtime van clients die een tijdelijke onderbreking in hun netwerkverbinding hebben, bijvoorbeeld bij het wisselen van netwerkverbindingen of tijdelijk verlies van toegang.

Stateful opnieuw verbinden bereikt dit door het volgende te doen:

  • Gegevens tijdelijk bufferen op de server en client.
  • Bevestiging van ontvangen berichten (ACK-ing) door zowel de server als de client.
  • Herkennen wanneer een verbinding bezig is en berichten die mogelijk zijn verzonden terwijl de verbinding offline was, opnieuw afspelen.

Stateful opnieuw verbinding maken is beschikbaar in .NET 8 of hoger.

Meld u aan om stateful opnieuw verbinding te maken op zowel het eindpunt van de serverhub als de client:

  • Werk de configuratie van het serverhub-eindpunt bij om de optie AllowStatefulReconnects in te schakelen:

    app.MapHub<MyHub>("/hubName", options =>
    {
        options.AllowStatefulReconnects = true;
    });
    

    Optioneel kan de maximale buffergrootte in bytes die door de server zijn toegestaan, globaal worden ingesteld of voor een specifieke hub met de optie StatefulReconnectBufferSize:

    De StatefulReconnectBufferSize-optie is wereldwijd ingesteld.

    builder.AddSignalR(o => o.StatefulReconnectBufferSize = 1000);
    

    De StatefulReconnectBufferSize-optie die is ingesteld voor een specifieke hub:

    builder.AddSignalR().AddHubOptions<MyHub>(o => o.StatefulReconnectBufferSize = 1000);
    

    De optie StatefulReconnectBufferSize is optioneel met een standaardwaarde van 100.000 bytes.

  • Werk JavaScript- of TypeScript-clientcode bij om de optie withStatefulReconnect in te schakelen:

    const builder = new signalR.HubConnectionBuilder()
      .withUrl("/hubname")
      .withStatefulReconnect({ bufferSize: 1000 });  // Optional, defaults to 100,000
    const connection = builder.build();
    

    De optie bufferSize is optioneel met een standaardwaarde van 100.000 bytes.

  • Werk .NET-clientcode bij om de optie WithStatefulReconnect in te schakelen:

      var builder = new HubConnectionBuilder()
          .WithUrl("<hub url>")
          .WithStatefulReconnect();
      builder.Services.Configure<HubConnectionOptions>(o => o.StatefulReconnectBufferSize = 1000);
      var hubConnection = builder.Build();
    

    De optie StatefulReconnectBufferSize is optioneel met een standaardwaarde van 100.000 bytes.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.
ApplicationMaxBufferSize 1 MB Het maximale aantal bytes dat de client van de server ontvangt en buffert voordat backpressure wordt toegepast. Door deze waarde te verhogen, kan de client sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 1 MB Het maximum aantal bytes dat door de gebruikersapplicatie wordt verzonden en dat de client buffert voordat er sprake is van backpressure. Door deze waarde te verhogen, kan de client sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan op de server worden geconfigureerd met behulp van de AddJsonProtocol-extensiemethode, die na AddSignalR kan worden toegevoegd in uw Startup.ConfigureServices-methode. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerSettings eigenschap op dat object is een Json.NET-object JsonSerializerSettings dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie Json.NET voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren voor het gebruik van PascalCase-eigenschapsnamen in plaats van de standaard camelCase-namen, gebruikt u de volgende code in :

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Startup.ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Startup.Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSignalR((configure) =>
    {
        var desiredTransports =
            HttpTransportType.WebSockets |
            HttpTransportType.LongPolling;

        configure.MapHub<ChatHub>("/chathub", (options) =>
        {
            options.Transports = desiredTransports;
        });
    });
}

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 32 kB Het maximale aantal bytes van de client dat de server buffert. Door deze waarde te verhogen, kan de server grotere berichten ontvangen, maar kan dit een negatieve invloed hebben op het geheugenverbruik.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
TransportMaxBufferSize 32 kB Het maximale aantal bytes dat door de app wordt verzonden en door de server wordt gebufferd. Door deze waarde te verhogen, kan de server grotere berichten verzenden, maar kan dit een negatieve invloed hebben op het geheugenverbruik.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan op de server worden geconfigureerd met behulp van de AddJsonProtocol-extensiemethode, die na AddSignalR kan worden toegevoegd in uw Startup.ConfigureServices-methode. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerSettings eigenschap op dat object is een Json.NET-object JsonSerializerSettings dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie Json.NET voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren voor het gebruik van PascalCase-eigenschapsnamen in plaats van de standaard camelCase-namen, gebruikt u de volgende code in :

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerSettings.ContractResolver =
            new DefaultContractResolver();
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Startup.ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Startup.Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSignalR((configure) =>
    {
        var desiredTransports =
            HttpTransportType.WebSockets |
            HttpTransportType.LongPolling;

        configure.MapHub<ChatHub>("/chathub", (options) =>
        {
            options.Transports = desiredTransports;
        });
    });
}

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 32 kB Het maximale aantal bytes van de client dat de server buffert. Door deze waarde te verhogen, kan de server grotere berichten ontvangen, maar kan dit een negatieve invloed hebben op het geheugenverbruik.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
TransportMaxBufferSize 32 kB Het maximale aantal bytes dat door de app wordt verzonden en door de server wordt gebufferd. Door deze waarde te verhogen, kan de server grotere berichten verzenden, maar kan dit een negatieve invloed hebben op het geheugenverbruik.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Startup.ConfigureServices. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Startup.ConfigureServices gebruiken:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Startup.ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Startup.Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 32 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
TransportMaxBufferSize 32 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Startup.ConfigureServices. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Startup.ConfigureServices gebruiken:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Startup.ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Startup.Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 32 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
TransportMaxBufferSize 32 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.
MinimumProtocolVersion 0 Geef de minimale versie van het onderhandelingsprotocol op. Dit wordt gebruikt om clients te beperken tot nieuwere versies.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        skipNegotiation: true,
        transport: signalR.HttpTransportType.WebSockets
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Startup.ConfigureServices. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Startup.ConfigureServices gebruiken:

services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.
MaximumParallelInvocationsPerClient 1 Het maximum aantal hubmethoden dat elke client parallel kan aanroepen voordat er een wachtrij ontstaat.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Startup.ConfigureServices.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(hubOptions =>
    {
        hubOptions.EnableDetailedErrors = true;
        hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
    });
}

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Startup.Configure.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<ChatHub>("/chathub", options =>
        {
            options.Transports =
                HttpTransportType.WebSockets |
                HttpTransportType.LongPolling;
        });
    });
}

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 32 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
TransportMaxBufferSize 32 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.
MinimumProtocolVersion 0 Geef de minimale versie van het onderhandelingsprotocol op. Dit wordt gebruikt om clients te beperken tot nieuwere versies.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Program.cs. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Program.cs gebruiken:

builder.Services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.
MaximumParallelInvocationsPerClient 1 Het maximum aantal hubmethoden dat elke client parallel kan aanroepen voordat er een wachtrij ontstaat.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Program.cs.

builder.Services.AddSignalR(hubOptions =>
{
    hubOptions.EnableDetailedErrors = true;
    hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Program.cs.

using Microsoft.AspNetCore.Http.Connections;

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", options =>
{
    options.Transports =
        HttpTransportType.WebSockets |
        HttpTransportType.LongPolling;
}
);
app.Run();

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 64 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressie toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 64 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.
MinimumProtocolVersion 0 Geef de minimale versie van het onderhandelingsprotocol op. Dit wordt gebruikt om clients te beperken tot nieuwere versies.
CloseOnAuthenticationExpiration onwaar Stel deze optie in om het bijhouden van verificatieverloop in te schakelen, waardoor verbindingen worden gesloten wanneer een token verloopt.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.
ApplicationMaxBufferSize 1 MB Het maximale aantal bytes dat de client van de server ontvangt en buffert voordat backpressure wordt toegepast. Door deze waarde te verhogen, kan de client sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 1 MB Het maximum aantal bytes dat door de gebruikersapplicatie wordt verzonden en dat de client buffert voordat er sprake is van backpressure. Door deze waarde te verhogen, kan de client sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen

Serialisatieopties voor JSON/MessagePack

ASP.NET Core SignalR ondersteunt twee protocollen voor het coderen van berichten: JSON en MessagePack. Elk protocol heeft serialisatieconfiguratieopties.

JSON-serialisatie kan worden geconfigureerd op de server met behulp van de AddJsonProtocol extensiemethode. AddJsonProtocol kan worden toegevoegd na AddSignalR in Startup.ConfigureServices. De AddJsonProtocol methode gebruikt een gemachtigde die een options object ontvangt. De PayloadSerializerOptions eigenschap op dat object is een System.Text.JsonJsonSerializerOptions object dat kan worden gebruikt voor het configureren van serialisatie van argumenten en retourwaarden. Zie de documentatie system.Text.Json voor meer informatie.

Als u bijvoorbeeld de serializer wilt configureren om het hoofdlettergebruik van eigenschapsnamen niet te wijzigen, in plaats van de standaard camelCase kunt u de volgende code in Program.cs gebruiken:

builder.Services.AddSignalR()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    });

In de .NET-client bestaat dezelfde AddJsonProtocol extensiemethode op HubConnectionBuilder. De Microsoft.Extensions.DependencyInjection naamruimte moet worden geïmporteerd om de extensiemethode op te lossen:

// At the top of the file:
using Microsoft.Extensions.DependencyInjection;

// When constructing your connection:
var connection = new HubConnectionBuilder()
    .AddJsonProtocol(options => {
        options.PayloadSerializerOptions.PropertyNamingPolicy = null;
    })
    .Build();

Opmerking

Het is momenteel niet mogelijk om JSON-serialisatie te configureren in de JavaScript-client.

Overschakelen naar Newtonsoft.Json

Zie Newtonsoft.Json als u functies van System.Text.Json nodig hebt die niet worden ondersteund in Newtonsoft.Json.

Serialisatieopties voor MessagePack

MessagePack-serialisatie kan worden geconfigureerd door een delegate te verstrekken aan de AddMessagePackProtocol oproep. Zie MessagePack in SignalR voor meer informatie.

Opmerking

Het is momenteel niet mogelijk om MessagePack-serialisatie te configureren in de JavaScript-client.

Serveropties configureren

In de volgende tabel worden opties beschreven voor het configureren van SignalR hubs:

Optie Standaardwaarde Beschrijving
ClientTimeoutInterval 30 seconden De server beschouwt de verbinding met de client verbroken als er in dit interval geen bericht (inclusief keep-alive) is ontvangen. Het kan langer duren dan dit time-outinterval voordat de client is gemarkeerd als verbroken vanwege de wijze waarop dit wordt geïmplementeerd. De aanbevolen waarde is het dubbele van de KeepAliveInterval waarde.
HandshakeTimeout 15 seconden Als de client binnen dit tijdsinterval geen eerste handshakebericht verzendt, wordt de verbinding gesloten. Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Als de server binnen dit interval geen bericht heeft verzonden, wordt er automatisch een pingbericht verzonden om de verbinding open te houden. Wanneer u de KeepAliveInterval wijzigt, moet u de ServerTimeout of serverTimeoutInMilliseconds instelling op de client aanpassen. De aanbevolen ServerTimeout waarde of serverTimeoutInMilliseconds waarde is het dubbele van de KeepAliveInterval waarde.
SupportedProtocols Alle geïnstalleerde protocollen Protocollen die door deze hub worden ondersteund. Standaard zijn alle protocollen die op de server zijn geregistreerd, toegestaan. Protocollen kunnen uit deze lijst worden verwijderd om specifieke protocollen voor afzonderlijke hubs uit te schakelen.
EnableDetailedErrors false Als true gedetailleerde uitzonderingsberichten worden geretourneerd naar clients wanneer er een uitzondering wordt gegenereerd in een Hub-methode. De standaardwaarde is false dat deze uitzonderingsberichten gevoelige informatie kunnen bevatten.
StreamBufferCapacity 10 Het maximum aantal items dat kan worden gebufferd voor clientuploadstreams. Als deze limiet is bereikt, wordt de verwerking van aanroepen geblokkeerd totdat de server streamitems verwerkt.
MaximumReceiveMessageSize 32 kB Maximale grootte van één binnenkomend hubbericht. Als u de waarde verhoogt, kan het risico van DoS-aanvallen (Denial of Service) toenemen.
MaximumParallelInvocationsPerClient 1 Het maximum aantal hubmethoden dat elke client parallel kan aanroepen voordat er een wachtrij ontstaat.
DisableImplicitFromServicesParameters false Hubmethodeargumenten worden indien mogelijk omgezet vanuit DI.

Opties kunnen worden geconfigureerd voor alle hubs door een opties delegate mee te geven aan de AddSignalR-aanroep in Program.cs.

 builder.Services.AddSignalR(hubOptions =>
 {
     hubOptions.EnableDetailedErrors = true;
     hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
 });

Opties voor een enkele hub overschrijven de algemene opties die zijn opgegeven in AddSignalR en kunnen worden ingesteld met behulp van AddHubOptions:

builder.Services.AddSignalR().AddHubOptions<ChatHub>(options =>
{
    options.EnableDetailedErrors = true;
});

Geavanceerde HTTP-configuratieopties

Hiermee HttpConnectionDispatcherOptions configureert u geavanceerde instellingen met betrekking tot transporten en geheugenbufferbeheer. Deze opties worden geconfigureerd door een gemachtigde door te geven aan MapHub in Program.cs.

using Microsoft.AspNetCore.Http.Connections;

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", options =>
{
    options.Transports =
        HttpTransportType.WebSockets |
        HttpTransportType.LongPolling;
}
);
app.Run();

In de volgende tabel worden opties beschreven voor het configureren van de geavanceerde HTTP-opties van ASP.NET Core SignalR:

Optie Standaardwaarde Beschrijving
ApplicationMaxBufferSize 64 kB Het maximale aantal bytes dat de server van de client ontvangt en buffert voordat er tegenmaatregelen worden toegepast. Door deze waarde te verhogen, kan de server sneller grotere berichten ontvangen zonder backpressie toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 64 kB Het maximum aantal bytes dat de app verzendt en dat door de server gebufferd wordt voordat de backpressure wordt waargenomen. Door deze waarde te verhogen, kan de server sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.
AuthorizationData Gegevens die automatisch worden verzameld van de Authorize kenmerken die zijn toegepast op de Hub-klasse. Een lijst IAuthorizeData met objecten die worden gebruikt om te bepalen of een client is gemachtigd om verbinding te maken met de hub.
Transports Alle transporten zijn ingeschakeld. Een bit markeert een opsomming van HttpTransportType waarden die de transporten die een client kan gebruiken om verbinding te maken, kan beperken.
LongPolling Zie hieronder. Aanvullende opties die specifiek zijn voor het Long Polling-transport.
WebSockets Zie hieronder. Aanvullende opties die specifiek zijn voor het WebSockets-transport.
MinimumProtocolVersion 0 Geef de minimale versie van het onderhandelingsprotocol op. Dit wordt gebruikt om clients te beperken tot nieuwere versies.
CloseOnAuthenticationExpiration onwaar Stel deze optie in om het bijhouden van verificatieverloop in te schakelen, waardoor verbindingen worden gesloten wanneer een token verloopt.

Het long polling-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de LongPolling eigenschap:

Optie Standaardwaarde Beschrijving
PollTimeout 90 seconden De maximale tijd die de server wacht tot een bericht naar de client wordt verzonden voordat een enkele poll-aanvraag wordt beëindigd. Als u deze waarde verlaagt, zorgt u ervoor dat de client vaker nieuwe poll-aanvragen uitgeeft.

Het WebSocket-transport heeft extra opties die kunnen worden geconfigureerd met behulp van de WebSockets eigenschap:

Optie Standaardwaarde Beschrijving
CloseTimeout 5 seconden Nadat de server is gesloten, wordt de verbinding beëindigd als de client binnen dit tijdsinterval niet kan worden gesloten.
SubProtocolSelector null Een gemachtigde die kan worden gebruikt om de Sec-WebSocket-Protocol header in te stellen op een aangepaste waarde. De gemachtigde ontvangt de waarden die door de client zijn aangevraagd als invoer en wordt verwacht dat deze de gewenste waarde retourneert.

Clientopties configureren

Clientopties kunnen worden geconfigureerd voor het HubConnectionBuilder type (beschikbaar in de .NET- en JavaScript-clients). Het is ook beschikbaar in de Java-client, maar de HttpHubConnectionBuilder subklasse bevat de opbouwconfiguratieopties, evenals op de HubConnection zelf.

Logboekregistratie configureren

Logboekregistratie wordt geconfigureerd in de .NET-client met behulp van de ConfigureLogging methode. Providers en filters voor logboekregistratie kunnen op dezelfde manier worden geregistreerd als op de server. Zie de Logging in ASP.NET Core-documentatie voor meer informatie.

Opmerking

Als u logboekregistratieproviders wilt registreren, moet u de benodigde pakketten installeren. Zie de sectie Ingebouwde providers voor logboekregistratie van de documenten voor een volledige lijst.

Als u bijvoorbeeld consolelogboekregistratie wilt inschakelen, installeert u het Microsoft.Extensions.Logging.Console NuGet-pakket. Roep de AddConsole extensiemethode aan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub")
    .ConfigureLogging(logging => {
        logging.SetMinimumLevel(LogLevel.Information);
        logging.AddConsole();
    })
    .Build();

In de JavaScript-client bestaat een vergelijkbare configureLogging methode. Geef een LogLevel waarde op die het minimale niveau van logboekberichten aangeeft dat moet worden geproduceerd. Logs worden naar het consolevenster van de browser geschreven.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging(signalR.LogLevel.Information)
    .build();

In plaats van een LogLevel waarde kunt u ook een waarde opgeven die een string naam op logboekniveau vertegenwoordigt. Dit is handig bij het configureren van SignalR logboekregistratie in omgevingen waar u geen toegang hebt tot de LogLevel constanten.

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub")
    .configureLogging("warn")
    .build();

De volgende tabel bevat de beschikbare logboekniveaus. De waarde die u aan configureLogging opgeeft, stelt het minimale logboekniveau in dat wordt vastgelegd. Berichten die op dit niveau zijn geregistreerd , of de niveaus die erna in de tabel worden vermeld, worden geregistreerd.

Snaar / Touwtje LogLevel
trace LogLevel.Trace
debug LogLevel.Debug
info ofinformation LogLevel.Information
warn ofwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Opmerking

Als u logboekregistratie volledig wilt uitschakelen, geeft u signalR.LogLevel.None op als parameter in de configureLogging functie.

Zie de SignalR documentatie over diagnostische gegevens voor meer informatie over logboekregistratie.

De SignalR Java-client maakt gebruik van de SLF4J-bibliotheek voor logboekregistratie. Het is een API voor logboekregistratie op hoog niveau waarmee gebruikers van de bibliotheek hun eigen specifieke implementatie voor logboekregistratie kunnen kiezen door een specifieke afhankelijkheid voor logboekregistratie in te voeren. In het volgende codefragment ziet u hoe u dit kunt gebruiken java.util.logging met de SignalR Java-client.

implementation 'org.slf4j:slf4j-jdk14:1.7.25'

Als u het loggen in uw afhankelijkheden niet configureert, laadt SLF4J een standaard geen-operatie logger met het volgende waarschuwingsbericht:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Dit kan veilig worden genegeerd.

Toegestane transporten configureren

De transporten die door SignalR worden gebruikt, kunnen worden geconfigureerd in de functieaanroep WithUrl (withUrl in JavaScript). Een bitwise-OR van de waarden van HttpTransportType kan worden gebruikt om de client te beperken tot alleen de opgegeven transporten. Alle transporten zijn standaard ingeschakeld.

Als u bijvoorbeeld het transport van Server-Sent gebeurtenissen wilt onderbreken, maar WebSockets- en Long Polling-verbindingen wilt toestaan:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", HttpTransportType.WebSockets | HttpTransportType.LongPolling)
    .Build();

In de JavaScript-client worden transporten geconfigureerd door het transport veld in te stellen op het optiesobject dat is opgegeven op withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", { transport: signalR.HttpTransportType.WebSockets | signalR.HttpTransportType.LongPolling })
    .build();

In deze versie van de Java-client WebSockets is het enige beschikbare transport.

In de Java-client wordt het transport geselecteerd met de withTransport methode op de HttpHubConnectionBuilder. De Java-client maakt standaard gebruik van het WebSockets-transport.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withTransport(TransportEnum.WEBSOCKETS)
    .build();

Opmerking

De SignalR Java-client biedt nog geen ondersteuning voor terugval van transport.

Bearer-verificatie configureren

Als u verificatiegegevens samen met SignalR aanvragen wilt opgeven, gebruikt u de AccessTokenProvider optie (accessTokenFactory in JavaScript) om een functie op te geven die het gewenste toegangstoken retourneert. In de .NET-client wordt dit toegangstoken doorgegeven als een HTTP-"Bearer Authenticatie"-token (met behulp van de Authorization header met een type Bearer). In de JavaScript-client wordt het toegangstoken gebruikt als een Bearer-token, behalve in enkele gevallen waarin browser-API's de mogelijkheid beperken om headers toe te passen (met name in Server-Sent Gebeurtenissen en WebSockets-aanvragen). In deze gevallen wordt het toegangstoken geleverd als een querytekenreekswaarde access_token.

In de .NET-client kan de AccessTokenProvider optie worden opgegeven met behulp van de gedelegeerde opties in WithUrl:

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.AccessTokenProvider = async () => {
            // Get and return the access token.
        };
    })
    .Build();

In de JavaScript-client wordt het toegangstoken geconfigureerd door het accessTokenFactory veld in te stellen op het object Opties in withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();

In de SignalR Java-client kunt u een bearer-token configureren voor verificatie door een toegangstokenfactory op te geven voor httpHubConnectionBuilder. Gebruik withAccessTokenFactory om een RxJavaSingle<String> op te geven. Met een aanroep naar Single.defer kunt u logica schrijven om toegangstokens voor uw client te produceren.

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
    .withAccessTokenProvider(Single.defer(() -> {
        // Your logic here.
        return Single.just("An Access Token");
    })).build();

Time-out en keep-alive-opties configureren

Aanvullende opties voor het configureren van time-out en keep-alive-gedrag zijn beschikbaar op het HubConnection object zelf:

Optie Standaardwaarde Beschrijving
ServerTimeout 30 seconden (30.000 milliseconden) Time-out voor serveractiviteit. Als de server in dit interval geen bericht heeft verzonden, beschouwt de client de server als losgekoppeld en wordt de Closed gebeurtenis geactiveerd (onclose in JavaScript). Deze waarde moet groot genoeg zijn om een pingbericht te verzenden vanaf de server en binnen het time-outinterval door de client te ontvangen. De aanbevolen waarde is een getal dat ten minste twee keer zo groot is als de serverwaarde KeepAliveInterval om voldoende tijd te bieden voor het binnenkomen van pings.
HandshakeTimeout 15 seconden Time-out voor eerste serverhanddruk. Als de server in dit interval geen handshake-antwoord verzendt, annuleert de client de handshake en activeert de Closed gebeurtenis (onclose in JavaScript). Dit is een geavanceerde instelling die alleen moet worden gewijzigd als er time-outfouten voor handshake optreden vanwege ernstige netwerklatentie. Zie de SignalR hubprotocolspecificatie voor meer informatie over het handshake-proces.
KeepAliveInterval 15 seconden Bepaalt het interval waarmee de client pingberichten verzendt. Als u een bericht van de client verzendt, wordt de timer opnieuw ingesteld op het begin van het interval. Als de client geen bericht heeft verzonden in de ClientTimeoutInterval set op de server, beschouwt de server de verbinding met de client verbroken.

In de .NET-client worden time-outwaarden opgegeven als TimeSpan waarden.

Aanvullende opties configureren

Aanvullende opties kunnen worden geconfigureerd in de WithUrl methode (withUrl in JavaScript) op HubConnectionBuilder of in de verschillende configuratie-API's op de HttpHubConnectionBuilder Java-client:

.NET-optie Standaardwaarde Beschrijving
AccessTokenProvider null Een functie die een tekenreeks retourneert die wordt geleverd als een Bearer-verificatietoken in HTTP-aanvragen.
SkipNegotiation false Stel dit in op true om de onderhandelingsstap over te slaan. Alleen ondersteund wanneer het WebSockets-transport het enige ingeschakelde transport is. Deze instelling kan niet worden ingeschakeld wanneer u de Azure-service SignalR gebruikt.
ClientCertificates Leeg Een verzameling TLS-certificaten die moeten worden verzonden naar verificatieaanvragen.
Cookies Leeg Een verzameling HTTP-cookies die met elke HTTP-aanvraag moeten worden verzonden.
Credentials Leeg Referenties voor verzenden met elke HTTP-aanvraag.
CloseTimeout 5 seconden Alleen WebSockets. De maximale tijd die de client wacht na het sluiten totdat de server de sluitverzoek bevestigt. Als de server de sluiting binnen deze tijd niet bevestigt, wordt de verbinding met de client verbroken.
Headers Leeg Een kaart van extra HTTP-headers om met elke HTTP-aanvraag te verzenden.
HttpMessageHandlerFactory null Een delegate die kan worden gebruikt voor het configureren of vervangen van de HttpMessageHandler die wordt gebruikt voor het verzenden van HTTP-aanvragen. Niet gebruikt voor WebSocket-verbindingen. Deze gemachtigde moet een niet-null-waarde retourneren en ontvangt de standaardwaarde als parameter. Wijzig instellingen voor die standaardwaarde en retourneer deze, of retourneer een nieuw HttpMessageHandler exemplaar. Wanneer u de handler vervangt, moet u ervoor zorgen dat u de instellingen kopieert die u wilt behouden van de opgegeven handler, anders zijn de geconfigureerde opties (zoals cookies en headers) niet van toepassing op de nieuwe handler.
Proxy null Een HTTP-proxy die moet worden gebruikt bij het verzenden van HTTP-aanvragen.
UseDefaultCredentials false Stel deze Booleaanse waarde in om de standaardreferenties voor HTTP- en WebSockets-aanvragen te verzenden. Dit maakt het gebruik van Windows-verificatie mogelijk.
WebSocketConfiguration null Een gemachtigde die kan worden gebruikt om extra WebSocket-opties te configureren. U ontvangt een exemplaar van ClientWebSocketOptions dat kan worden gebruikt om de opties te configureren.
ApplicationMaxBufferSize 1 MB Het maximale aantal bytes dat de client van de server ontvangt en buffert voordat backpressure wordt toegepast. Door deze waarde te verhogen, kan de client sneller grotere berichten ontvangen zonder backpressure toe te passen, maar kan het geheugenverbruik verhogen.
TransportMaxBufferSize 1 MB Het maximum aantal bytes dat door de gebruikersapplicatie wordt verzonden en dat de client buffert voordat er sprake is van backpressure. Door deze waarde te verhogen, kan de client sneller grotere berichten bufferen zonder te wachten op backpressie, maar kan het geheugenverbruik verhogen.

In de .NET-client kunnen deze opties worden gewijzigd door de optiedelegaat die is opgegeven voor WithUrl.

var connection = new HubConnectionBuilder()
    .WithUrl("https://example.com/chathub", options => {
        options.Headers["Foo"] = "Bar";
        options.SkipNegotiation = true;
        options.Transports = HttpTransportType.WebSockets;
        options.Cookies.Add(new Cookie(/* ... */);
        options.ClientCertificates.Add(/* ... */);
    })
    .Build();

In de JavaScript-client kunnen deze opties worden opgegeven in een JavaScript-object dat wordt geleverd aan withUrl:

let connection = new signalR.HubConnectionBuilder()
    .withUrl("/chathub", {
        // "Foo: Bar" will not be sent with WebSockets or Server-Sent Events requests
        headers: { "Foo": "Bar" },
        transport: signalR.HttpTransportType.LongPolling 
    })
    .build();

In de Java-client kunnen deze opties worden geconfigureerd met de methoden op het door de HttpHubConnectionBuilder geretourneerde HubConnectionBuilder.create("HUB URL").

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/chathub")
        .withHeader("Foo", "Bar")
        .shouldSkipNegotiate(true)
        .withHandshakeResponseTimeout(30*1000)
        .build();

Aanvullende bronnen