Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 HubConnectionsjälva objektet. Om servern inte skickar ett handskakningssvar i det här intervallet avbryter klienten handskakningen och utlöserClosedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 - StatefulReconnectBufferSizefö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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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 KeepAliveIntervalvä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 duServerTimeoutinställningen ellerserverTimeoutInMillisecondspå klienten. Det rekommenderadeServerTimeoutvärdet ellerserverTimeoutInMillisecondsvärdet är dubbelt så högt somKeepAliveIntervalvä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 ärfalseatt 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 Authorizeattribut 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-Protocolheader 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 | 
| infoellerinformation | LogLevel.Information | 
| warnellerwarning | 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 Closedhändelsen (onclosei 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 servernsKeepAliveIntervalvä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 Closedhändelsen (onclosei 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 ClientTimeoutIntervaluppsä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 truefö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 HttpMessageHandlersom 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 nyHttpMessageHandlerinstans. 
              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
ASP.NET Core