Dela via


konfiguration av ASP.NET Core SignalR

Den här artikeln beskriver ASP.NET Core-konfiguration SignalR .

VägledningBlazorSignalR, som lägger till eller ersätter vägledningen i den här artikeln, finns i ASP.NET Core-vägledningBlazorSignalR.

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Startup.ConfigureServices. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Program.cs:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).
MaximumParallelInvocationsPerClient 1 Det maximala antalet hubbmetoder som varje klient kan anropa parallellt innan köplacering.
DisableImplicitFromServicesParameters false Hubbmetodargument löses från DI om möjligt.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Program.cs.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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();

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 64 KB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 64 KB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Genom att öka det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tillbakahållningstryck, det kan dock öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.
MinimumProtocolVersion 0 Ange den lägsta versionen av förhandlingsprotokollet. Detta används för att begränsa klienter till nyare versioner.
CloseOnAuthenticationExpiration falskt Ange det här alternativet för att aktivera förfallospårning för autentisering, vilket stänger anslutningar när en token upphör att gälla.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende:

Alternativ Standardvärde Beskrivning
WithServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet och anges direkt på HubConnectionBuilder. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns keep-alive-intervall (WithKeepAliveInterval) för att ge tid för pingar att tas emot.
HandshakeTimeout 15 sekunder Tidsgräns för inledande handskakning av servern och är tillgänglig för HubConnection själva objektet. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
WithKeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden och anges direkt på HubConnectionBuilder. Med den här inställningen kan servern identifiera hårda frånkopplingar, till exempel när en klient kopplar från datorn från nätverket. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

I följande exempel visas värden som är dubbla standardvärdena:

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();

Konfigurera tillståndskänslig återanslutning

SignalR tillståndsbevarande återanslutning minskar den upplevda nedtiden för klienter som upplever en tillfällig frånkoppling i sin nätverksanslutning, till exempel vid byte av nätverksanslutning eller ett kortvarigt avbrott i åtkomsten.

Tillståndsbevarande återanslutning uppnår detta genom att:

  • Buffrar tillfälligt data på servern och klienten.
  • Bekräfta mottagna meddelanden (ACK-ing) av både servern och klienten.
  • Identifiera när en anslutning är igång och spela upp meddelanden som kan ha skickats när anslutningen var nere.

Tillståndsbaserad återanslutning är tillgänglig i .NET 8 eller senare.

Aktivera tillståndsberoende återanslutning vid både server-hubbens slutpunkt och klienten.

  • Uppdatera serverhubbens slutpunktskonfiguration för att aktivera alternativet AllowStatefulReconnects:

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

    Du kan också ange den maximala buffertstorleken i byte som tillåts av servern globalt eller för en specifik hubb med alternativet StatefulReconnectBufferSize:

    Alternativet StatefulReconnectBufferSize är inställt globalt.

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

    Inställningarna StatefulReconnectBufferSize för en specifik hubb:

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

    Alternativet StatefulReconnectBufferSize är valfritt med standardvärdet 100 000 byte.

  • Uppdatera JavaScript- eller TypeScript-klientkoden för att aktivera alternativet withStatefulReconnect:

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

    Alternativet bufferSize är valfritt med standardvärdet 100 000 byte.

  • Uppdatera .NET-klientkoden för att aktivera alternativet WithStatefulReconnect:

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

    Alternativet StatefulReconnectBufferSize är valfritt med standardvärdet 100 000 byte.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.
ApplicationMaxBufferSize 1 MB Det maximala antal byte som tas emot från servern som klienten buffrar innan mottryck tillämpas. Genom att öka det här värdet kan klienten ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 1 MB Det maximala antalet byte som skickas av användarprogrammet som klienten buffrar innan bakåttryck observeras. Genom att öka det här värdet kan klienten buffra större meddelanden snabbare utan att vänta på mottryck, men det kan öka minnesförbrukningen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till 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();

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till 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();

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden, som kan läggas till efter AddSignalR i din Startup.ConfigureServices metod. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerSettings för objektet är ett Json.NET JsonSerializerSettings objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om Json.NET.

Om du till exempel vill konfigurera serialiseraren för att använda "PascalCase"-egenskapsnamn istället för de standardmässiga camelCase-namnen, använd följande kod i Startup.ConfigureServices.

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Startup.ConfigureServices.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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;
        });
    });
}

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 32 kB Det maximala antalet byte som tas emot från klienten som servern buffrar. Om du ökar det här värdet kan servern ta emot större meddelanden, men kan påverka minnesförbrukningen negativt.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
TransportMaxBufferSize 32 kB Det maximala antalet byte som skickas av appen som servern buffrar. Om du ökar det här värdet kan servern skicka större meddelanden, men det kan påverka minnesförbrukningen negativt.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till WithUrl:

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

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till withUrl:

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

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden, som kan läggas till efter AddSignalR i din Startup.ConfigureServices metod. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerSettings för objektet är ett Json.NET JsonSerializerSettings objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om Json.NET.

Om du till exempel vill konfigurera serialiseraren för att använda "PascalCase"-egenskapsnamn istället för de standardmässiga camelCase-namnen, använd följande kod i Startup.ConfigureServices.

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Startup.ConfigureServices.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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;
        });
    });
}

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 32 kB Det maximala antalet byte som tas emot från klienten som servern buffrar. Om du ökar det här värdet kan servern ta emot större meddelanden, men kan påverka minnesförbrukningen negativt.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
TransportMaxBufferSize 32 kB Det maximala antalet byte som skickas av appen som servern buffrar. Om du ökar det här värdet kan servern skicka större meddelanden, men det kan påverka minnesförbrukningen negativt.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till WithUrl:

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

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till withUrl:

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

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Startup.ConfigureServices. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Startup.ConfigureServices:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Startup.ConfigureServices.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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;
        });
    });
}

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 32 kB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
TransportMaxBufferSize 32 kB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Om du ökar det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tryckavlastning, men minnesförbrukningen kan öka.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till WithUrl:

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

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till withUrl:

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

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Startup.ConfigureServices. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Startup.ConfigureServices:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Startup.ConfigureServices.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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;
        });
    });
}

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 32 kB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
TransportMaxBufferSize 32 kB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Om du ökar det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tryckavlastning, men minnesförbrukningen kan öka.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.
MinimumProtocolVersion 0 Ange den lägsta versionen av förhandlingsprotokollet. Detta används för att begränsa klienter till nyare versioner.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till WithUrl:

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

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till withUrl:

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

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Startup.ConfigureServices. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Startup.ConfigureServices:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).
MaximumParallelInvocationsPerClient 1 Det maximala antalet hubbmetoder som varje klient kan anropa parallellt innan köplacering.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Startup.ConfigureServices.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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;
        });
    });
}

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 32 kB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
TransportMaxBufferSize 32 kB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Om du ökar det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tryckavlastning, men minnesförbrukningen kan öka.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.
MinimumProtocolVersion 0 Ange den lägsta versionen av förhandlingsprotokollet. Detta används för att begränsa klienter till nyare versioner.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till 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();

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till 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();

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Program.cs. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Program.cs:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).
MaximumParallelInvocationsPerClient 1 Det maximala antalet hubbmetoder som varje klient kan anropa parallellt innan köplacering.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Program.cs.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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();

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 64 KB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 64 KB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Genom att öka det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tillbakahållningstryck, det kan dock öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.
MinimumProtocolVersion 0 Ange den lägsta versionen av förhandlingsprotokollet. Detta används för att begränsa klienter till nyare versioner.
CloseOnAuthenticationExpiration falskt Ange det här alternativet för att aktivera förfallospårning för autentisering som stänger anslutningar när en token upphör att gälla.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.
ApplicationMaxBufferSize 1 MB Det maximala antal byte som tas emot från servern som klienten buffrar innan mottryck tillämpas. Genom att öka det här värdet kan klienten ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 1 MB Det maximala antalet byte som skickas av användarprogrammet som klienten buffrar innan bakåttryck observeras. Genom att öka det här värdet kan klienten buffra större meddelanden snabbare utan att vänta på mottryck, men det kan öka minnesförbrukningen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till 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();

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till 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();

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser

Serialiseringsalternativ för JSON/MessagePack

ASP.NET Core SignalR stöder två protokoll för kodning av meddelanden: JSON och MessagePack. Varje protokoll har konfigurationsalternativ för serialisering.

JSON-serialisering kan konfigureras på servern med hjälp av AddJsonProtocol tilläggsmetoden. AddJsonProtocol kan läggas till efter AddSignalR i Startup.ConfigureServices. Metoden AddJsonProtocol tar en delegat som tar emot ett options objekt. Egenskapen PayloadSerializerOptions för objektet är ett System.Text.JsonJsonSerializerOptions objekt som kan användas för att konfigurera serialisering av argument och returvärden. Mer information finns i dokumentationen om System.Text.Json.

Om du till exempel vill konfigurera serialiseraren så att den inte ändrar versaliseringen för egenskapsnamn, i stället för standardnamnen för kamelfall, använder du följande kod i Program.cs:

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

I .NET-klienten finns samma AddJsonProtocol tilläggsmetod på HubConnectionBuilder. Namnområdet Microsoft.Extensions.DependencyInjection måste importeras för att matcha tilläggsmetoden:

// 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();

Anmärkning

Det går inte att konfigurera JSON-serialisering i JavaScript-klienten just nu.

Växla till Newtonsoft.Json

Om du behöver funktioner i Newtonsoft.Json som inte stöds i System.Text.Json, kan du se Växla till Newtonsoft.Json.

Serialiseringsalternativ för MessagePack

MessagePack-serialisering kan konfigureras genom att tillhandahålla ett ombud för anropet AddMessagePackProtocol . Mer information finns i MessagePack i SignalR.

Anmärkning

Det går inte att konfigurera MessagePack-serialisering i JavaScript-klienten just nu.

Konfigurera serveralternativ

I följande tabell beskrivs alternativ för att SignalR konfigurera hubbar:

Alternativ Standardvärde Beskrivning
ClientTimeoutInterval 30 sekunder Servern anser att klienten är frånkopplad om den inte har tagit emot ett meddelande (inklusive keep-alive) i det här intervallet. Det kan ta längre tid än det här tidsgränsintervallet för klienten att markeras som frånkopplad på grund av hur detta implementeras. Det rekommenderade värdet är dubbelt så högt som KeepAliveInterval värdet.
HandshakeTimeout 15 sekunder Om klienten inte skickar ett första handskakningsmeddelande inom det här tidsintervallet stängs anslutningen. Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Om servern inte har skickat något meddelande inom det här intervallet skickas ett pingmeddelande automatiskt för att hålla anslutningen öppen. När du ändrar KeepAliveIntervaländrar du ServerTimeout inställningen eller serverTimeoutInMilliseconds på klienten. Det rekommenderade ServerTimeout värdet eller serverTimeoutInMilliseconds värdet är dubbelt så högt som KeepAliveInterval värdet.
SupportedProtocols Alla installerade protokoll Protokoll som stöds av den här hubben. Som standard tillåts alla protokoll som är registrerade på servern. Protokoll kan tas bort från den här listan för att inaktivera specifika protokoll för enskilda hubbar.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en hubbmetod. Standardvärdet är false att dessa undantagsmeddelanden kan innehålla känslig information.
StreamBufferCapacity 10 Det maximala antalet objekt som kan bufferas för klientuppladdningsströmmar. Om den här gränsen nås blockeras bearbetningen av anrop tills servern bearbetar dataströmobjekt.
MaximumReceiveMessageSize 32 kB Maximal storlek för ett enda inkommande hubbmeddelande. Att öka värdet kan öka risken för DoS-attacker (Denial of Service).
MaximumParallelInvocationsPerClient 1 Det maximala antalet hubbmetoder som varje klient kan anropa parallellt innan köplacering.
DisableImplicitFromServicesParameters false Hubbmetodens argument löses från DI om möjligt.

Alternativ kan konfigureras för alla hubbar genom att ange ett alternativdelegat till anropet AddSignalR i Program.cs.

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

Alternativ för en enskild hubb åsidosätter de globala alternativ som anges i AddSignalR och kan konfigureras med hjälp av AddHubOptions:

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

Avancerade HTTP-konfigurationsalternativ

Använd HttpConnectionDispatcherOptions för att konfigurera avancerade inställningar som rör transport och hantering av minnesbuffertar. De här alternativen konfigureras genom att ett ombud skickas till MapHub i 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();

I följande tabell beskrivs alternativ för att konfigurera ASP.NET Cores SignalRavancerade HTTP-alternativ:

Alternativ Standardvärde Beskrivning
ApplicationMaxBufferSize 64 KB Det maximala antalet byte som tas emot från klienten som servern buffrar innan servern tillämpar tillbakapressning. Om du ökar det här värdet kan servern ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 64 KB Det maximala antalet byte som skickas av appen som servern buffrar innan backpressure observeras. Genom att öka det här värdet kan servern buffra större meddelanden snabbare utan att vänta på tillbakahållningstryck, det kan dock öka minnesförbrukningen.
AuthorizationData Data som samlas in automatiskt från de Authorize attribut som används på hubbklassen. En lista över IAuthorizeData objekt som används för att avgöra om en klient har behörighet att ansluta till hubben.
Transports Alla transporter är aktiverade. En uppräkning av bitflaggor för HttpTransportType-värden som kan begränsa vilka transporter en klient kan använda för att ansluta.
LongPolling Se nedan. Ytterligare alternativ som är specifika för Long Polling-transporten.
WebSockets Se nedan. Ytterligare alternativ som är specifika för WebSockets-transporten.
MinimumProtocolVersion 0 Ange den lägsta versionen av förhandlingsprotokollet. Detta används för att begränsa klienter till nyare versioner.
CloseOnAuthenticationExpiration falskt Ange det här alternativet för att aktivera förfallospårning för autentisering som stänger anslutningar när en token upphör att gälla.

Long Polling-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen LongPolling :

Alternativ Standardvärde Beskrivning
PollTimeout 90 sekunder Den maximala tiden servern väntar på att ett meddelande ska skickas till klienten innan en enskild avsökningsbegäran avslutas. Om du minskar det här värdet får klienten att utfärda nya avsökningsbegäranden oftare.

WebSocket-transporten har ytterligare alternativ som kan konfigureras med hjälp av egenskapen WebSockets :

Alternativ Standardvärde Beskrivning
CloseTimeout 5 sekunder När servern har stängts avslutas anslutningen om klienten inte kan stängas inom det här tidsintervallet.
SubProtocolSelector null En delegat som kan användas för att ange Sec-WebSocket-Protocol header till ett anpassat värde. Ombudet tar emot de värden som begärs av klienten som indata och förväntas returnera önskat värde.

Konfigurera klientalternativ

Klientalternativ kan konfigureras för HubConnectionBuilder typen (finns i .NET- och JavaScript-klienterna). Den är också tillgänglig i Java-klienten, men underklassen HttpHubConnectionBuilder är det som innehåller konfigurationsalternativen för builder, samt finns dessa också på HubConnection själv.

Konfigurera loggning

Loggning konfigureras i .NET-klienten med hjälp av ConfigureLogging metoden . Loggningsleverantörer och filter kan registreras på samma sätt som de registreras på servern. Mer information finns i dokumentationen om loggning i ASP.NET Core .

Anmärkning

För att kunna registrera loggningsprovidrar måste du installera nödvändiga paket. En fullständig lista finns i dokumentationen under avsnittet Inbyggda loggningsproviders.

Om du till exempel vill aktivera konsolloggning installerar du Microsoft.Extensions.Logging.Console NuGet-paketet. AddConsole Anropa tilläggsmetoden:

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

Det finns en liknande configureLogging metod i JavaScript-klienten. Ange ett LogLevel värde som anger den minsta nivån av loggmeddelanden som ska skapas. Loggar skrivs till webbläsarkonsolfönstret.

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

I stället för ett LogLevel värde kan du också ange ett string värde som representerar ett namn på loggnivå. Detta är användbart när du konfigurerar loggning SignalR i miljöer där du inte har åtkomst till konstanterna LogLevel .

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

I följande tabell visas de tillgängliga loggnivåerna. Det värde som du anger för anger configureLogging den minsta loggnivå som ska loggas. Meddelanden som loggas på den här nivån , eller de nivåer som anges efter det i tabellen, loggas.

Sträng Loggnivå
trace LogLevel.Trace
debug LogLevel.Debug
info ellerinformation LogLevel.Information
warn ellerwarning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Anmärkning

Om du vill inaktivera loggning helt anger du signalR.LogLevel.None i configureLogging -metoden.

Mer information om loggning finns i dokumentationen omSignalR diagnostik.

SignalR Java-klienten använder SLF4J-biblioteket för loggning. Det är ett högnivåloggnings-API som gör det möjligt för biblioteksanvändare att välja sin egen specifika loggningsimplementering genom att införa ett specifikt loggningsberoende. Följande kodfragment visar hur du använder java.util.logging med SignalR Java-klienten.

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

Om du inte konfigurerar loggning i dina beroenden laddar SLF4J en standardlogger utan operation med följande varningsmeddelande:

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.

Detta kan ignoreras på ett säkert sätt.

Konfigurera tillåtna transporter

De transporter som används av SignalR kan konfigureras i anropet WithUrl (withUrl i JavaScript). En bitvis OR-operation av värdena HttpTransportType kan användas för att begränsa klienten till att använda endast de angivna transporterna. Alla transporter är aktiverade som standard.

Om du till exempel vill inaktivera Server-Sent Events-transporten, men tillåta WebSockets- och Long Polling-anslutningar:

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

I JavaScript-klienten konfigureras transporterna genom att ställa in transport-fältet på de alternativ som ges till withUrl:

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

I den här versionen av Java-klienten är WebSockets den enda tillgängliga transporten.

I Java-klienten väljs transporten med withTransport -metoden på HttpHubConnectionBuilder. Java-klienten använder som standard WebSockets-transporten.

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

Anmärkning

Java-klienten SignalR stöder inte transportreserv ännu.

Konfigurera ägarautentisering

Om du vill tillhandahålla autentiseringsdata tillsammans med SignalR begäranden använder du AccessTokenProvider alternativet (accessTokenFactory i JavaScript) för att ange en funktion som returnerar önskad åtkomsttoken. I .NET-klienten skickas den här åtkomsttoken som en HTTP-token för bärarautentisering (Använd Authorization header med en typ av Bearer). I JavaScript-klienten används åtkomsttoken som en Bearer-token, förutom i några fall där webbläsar-API:er begränsar möjligheten att tillämpa rubriker (särskilt i Server-Sent-händelser och WebSockets-begäranden). I dessa fall anges åtkomsttoken som ett frågesträngsvärde access_token.

I .NET-klienten kan AccessTokenProvider-alternativet anges med hjälp av alternativens delegering i WithUrl:

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

I JavaScript-klienten konfigureras åtkomsttoken genom att ange accessTokenFactory fältet på alternativobjektet i 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();

I Java-klienten SignalR kan du konfigurera en ägartoken som ska användas för autentisering genom att tillhandahålla en åtkomsttokenfabrik till HttpHubConnectionBuilder. Använd med AccessTokenFactory för att tillhandahålla en RxJava<String>. Med ett anrop till Single.deferkan du skriva logik för att skapa åtkomsttoken för klienten.

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

Konfigurera timeout- och keep-alive-alternativ

Ytterligare alternativ för att konfigurera timeout och keep-alive-beteende är tillgängliga för HubConnection själva objektet:

Alternativ Standardvärde Beskrivning
ServerTimeout 30 sekunder (30 000 millisekunder) Tidsgräns för serveraktivitet. Om servern inte har skickat något meddelande i det här intervallet tar klienten hänsyn till att servern är frånkopplad och utlöser Closed händelsen (onclose i JavaScript). Det här värdet måste vara tillräckligt stort för att ett pingmeddelande ska skickas från servern och tas emot av klienten inom tidsgränsintervallet. Det rekommenderade värdet är ett tal som minst är dubbelt så högt som serverns KeepAliveInterval värde för att ge tid för ping.
HandshakeTimeout 15 sekunder Timeout för serverns inledande handskakning. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöser Closed händelsen (onclose i JavaScript). Det här är en avancerad inställning som endast bör ändras om timeout-fel för handskakning inträffar på grund av allvarlig nätverksfördröjning. Mer information om handskakningsprocessen finns i SignalR Hubbprotokollspecifikationen.
KeepAliveInterval 15 sekunder Avgör det intervall med vilket klienten skickar pingmeddelanden. När ett meddelande skickas från klienten återställs timern till början av intervallet. Om klienten inte har skickat något meddelande i ClientTimeoutInterval uppsättningen på servern, anser servern att klienten är frånkopplad.

I .NET-klienten anges tidsgränsvärden som TimeSpan värden.

Konfigurera ytterligare alternativ

Ytterligare alternativ kan konfigureras i WithUrl metoden (withUrl i JavaScript) på HubConnectionBuilder eller på de olika konfigurations-API:erna på HttpHubConnectionBuilder i Java-klienten:

.NET-alternativ Standardvärde Beskrivning
AccessTokenProvider null En funktion som returnerar en sträng som tillhandahålls som en ägarautentiseringstoken i HTTP-begäranden.
SkipNegotiation false Ange detta till true för att hoppa över förhandlingssteget. Stöds endast när WebSockets-transporten är den enda aktiverade transporten. Den här inställningen kan inte aktiveras när du använder Azure-tjänsten SignalR .
ClientCertificates Tomt En samling TLS-certifikat som ska skickas för att autentisera begäranden.
Cookies Tomt En samling HTTP-cookies som ska skickas med varje HTTP-begäran.
Credentials Tomt Autentiseringsuppgifter som ska skickas med varje HTTP-begäran.
CloseTimeout 5 sekunder Endast WebSockets. Den maximala tiden som klienten väntar efter stängningen för att servern ska bekräfta stängningsbegäran. Om servern inte bekräftar stängningen inom den här tiden kopplas klienten från.
Headers Tomt En karta över ytterligare HTTP-huvuden som ska skickas med varje HTTP-begäran.
HttpMessageHandlerFactory null En delegering som kan användas för att konfigurera eller ersätta de HttpMessageHandler som används för att skicka HTTP-begäranden. Används inte för WebSocket-anslutningar. Det här ombudet måste returnera ett värde som inte är null och tar emot standardvärdet som en parameter. Ändra antingen inställningarna för det standardvärdet och returnera det eller returnera en ny HttpMessageHandler instans. När du ersätter hanteraren ser du till att kopiera de inställningar som du vill behålla från den angivna hanteraren, annars gäller inte de konfigurerade alternativen (till exempel cookies och rubriker) för den nya hanteraren.
Proxy null En HTTP-proxy som ska användas när HTTP-begäranden skickas.
UseDefaultCredentials false Ange det här booleska värdet för att skicka standardautentiseringsuppgifterna för HTTP- och WebSockets-begäranden. Detta möjliggör användning av Windows-autentisering.
WebSocketConfiguration null Ett ombud som kan användas för att konfigurera ytterligare WebSocket-alternativ. Tar emot en instans av ClientWebSocketOptions som kan användas för att konfigurera alternativen.
ApplicationMaxBufferSize 1 MB Det maximala antal byte som tas emot från servern som klienten buffrar innan mottryck tillämpas. Genom att öka det här värdet kan klienten ta emot större meddelanden snabbare utan att använda bakåttryck, men kan öka minnesförbrukningen.
TransportMaxBufferSize 1 MB Det maximala antalet byte som skickas av användarprogrammet som klienten buffrar innan bakåttryck observeras. Genom att öka det här värdet kan klienten buffra större meddelanden snabbare utan att vänta på mottryck, men det kan öka minnesförbrukningen.

I .NET-klienten kan dessa alternativ ändras via alternativdelegaten som tillhandahålls till 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();

I JavaScript-klienten kan dessa alternativ anges i ett JavaScript-objekt som tillhandahålls till 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();

I Java-klienten kan dessa alternativ konfigureras med metoderna för de HttpHubConnectionBuilder som returneras från HubConnectionBuilder.create("HUB URL")

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

Ytterligare resurser