SignalR-Konfiguration in ASP.NET CoreASP.NET Core SignalR configuration

JSON/messagepack-SerialisierungsoptionenJSON/MessagePack serialization options

ASP.net Core SignalR unterstützt zwei Protokolle zum Codieren von Nachrichten: JSON und messagepack.ASP.NET Core SignalR supports two protocols for encoding messages: JSON and MessagePack. Jedes Protokoll verfügt über Konfigurationsoptionen für die Serialisierung.Each protocol has serialization configuration options.

Die JSON-Serialisierung kann mithilfe der addjsonprotocol -Erweiterungsmethode auf dem Server konfiguriert werden.JSON serialization can be configured on the server using the AddJsonProtocol extension method. AddJsonProtocolkann nach Add SignalR in hinzugefügt werden Startup.ConfigureServices .AddJsonProtocol can be added after AddSignalR in Startup.ConfigureServices. Die- AddJsonProtocol Methode nimmt einen Delegaten an, der ein- options Objekt empfängt.The AddJsonProtocol method takes a delegate that receives an options object. Die payloadserializeroptions -Eigenschaft für dieses Objekt ist ein- System.Text.Json JsonSerializerOptions Objekt, das zum Konfigurieren der Serialisierung von Argumenten und Rückgabe Werten verwendet werden kann.The PayloadSerializerOptions property on that object is a System.Text.Json JsonSerializerOptions object that can be used to configure serialization of arguments and return values. Weitere Informationen finden Sie in den System.Text.Jszur Dokumentation.For more information, see the System.Text.Json documentation.

Verwenden Sie beispielsweise den folgenden Code in, um das Serialisierungsprogramm so zu konfigurieren, dass die Groß-/Kleinschreibung von Eigenschaftsnamen nicht geändert wird. verwenden Sie dazu den folgenden Code in Startup.ConfigureServices :As an example, to configure the serializer to not change the casing of property names, instead of the default "camelCase" names, use the following code in Startup.ConfigureServices:

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

Im .NET-Client ist dieselbe AddJsonProtocol Erweiterungsmethode auf hubconnectionbuildervorhanden.In the .NET client, the same AddJsonProtocol extension method exists on HubConnectionBuilder. Der Microsoft.Extensions.DependencyInjection Namespace muss importiert werden, um die Erweiterungsmethode aufzulösen:The Microsoft.Extensions.DependencyInjection namespace must be imported to resolve the extension method:

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

Hinweis

Zurzeit ist es nicht möglich, JSON-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure JSON serialization in the JavaScript client at this time.

Zum Newtonsoft.JswechselnSwitch to Newtonsoft.Json

Wenn Sie Features von benötigen Newtonsoft.Json , die in nicht unterstützt System.Text.Json werden, finden Sie weitere Informationen unter Wechseln zu Newtonsoft.Json.If you need features of Newtonsoft.Json that aren't supported in System.Text.Json, See Switch to Newtonsoft.Json.

Messagepack-SerialisierungsoptionenMessagePack serialization options

Die messagepack-Serialisierung kann konfiguriert werden, indem ein Delegat für den addmessagepackprotocol -Aufruf bereitgestellt wird.MessagePack serialization can be configured by providing a delegate to the AddMessagePackProtocol call. Weitere Informationen finden Sie unter SignalR messagepack in .See MessagePack in SignalR for more details.

Hinweis

Zurzeit ist es nicht möglich, die messagepack-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure MessagePack serialization in the JavaScript client at this time.

Konfigurieren von ServeroptionenConfigure server options

In der folgenden Tabelle werden die Optionen zum Konfigurieren von SignalR Hubs beschrieben:The following table describes options for configuring SignalR hubs:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ClientTimeoutInterval 30 Sekunden30 seconds Der Server wird vom-Client als getrennt betrachtet, wenn in diesem Intervall keine Nachricht (einschließlich Keep-Alive) empfangen wurde.The server will consider the client disconnected if it hasn't received a message (including keep-alive) in this interval. Es kann länger dauern, bis der Client als getrennt gekennzeichnet ist, weil dies implementiert ist.It could take longer than this timeout interval for the client to actually be marked disconnected, due to how this is implemented. Der empfohlene Wert ist Double- KeepAliveInterval Wert.The recommended value is double the KeepAliveInterval value.
HandshakeTimeout 15 Sekunden15 seconds Wenn der Client innerhalb dieses Zeitraums keine anfängliche Hand Shake Nachricht sendet, wird die Verbindung geschlossen.If the client doesn't send an initial handshake message within this time interval, the connection is closed. Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Wenn der Server innerhalb dieses Intervalls keine Nachricht gesendet hat, wird automatisch eine Ping-Nachricht gesendet, um die Verbindung offen zu halten.If the server hasn't sent a message within this interval, a ping message is sent automatically to keep the connection open. Ändern Sie KeepAliveInterval die ServerTimeout / serverTimeoutInMilliseconds Einstellung auf dem Client, wenn Sie sich ändern.When changing KeepAliveInterval, change the ServerTimeout/serverTimeoutInMilliseconds setting on the client. Der empfohlene ServerTimeout / serverTimeoutInMilliseconds Wert ist Double- KeepAliveInterval Wert.The recommended ServerTimeout/serverTimeoutInMilliseconds value is double the KeepAliveInterval value.
SupportedProtocols Alle installierten ProtokolleAll installed protocols Protokolle, die von diesem Hub unterstützt werden.Protocols supported by this hub. Standardmäßig sind alle auf dem Server registrierten Protokolle zulässig, aber Protokolle können aus dieser Liste entfernt werden, um bestimmte Protokolle für einzelne Hubs zu deaktivieren.By default, all protocols registered on the server are allowed, but protocols can be removed from this list to disable specific protocols for individual hubs.
EnableDetailedErrors false Wenn der Wert true ist, werden ausführliche Ausnahme Meldungen an Clients zurückgegeben, wenn eine Ausnahme in einer Hub-Methode ausgelöst wird.If true, detailed exception messages are returned to clients when an exception is thrown in a Hub method. Der Standardwert ist false , da diese Ausnahme Meldungen vertrauliche Informationen enthalten können.The default is false, as these exception messages can contain sensitive information.
StreamBufferCapacity 10 Die maximale Anzahl von Elementen, die für Client-uploadstreams gepuffert werden können.The maximum number of items that can be buffered for client upload streams. Wenn dieser Grenzwert erreicht wird, wird die Verarbeitung von Aufrufen blockiert, bis der Server streamingelemente verarbeitet.If this limit is reached, the processing of invocations is blocked until the server processes stream items.
MaximumReceiveMessageSize 32 KB32 KB Maximale Größe einer einzelnen eingehenden Hub-Nachricht.Maximum size of a single incoming hub message.

Optionen können für alle Hubs konfiguriert werden, indem ein Options Delegat für den Aufruf in bereitgestellt wird AddSignalR Startup.ConfigureServices .Options can be configured for all hubs by providing an options delegate to the AddSignalR call in Startup.ConfigureServices.

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

Optionen für einen einzelnen Hub überschreiben die in bereitgestellten globalen Optionen AddSignalR und können mithilfe von konfiguriert werden AddHubOptions :Options for a single hub override the global options provided in AddSignalR and can be configured using AddHubOptions:

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

Erweiterte http-KonfigurationsoptionenAdvanced HTTP configuration options

Verwenden HttpConnectionDispatcherOptions Sie, um erweiterte Einstellungen im Zusammenhang mit Transporte und der Speicherpuffer Verwaltung zu konfigurieren.Use HttpConnectionDispatcherOptions to configure advanced settings related to transports and memory buffer management. Diese Optionen werden konfiguriert, indem ein Delegat an <T> maphub in übergeben wird Startup.Configure .These options are configured by passing a delegate to MapHub<T> in Startup.Configure.

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

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

In der folgenden Tabelle werden die Optionen zum Konfigurieren der SignalR erweiterten http-Optionen von ASP.net Core beschrieben:The following table describes options for configuring ASP.NET Core SignalR's advanced HTTP options:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ApplicationMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die vom Client vor dem Anwenden des backdrucks vom Server gepuffert werden.The maximum number of bytes received from the client that the server buffers before applying backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller empfangen, ohne dass ein Rückdruck angewendet wird, der Arbeitsspeicher Verbrauch kann jedoch gesteigert werden.Increasing this value allows the server to receive larger messages more quickly without applying backpressure, but can increase memory consumption.
AuthorizationData Daten, die automatisch von den Authorize auf die Hub-Klasse angewendeten Attributen gesammelt werden.Data automatically gathered from the Authorize attributes applied to the Hub class. Eine Liste von iautorizedata -Objekten, die verwendet werden, um zu bestimmen, ob ein Client für die Verbindung mit dem Hub autorisiert ist.A list of IAuthorizeData objects used to determine if a client is authorized to connect to the hub.
TransportMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die von der APP gesendet werden, die der Server puffert, bevor der Rückdruck beobachtet wirdThe maximum number of bytes sent by the app that the server buffers before observing backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller Puffern, ohne dass auf den Rückstand gewartet wird, aber die Arbeitsspeicher Nutzung erhöhen kann.Increasing this value allows the server to buffer larger messages more quickly without awaiting backpressure, but can increase memory consumption.
Transports Alle Transporte sind aktiviert.All Transports are enabled. Ein Bitflags-Enumeration von HttpTransportType Werten, die die Transporte einschränken können, die ein Client für die Verbindungs Herstellung verwenden kann.A bit flags enum of HttpTransportType values that can restrict the transports a client can use to connect.
LongPolling Siehe unten.See below. Zusätzliche Optionen, die für den langen Abruf Transport spezifisch sind.Additional options specific to the Long Polling transport.
WebSockets Siehe unten.See below. Zusätzliche Optionen für den websockets-Transport.Additional options specific to the WebSockets transport.
MinimumProtocolVersion 00 Geben Sie die Mindestversion des Aushandlungs Protokolls an.Specify the minimum version of the negotiate protocol. Hiermit werden Clients auf neuere Versionen beschränkt.This is used to limit clients to newer versions.

Der lange Abruf Transport bietet zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können LongPolling :The Long Polling transport has additional options that can be configured using the LongPolling property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
PollTimeout 90 Sekunden90 seconds Die maximale Zeitspanne, die der Server wartet, bis eine Nachricht an den Client gesendet wird, bevor eine einzelne Abruf Anforderung beendet wird.The maximum amount of time the server waits for a message to send to the client before terminating a single poll request. Das verringern dieses Werts bewirkt, dass der Client neue Abruf Anforderungen häufiger ausgibt.Decreasing this value causes the client to issue new poll requests more frequently.

Der WebSocket-Transport verfügt über zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können WebSockets :The WebSocket transport has additional options that can be configured using the WebSockets property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
CloseTimeout 5 Sekunden5 seconds Wenn der Client nach dem Schließen des Servers nicht innerhalb dieses Zeitraums geschlossen werden kann, wird die Verbindung beendet.After the server closes, if the client fails to close within this time interval, the connection is terminated.
SubProtocolSelector null Ein Delegat, der verwendet werden kann, um den- Sec-WebSocket-Protocol Header auf einen benutzerdefinierten Wert festzulegen.A delegate that can be used to set the Sec-WebSocket-Protocol header to a custom value. Der Delegat empfängt die vom Client angeforderten Werte als Eingabe und erwartet, dass der gewünschte Wert zurückgegeben wird.The delegate receives the values requested by the client as input and is expected to return the desired value.

Konfigurieren von ClientoptionenConfigure client options

Client Optionen können für den Typ konfiguriert werden HubConnectionBuilder (verfügbar in den .net-und JavaScript-Clients).Client options can be configured on the HubConnectionBuilder type (available in the .NET and JavaScript clients). Sie steht auch im Java-Client zur Verfügung, aber die HttpHubConnectionBuilder Unterklasse enthält die Generator-Konfigurationsoptionen sowie die HubConnection selbst.It's also available in the Java client, but the HttpHubConnectionBuilder subclass is what contains the builder configuration options, as well as on the HubConnection itself.

Konfigurieren der ProtokollierungConfigure logging

Die Protokollierung wird mithilfe der-Methode im .NET-Client konfiguriert ConfigureLogging .Logging is configured in the .NET Client using the ConfigureLogging method. Protokollierungs Anbieter und Filter können auf die gleiche Weise wie auf dem Server registriert werden.Logging providers and filters can be registered in the same way as they are on the server. Weitere Informationen finden Sie in der Dokumentation zur Protokollierung ASP.net Core .See the Logging in ASP.NET Core documentation for more information.

Hinweis

Um Protokollierungs Anbieter zu registrieren, müssen Sie die erforderlichen Pakete installieren.In order to register Logging providers, you must install the necessary packages. Eine vollständige Liste finden Sie im Abschnitt integrierte Protokollierungs Anbieter der Dokumentation.See the Built-in logging providers section of the docs for a full list.

Um z. b. die Konsolen Protokollierung zu aktivieren, installieren Sie das Microsoft.Extensions.Logging.Console nuget-Paket.For example, to enable Console logging, install the Microsoft.Extensions.Logging.Console NuGet package. Die AddConsole Erweiterungsmethode aufzurufen:Call the AddConsole extension method:

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

Im JavaScript-Client ist eine ähnliche configureLogging Methode vorhanden.In the JavaScript client, a similar configureLogging method exists. Geben LogLevel Sie einen Wert an, der die minimale Ebene der zu erstellenden Protokollmeldungen angibt.Provide a LogLevel value indicating the minimum level of log messages to produce. Protokolle werden in das Browser Konsolenfenster geschrieben.Logs are written to the browser console window.

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

Anstelle eines LogLevel Werts können Sie auch einen Wert angeben, der den string Namen einer Protokollebene darstellt.Instead of a LogLevel value, you can also provide a string value representing a log level name. Dies ist nützlich, wenn SignalR Sie die Protokollierung in Umgebungen konfigurieren, in denen Sie keinen Zugriff auf die LogLevel Konstanten haben.This is useful when configuring SignalR logging in environments where you don't have access to the LogLevel constants.

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

In der folgenden Tabelle sind die verfügbaren Protokoll Ebenen aufgeführt.The following table lists the available log levels. Der von Ihnen bereitgestellte Wert, configureLogging der die minimale Protokollierung festlegt, die protokolliert werden soll.The value you provide to configureLogging sets the minimum log level that will be logged. Nachrichten, die auf dieser Ebene protokolliert werden, oder die nach der Tabelle aufgeführten Ebenenwerden protokolliert.Messages logged at this level, or the levels listed after it in the table, will be logged.

StringString LogLevelLogLevel
trace LogLevel.Trace
debug LogLevel.Debug
infooderinformationinfo or information LogLevel.Information
warnoderwarningwarn or warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Hinweis

Um die Protokollierung vollständig zu deaktivieren, geben Sie signalR.LogLevel.None in der configureLogging Methode anTo disable logging entirely, specify signalR.LogLevel.None in the configureLogging method.

Weitere Informationen zur Protokollierung finden Sie in der SignalR Diagnose Dokumentation.For more information on logging, see the SignalR Diagnostics documentation.

Der SignalR Java-Client verwendet die SLF4J -Bibliothek für die Protokollierung.The SignalR Java client uses the SLF4J library for logging. Dabei handelt es sich um eine allgemeine Protokollierungs-API, die es Benutzern der Bibliothek ermöglicht, ihre eigene spezifische Protokollierungs Implementierung zu wählen, indem Sie eine bestimmte Protokollierungs Abhängigkeit einbinden.It's a high-level logging API that allows users of the library to chose their own specific logging implementation by bringing in a specific logging dependency. Der folgende Code Ausschnitt zeigt, wie java.util.logging mit dem Java- SignalR Client verwendet wird.The following code snippet shows how to use java.util.logging with the SignalR Java client.

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

Wenn Sie die Protokollierung in ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine Standard Protokollierung ohne Vorgang mit folgender Warnmeldung:If you don't configure logging in your dependencies, SLF4J loads a default no-operation logger with the following warning message:

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.

Dies kann sicher ignoriert werden.This can safely be ignored.

Zulässige Transporte konfigurierenConfigure allowed transports

Die von verwendeten Transporte SignalR können im-Befehl WithUrl ( withUrl in JavaScript) konfiguriert werden.The transports used by SignalR can be configured in the WithUrl call (withUrl in JavaScript). Ein bitweises OR der Werte von HttpTransportType kann verwendet werden, um den Client so einzuschränken, dass nur die angegebenen Transporte verwendet werden.A bitwise-OR of the values of HttpTransportType can be used to restrict the client to only use the specified transports. Alle Transporte sind standardmäßig aktiviert.All transports are enabled by default.

So können Sie beispielsweise den Transport von Server gesendeten Ereignissen deaktivieren, aber websockets und lange Abruf Verbindungen zulassen:For example, to disable the Server-Sent Events transport, but allow WebSockets and Long Polling connections:

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

Im JavaScript-Client werden Transporte durch Festlegen des- transport Felds für das Options-Objekt konfiguriert, das für bereitgestellt wird withUrl :In the JavaScript client, transports are configured by setting the transport field on the options object provided to withUrl:

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

In dieser Version des Java-Clients ist websockets der einzige verfügbare Transport.In this version of the Java client websockets is the only available transport.

Im Java-Client wird der Transport mit der-Methode im ausgewählt withTransport HttpHubConnectionBuilder .In the Java client, the transport is selected with the withTransport method on the HttpHubConnectionBuilder. Der Java-Client verwendet standardmäßig den websockets-Transport.The Java client defaults to using the WebSockets transport.

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

Hinweis

Der SignalR Java-Client unterstützt noch keinen Transport Fall Back.The SignalR Java client doesn't support transport fallback yet.

Konfigurieren der bearerauthentifizierungConfigure bearer authentication

Um Authentifizierungsdaten zusammen mit Anforderungen bereitzustellen SignalR , verwenden AccessTokenProvider Sie die-Option ( accessTokenFactory in JavaScript), um eine Funktion anzugeben, die das gewünschte Zugriffs Token zurückgibt.To provide authentication data along with SignalR requests, use the AccessTokenProvider option (accessTokenFactory in JavaScript) to specify a function that returns the desired access token. Im .NET-Client wird dieses Zugriffs Token als http-tokenauthentifizierungstoken (mit dem- Authorization Header mit dem Typ) an das Token "bearerauthentifizierung" geleitet Bearer .In the .NET Client, this access token is passed in as an HTTP "Bearer Authentication" token (Using the Authorization header with a type of Bearer). Im JavaScript-Client wird das Zugriffs Token als bearertoken verwendet, außer in einigen Fällen, in denen Browser-APIs die Fähigkeit zum Anwenden von Headern einschränken (insbesondere bei vom Server gesendeten Ereignissen und websockets-Anforderungen).In the JavaScript client, the access token is used as a Bearer token, except in a few cases where browser APIs restrict the ability to apply headers (specifically, in Server-Sent Events and WebSockets requests). In diesen Fällen wird das Zugriffs Token als Abfrage Zeichenfolgen-Wert bereitgestellt access_token .In these cases, the access token is provided as a query string value access_token.

Im .NET-Client kann die AccessTokenProvider Option mithilfe des Options Delegaten in angegeben werden WithUrl :In the .NET client, the AccessTokenProvider option can be specified using the options delegate in WithUrl:

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

Im JavaScript-Client wird das Zugriffs Token konfiguriert, indem das- accessTokenFactory Feld für das Options-Objekt in festgelegt wird withUrl :In the JavaScript client, the access token is configured by setting the accessTokenFactory field on the options object in withUrl:

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

Im SignalR Java-Client können Sie ein bearertoken für die Authentifizierung konfigurieren, indem Sie eine zugriffstokenfactory für " httphubconnectionbuilder" bereitstellen.In the SignalR Java client, you can configure a bearer token to use for authentication by providing an access token factory to the HttpHubConnectionBuilder. Verwenden Sie withaccesstokenfactory , um eine einzelne <String> rxjava -Instanz bereitzustellen.Use withAccessTokenFactory to provide an RxJava Single<String>. Beim Aufrufen von " Single.Write" können Sie Logik schreiben, um Zugriffs Token für den Client zu erstellen.With a call to Single.defer, you can write logic to produce access tokens for your client.

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

Konfigurieren von Timeout-und Keep-Alive-OptionenConfigure timeout and keep-alive options

Zusätzliche Optionen zum Konfigurieren von Timeout und Keep-Alive-Verhalten sind für das HubConnection Objekt selbst verfügbar:Additional options for configuring timeout and keep-alive behavior are available on the HubConnection object itself:

OptionOption StandardwertDefault value BESCHREIBUNGDescription
ServerTimeout 30 Sekunden (30.000 Millisekunden)30 seconds (30,000 milliseconds) Timeout für die Serveraktivität.Timeout for server activity. Wenn der Server in diesem Intervall keine Nachricht gesendet hat, betrachtet der Client den Server als getrennt und löst das Closed Ereignis onclose aus (in JavaScript).If the server hasn't sent a message in this interval, the client considers the server disconnected and triggers the Closed event (onclose in JavaScript). Dieser Wert muss groß genug sein, damit eine Ping-Nachricht vom Server gesendet und innerhalb des Timeout Intervalls vom Client empfangen wird.This value must be large enough for a ping message to be sent from the server and received by the client within the timeout interval. Der empfohlene Wert ist eine Zahl, die mindestens dem Wert des Servers KeepAliveInterval entspricht, um Zeit für das Eintreffen von Pings zuzulassen.The recommended value is a number at least double the server's KeepAliveInterval value to allow time for pings to arrive.
HandshakeTimeout 15 Sekunden15 seconds Timeout für den anfänglichen Server Hand Shake.Timeout for initial server handshake. Wenn der Server in diesem Intervall keine Hand Shake Antwort sendet, bricht der Client den Handshake ab und löst das Closed Ereignis onclose aus (in JavaScript).If the server doesn't send a handshake response in this interval, the client cancels the handshake and triggers the Closed event (onclose in JavaScript). Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Bestimmt das Intervall, in dem der Client Ping-Nachrichten sendet.Determines the interval at which the client sends ping messages. Beim Senden von Nachrichten vom Client wird der Timer auf den Anfang des Intervalls zurückgesetzt.Sending any message from the client resets the timer to the start of the interval. Wenn der Client keine Nachricht in der ClientTimeoutInterval Gruppe auf dem Server gesendet hat, wird der Client vom Server als getrennt betrachtet.If the client hasn't sent a message in the ClientTimeoutInterval set on the server, the server considers the client disconnected.

Im .NET-Client werden Timeout Werte als Werte angegeben TimeSpan .In the .NET Client, timeout values are specified as TimeSpan values.

Konfigurieren zusätzlicher OptionenConfigure additional options

Zusätzliche Optionen können in der- WithUrl Methode ( withUrl in JavaScript) für HubConnectionBuilder oder für die verschiedenen Konfigurations-APIs auf dem HttpHubConnectionBuilder im Java-Client konfiguriert werden:Additional options can be configured in the WithUrl (withUrl in JavaScript) method on HubConnectionBuilder or on the various configuration APIs on the HttpHubConnectionBuilder in the Java client:

.Net-Option.NET Option StandardwertDefault value BESCHREIBUNGDescription
AccessTokenProvider null Eine Funktion, die eine Zeichenfolge zurückgibt, die als bearerauthentifizierungstoken in HTTP-Anforderungen bereitgestelltA function returning a string that is provided as a Bearer authentication token in HTTP requests.
SkipNegotiation false Legen Sie dies auf fest, true um den Aushandlungs Schritt zu überspringenSet this to true to skip the negotiation step. Wird nur unterstützt, wenn der websockets-Transport der einzige aktivierte Transport ist.Only supported when the WebSockets transport is the only enabled transport. Diese Einstellung kann nicht aktiviert werden, wenn der Azure-Dienst verwendet wird SignalR .This setting can't be enabled when using the Azure SignalR Service.
ClientCertificates LeerEmpty Eine Auflistung von TLS-Zertifikaten, die zum Authentifizieren von Anforderungen gesendet werden sollen.A collection of TLS certificates to send to authenticate requests.
Cookies LeerEmpty Eine Auflistung von http- cookie s, die mit jeder HTTP-Anforderung gesendet werden sollen.A collection of HTTP cookies to send with every HTTP request.
Credentials LeerEmpty Anmelde Informationen, die mit jeder HTTP-Anforderung gesendet werden.Credentials to send with every HTTP request.
CloseTimeout 5 Sekunden5 seconds Nur websockets.WebSockets only. Die maximale Zeitspanne, die der Client nach dem Schließen des Servers wartet, um die Anforderung zum Schließen zu bestätigen.The maximum amount of time the client waits after closing for the server to acknowledge the close request. Wenn der Server die Schließung innerhalb dieses Zeitraums nicht anerkennt, trennt der Client die Verbindung.If the server doesn't acknowledge the close within this time, the client disconnects.
Headers LeerEmpty Eine Karte mit zusätzlichen HTTP-Headern, die mit jeder HTTP-Anforderung gesendet werden sollen.A Map of additional HTTP headers to send with every HTTP request.
HttpMessageHandlerFactory null Ein Delegat, der verwendet werden kann, um den HttpMessageHandler zum Senden von HTTP-Anforderungen verwendeten zu konfigurieren oder zu ersetzen.A delegate that can be used to configure or replace the HttpMessageHandler used to send HTTP requests. Wird nicht für WebSocket-Verbindungen verwendet.Not used for WebSocket connections. Dieser Delegat muss einen Wert zurückgeben, der nicht NULL ist, und erhält den Standardwert als Parameter.This delegate must return a non-null value, and it receives the default value as a parameter. Ändern Sie die Einstellungen für diesen Standardwert, und geben Sie ihn zurück, oder geben Sie eine neue HttpMessageHandler Instanz zurück.Either modify settings on that default value and return it, or return a new HttpMessageHandler instance. Wenn Sie den Handler ersetzen, stellen Sie sicher, dass die Einstellungen, die Sie beibehalten möchten, vom bereitgestellten Handler kopiert werden. Andernfalls gelten die konfigurierten Optionen (z. b. Cookie s und Header) nicht für den neuen Handler.When replacing the handler make sure to copy the settings you want to keep from the provided handler, otherwise, the configured options (such as Cookies and Headers) won't apply to the new handler.
Proxy null Ein HTTP-Proxy, der beim Senden von HTTP-Anforderungen verwendet wird.An HTTP proxy to use when sending HTTP requests.
UseDefaultCredentials false Legen Sie diesen booleschen Wert fest, um die Standard Anmelde Informationen für http-und websockets-Anforderungen zu sendenSet this boolean to send the default credentials for HTTP and WebSockets requests. Dies ermöglicht die Verwendung der Windows-Authentifizierung.This enables the use of Windows authentication.
WebSocketConfiguration null Ein Delegat, der zum Konfigurieren zusätzlicher WebSocket-Optionen verwendet werden kann.A delegate that can be used to configure additional WebSocket options. Empfängt eine Instanz von clientwebsocketoptions , die zum Konfigurieren der Optionen verwendet werden kann.Receives an instance of ClientWebSocketOptions that can be used to configure the options.

Im .NET-Client können diese Optionen durch den für bereitgestellten Options Delegaten geändert werden WithUrl :In the .NET Client, these options can be modified by the options delegate provided to WithUrl:

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

Im JavaScript-Client können diese Optionen in einem JavaScript-Objekt bereitgestellt werden, das für Folgendes bereitgestellt wird withUrl :In the JavaScript Client, these options can be provided in a JavaScript object provided to withUrl:

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

Im Java-Client können diese Optionen mit den Methoden auf der konfiguriert werden, die HttpHubConnectionBuilder von der HubConnectionBuilder.create("HUB URL")In the Java client, these options can be configured with the methods on the HttpHubConnectionBuilder returned from the HubConnectionBuilder.create("HUB URL")

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

Zusätzliche RessourcenAdditional resources

JSON/messagepack-SerialisierungsoptionenJSON/MessagePack serialization options

ASP.net Core SignalR unterstützt zwei Protokolle zum Codieren von Nachrichten: JSON und messagepack.ASP.NET Core SignalR supports two protocols for encoding messages: JSON and MessagePack. Jedes Protokoll verfügt über Konfigurationsoptionen für die Serialisierung.Each protocol has serialization configuration options.

Die JSON-Serialisierung kann mithilfe der addjsonprotocol -Erweiterungsmethode auf dem Server konfiguriert werden.JSON serialization can be configured on the server using the AddJsonProtocol extension method. AddJsonProtocolkann nach Add SignalR in hinzugefügt werden Startup.ConfigureServices .AddJsonProtocol can be added after AddSignalR in Startup.ConfigureServices. Die- AddJsonProtocol Methode nimmt einen Delegaten an, der ein- options Objekt empfängt.The AddJsonProtocol method takes a delegate that receives an options object. Die payloadserializeroptions -Eigenschaft für dieses Objekt ist ein- System.Text.Json JsonSerializerOptions Objekt, das zum Konfigurieren der Serialisierung von Argumenten und Rückgabe Werten verwendet werden kann.The PayloadSerializerOptions property on that object is a System.Text.Json JsonSerializerOptions object that can be used to configure serialization of arguments and return values. Weitere Informationen finden Sie in den System.Text.Jszur Dokumentation.For more information, see the System.Text.Json documentation.

Verwenden Sie beispielsweise den folgenden Code in, um das Serialisierungsprogramm so zu konfigurieren, dass die Groß-/Kleinschreibung von Eigenschaftsnamen nicht geändert wird. verwenden Sie dazu den folgenden Code in Startup.ConfigureServices :As an example, to configure the serializer to not change the casing of property names, instead of the default "camelCase" names, use the following code in Startup.ConfigureServices:

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

Im .NET-Client ist dieselbe AddJsonProtocol Erweiterungsmethode auf hubconnectionbuildervorhanden.In the .NET client, the same AddJsonProtocol extension method exists on HubConnectionBuilder. Der Microsoft.Extensions.DependencyInjection Namespace muss importiert werden, um die Erweiterungsmethode aufzulösen:The Microsoft.Extensions.DependencyInjection namespace must be imported to resolve the extension method:

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

Hinweis

Zurzeit ist es nicht möglich, JSON-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure JSON serialization in the JavaScript client at this time.

Zum Newtonsoft.JswechselnSwitch to Newtonsoft.Json

Wenn Sie Features von benötigen Newtonsoft.Json , die in nicht unterstützt System.Text.Json werden, finden Sie weitere Informationen unter Wechseln zu Newtonsoft.Json.If you need features of Newtonsoft.Json that aren't supported in System.Text.Json, See Switch to Newtonsoft.Json.

Messagepack-SerialisierungsoptionenMessagePack serialization options

Die messagepack-Serialisierung kann konfiguriert werden, indem ein Delegat für den addmessagepackprotocol -Aufruf bereitgestellt wird.MessagePack serialization can be configured by providing a delegate to the AddMessagePackProtocol call. Weitere Informationen finden Sie unter SignalR messagepack in .See MessagePack in SignalR for more details.

Hinweis

Zurzeit ist es nicht möglich, die messagepack-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure MessagePack serialization in the JavaScript client at this time.

Konfigurieren von ServeroptionenConfigure server options

In der folgenden Tabelle werden die Optionen zum Konfigurieren von SignalR Hubs beschrieben:The following table describes options for configuring SignalR hubs:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ClientTimeoutInterval 30 Sekunden30 seconds Der Server wird vom-Client als getrennt betrachtet, wenn in diesem Intervall keine Nachricht (einschließlich Keep-Alive) empfangen wurde.The server will consider the client disconnected if it hasn't received a message (including keep-alive) in this interval. Es kann länger dauern, bis der Client als getrennt gekennzeichnet ist, weil dies implementiert ist.It could take longer than this timeout interval for the client to actually be marked disconnected, due to how this is implemented. Der empfohlene Wert ist Double- KeepAliveInterval Wert.The recommended value is double the KeepAliveInterval value.
HandshakeTimeout 15 Sekunden15 seconds Wenn der Client innerhalb dieses Zeitraums keine anfängliche Hand Shake Nachricht sendet, wird die Verbindung geschlossen.If the client doesn't send an initial handshake message within this time interval, the connection is closed. Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Wenn der Server innerhalb dieses Intervalls keine Nachricht gesendet hat, wird automatisch eine Ping-Nachricht gesendet, um die Verbindung offen zu halten.If the server hasn't sent a message within this interval, a ping message is sent automatically to keep the connection open. Ändern Sie KeepAliveInterval die ServerTimeout / serverTimeoutInMilliseconds Einstellung auf dem Client, wenn Sie sich ändern.When changing KeepAliveInterval, change the ServerTimeout/serverTimeoutInMilliseconds setting on the client. Der empfohlene ServerTimeout / serverTimeoutInMilliseconds Wert ist Double- KeepAliveInterval Wert.The recommended ServerTimeout/serverTimeoutInMilliseconds value is double the KeepAliveInterval value.
SupportedProtocols Alle installierten ProtokolleAll installed protocols Protokolle, die von diesem Hub unterstützt werden.Protocols supported by this hub. Standardmäßig sind alle auf dem Server registrierten Protokolle zulässig, aber Protokolle können aus dieser Liste entfernt werden, um bestimmte Protokolle für einzelne Hubs zu deaktivieren.By default, all protocols registered on the server are allowed, but protocols can be removed from this list to disable specific protocols for individual hubs.
EnableDetailedErrors false Wenn der Wert true ist, werden ausführliche Ausnahme Meldungen an Clients zurückgegeben, wenn eine Ausnahme in einer Hub-Methode ausgelöst wird.If true, detailed exception messages are returned to clients when an exception is thrown in a Hub method. Der Standardwert ist false , da diese Ausnahme Meldungen vertrauliche Informationen enthalten können.The default is false, as these exception messages can contain sensitive information.
StreamBufferCapacity 10 Die maximale Anzahl von Elementen, die für Client-uploadstreams gepuffert werden können.The maximum number of items that can be buffered for client upload streams. Wenn dieser Grenzwert erreicht wird, wird die Verarbeitung von Aufrufen blockiert, bis der Server streamingelemente verarbeitet.If this limit is reached, the processing of invocations is blocked until the server processes stream items.
MaximumReceiveMessageSize 32 KB32 KB Maximale Größe einer einzelnen eingehenden Hub-Nachricht.Maximum size of a single incoming hub message.

Optionen können für alle Hubs konfiguriert werden, indem ein Options Delegat für den Aufruf in bereitgestellt wird AddSignalR Startup.ConfigureServices .Options can be configured for all hubs by providing an options delegate to the AddSignalR call in Startup.ConfigureServices.

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

Optionen für einen einzelnen Hub überschreiben die in bereitgestellten globalen Optionen AddSignalR und können mithilfe von konfiguriert werden AddHubOptions :Options for a single hub override the global options provided in AddSignalR and can be configured using AddHubOptions:

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

Erweiterte http-KonfigurationsoptionenAdvanced HTTP configuration options

Verwenden HttpConnectionDispatcherOptions Sie, um erweiterte Einstellungen im Zusammenhang mit Transporte und der Speicherpuffer Verwaltung zu konfigurieren.Use HttpConnectionDispatcherOptions to configure advanced settings related to transports and memory buffer management. Diese Optionen werden konfiguriert, indem ein Delegat an <T> maphub in übergeben wird Startup.Configure .These options are configured by passing a delegate to MapHub<T> in Startup.Configure.

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

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

In der folgenden Tabelle werden die Optionen zum Konfigurieren der SignalR erweiterten http-Optionen von ASP.net Core beschrieben:The following table describes options for configuring ASP.NET Core SignalR's advanced HTTP options:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ApplicationMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die vom Client vor dem Anwenden des backdrucks vom Server gepuffert werden.The maximum number of bytes received from the client that the server buffers before applying backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller empfangen, ohne dass ein Rückdruck angewendet wird, der Arbeitsspeicher Verbrauch kann jedoch gesteigert werden.Increasing this value allows the server to receive larger messages more quickly without applying backpressure, but can increase memory consumption.
AuthorizationData Daten, die automatisch von den Authorize auf die Hub-Klasse angewendeten Attributen gesammelt werden.Data automatically gathered from the Authorize attributes applied to the Hub class. Eine Liste von iautorizedata -Objekten, die verwendet werden, um zu bestimmen, ob ein Client für die Verbindung mit dem Hub autorisiert ist.A list of IAuthorizeData objects used to determine if a client is authorized to connect to the hub.
TransportMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die von der APP gesendet werden, die der Server puffert, bevor der Rückdruck beobachtet wirdThe maximum number of bytes sent by the app that the server buffers before observing backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller Puffern, ohne dass auf den Rückstand gewartet wird, aber die Arbeitsspeicher Nutzung erhöhen kann.Increasing this value allows the server to buffer larger messages more quickly without awaiting backpressure, but can increase memory consumption.
Transports Alle Transporte sind aktiviert.All Transports are enabled. Ein Bitflags-Enumeration von HttpTransportType Werten, die die Transporte einschränken können, die ein Client für die Verbindungs Herstellung verwenden kann.A bit flags enum of HttpTransportType values that can restrict the transports a client can use to connect.
LongPolling Siehe unten.See below. Zusätzliche Optionen, die für den langen Abruf Transport spezifisch sind.Additional options specific to the Long Polling transport.
WebSockets Siehe unten.See below. Zusätzliche Optionen für den websockets-Transport.Additional options specific to the WebSockets transport.
MinimumProtocolVersion 00 Geben Sie die Mindestversion des Aushandlungs Protokolls an.Specify the minimum version of the negotiate protocol. Hiermit werden Clients auf neuere Versionen beschränkt.This is used to limit clients to newer versions.

Der lange Abruf Transport bietet zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können LongPolling :The Long Polling transport has additional options that can be configured using the LongPolling property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
PollTimeout 90 Sekunden90 seconds Die maximale Zeitspanne, die der Server wartet, bis eine Nachricht an den Client gesendet wird, bevor eine einzelne Abruf Anforderung beendet wird.The maximum amount of time the server waits for a message to send to the client before terminating a single poll request. Das verringern dieses Werts bewirkt, dass der Client neue Abruf Anforderungen häufiger ausgibt.Decreasing this value causes the client to issue new poll requests more frequently.

Der WebSocket-Transport verfügt über zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können WebSockets :The WebSocket transport has additional options that can be configured using the WebSockets property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
CloseTimeout 5 Sekunden5 seconds Wenn der Client nach dem Schließen des Servers nicht innerhalb dieses Zeitraums geschlossen werden kann, wird die Verbindung beendet.After the server closes, if the client fails to close within this time interval, the connection is terminated.
SubProtocolSelector null Ein Delegat, der verwendet werden kann, um den- Sec-WebSocket-Protocol Header auf einen benutzerdefinierten Wert festzulegen.A delegate that can be used to set the Sec-WebSocket-Protocol header to a custom value. Der Delegat empfängt die vom Client angeforderten Werte als Eingabe und erwartet, dass der gewünschte Wert zurückgegeben wird.The delegate receives the values requested by the client as input and is expected to return the desired value.

Konfigurieren von ClientoptionenConfigure client options

Client Optionen können für den Typ konfiguriert werden HubConnectionBuilder (verfügbar in den .net-und JavaScript-Clients).Client options can be configured on the HubConnectionBuilder type (available in the .NET and JavaScript clients). Sie steht auch im Java-Client zur Verfügung, aber die HttpHubConnectionBuilder Unterklasse enthält die Generator-Konfigurationsoptionen sowie die HubConnection selbst.It's also available in the Java client, but the HttpHubConnectionBuilder subclass is what contains the builder configuration options, as well as on the HubConnection itself.

Konfigurieren der ProtokollierungConfigure logging

Die Protokollierung wird mithilfe der-Methode im .NET-Client konfiguriert ConfigureLogging .Logging is configured in the .NET Client using the ConfigureLogging method. Protokollierungs Anbieter und Filter können auf die gleiche Weise wie auf dem Server registriert werden.Logging providers and filters can be registered in the same way as they are on the server. Weitere Informationen finden Sie in der Dokumentation zur Protokollierung ASP.net Core .See the Logging in ASP.NET Core documentation for more information.

Hinweis

Um Protokollierungs Anbieter zu registrieren, müssen Sie die erforderlichen Pakete installieren.In order to register Logging providers, you must install the necessary packages. Eine vollständige Liste finden Sie im Abschnitt integrierte Protokollierungs Anbieter der Dokumentation.See the Built-in logging providers section of the docs for a full list.

Um z. b. die Konsolen Protokollierung zu aktivieren, installieren Sie das Microsoft.Extensions.Logging.Console nuget-Paket.For example, to enable Console logging, install the Microsoft.Extensions.Logging.Console NuGet package. Die AddConsole Erweiterungsmethode aufzurufen:Call the AddConsole extension method:

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

Im JavaScript-Client ist eine ähnliche configureLogging Methode vorhanden.In the JavaScript client, a similar configureLogging method exists. Geben LogLevel Sie einen Wert an, der die minimale Ebene der zu erstellenden Protokollmeldungen angibt.Provide a LogLevel value indicating the minimum level of log messages to produce. Protokolle werden in das Browser Konsolenfenster geschrieben.Logs are written to the browser console window.

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

Anstelle eines LogLevel Werts können Sie auch einen Wert angeben, der den string Namen einer Protokollebene darstellt.Instead of a LogLevel value, you can also provide a string value representing a log level name. Dies ist nützlich, wenn SignalR Sie die Protokollierung in Umgebungen konfigurieren, in denen Sie keinen Zugriff auf die LogLevel Konstanten haben.This is useful when configuring SignalR logging in environments where you don't have access to the LogLevel constants.

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

In der folgenden Tabelle sind die verfügbaren Protokoll Ebenen aufgeführt.The following table lists the available log levels. Der von Ihnen bereitgestellte Wert, configureLogging der die minimale Protokollierung festlegt, die protokolliert werden soll.The value you provide to configureLogging sets the minimum log level that will be logged. Nachrichten, die auf dieser Ebene protokolliert werden, oder die nach der Tabelle aufgeführten Ebenenwerden protokolliert.Messages logged at this level, or the levels listed after it in the table, will be logged.

StringString LogLevelLogLevel
trace LogLevel.Trace
debug LogLevel.Debug
infooderinformationinfo or information LogLevel.Information
warnoderwarningwarn or warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Hinweis

Um die Protokollierung vollständig zu deaktivieren, geben Sie signalR.LogLevel.None in der configureLogging Methode anTo disable logging entirely, specify signalR.LogLevel.None in the configureLogging method.

Weitere Informationen zur Protokollierung finden Sie in der SignalR Diagnose Dokumentation.For more information on logging, see the SignalR Diagnostics documentation.

Der SignalR Java-Client verwendet die SLF4J -Bibliothek für die Protokollierung.The SignalR Java client uses the SLF4J library for logging. Dabei handelt es sich um eine allgemeine Protokollierungs-API, die es Benutzern der Bibliothek ermöglicht, ihre eigene spezifische Protokollierungs Implementierung zu wählen, indem Sie eine bestimmte Protokollierungs Abhängigkeit einbinden.It's a high-level logging API that allows users of the library to chose their own specific logging implementation by bringing in a specific logging dependency. Der folgende Code Ausschnitt zeigt, wie java.util.logging mit dem Java- SignalR Client verwendet wird.The following code snippet shows how to use java.util.logging with the SignalR Java client.

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

Wenn Sie die Protokollierung in ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine Standard Protokollierung ohne Vorgang mit folgender Warnmeldung:If you don't configure logging in your dependencies, SLF4J loads a default no-operation logger with the following warning message:

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.

Dies kann sicher ignoriert werden.This can safely be ignored.

Zulässige Transporte konfigurierenConfigure allowed transports

Die von verwendeten Transporte SignalR können im-Befehl WithUrl ( withUrl in JavaScript) konfiguriert werden.The transports used by SignalR can be configured in the WithUrl call (withUrl in JavaScript). Ein bitweises OR der Werte von HttpTransportType kann verwendet werden, um den Client so einzuschränken, dass nur die angegebenen Transporte verwendet werden.A bitwise-OR of the values of HttpTransportType can be used to restrict the client to only use the specified transports. Alle Transporte sind standardmäßig aktiviert.All transports are enabled by default.

So können Sie beispielsweise den Transport von Server gesendeten Ereignissen deaktivieren, aber websockets und lange Abruf Verbindungen zulassen:For example, to disable the Server-Sent Events transport, but allow WebSockets and Long Polling connections:

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

Im JavaScript-Client werden Transporte durch Festlegen des- transport Felds für das Options-Objekt konfiguriert, das für bereitgestellt wird withUrl :In the JavaScript client, transports are configured by setting the transport field on the options object provided to withUrl:

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

In dieser Version des Java-Clients ist websockets der einzige verfügbare Transport.In this version of the Java client websockets is the only available transport.

Im Java-Client wird der Transport mit der-Methode im ausgewählt withTransport HttpHubConnectionBuilder .In the Java client, the transport is selected with the withTransport method on the HttpHubConnectionBuilder. Der Java-Client verwendet standardmäßig den websockets-Transport.The Java client defaults to using the WebSockets transport.

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

Hinweis

Der SignalR Java-Client unterstützt noch keinen Transport Fall Back.The SignalR Java client doesn't support transport fallback yet.

Konfigurieren der bearerauthentifizierungConfigure bearer authentication

Um Authentifizierungsdaten zusammen mit Anforderungen bereitzustellen SignalR , verwenden AccessTokenProvider Sie die-Option ( accessTokenFactory in JavaScript), um eine Funktion anzugeben, die das gewünschte Zugriffs Token zurückgibt.To provide authentication data along with SignalR requests, use the AccessTokenProvider option (accessTokenFactory in JavaScript) to specify a function that returns the desired access token. Im .NET-Client wird dieses Zugriffs Token als http-tokenauthentifizierungstoken (mit dem- Authorization Header mit dem Typ) an das Token "bearerauthentifizierung" geleitet Bearer .In the .NET Client, this access token is passed in as an HTTP "Bearer Authentication" token (Using the Authorization header with a type of Bearer). Im JavaScript-Client wird das Zugriffs Token als bearertoken verwendet, außer in einigen Fällen, in denen Browser-APIs die Fähigkeit zum Anwenden von Headern einschränken (insbesondere bei vom Server gesendeten Ereignissen und websockets-Anforderungen).In the JavaScript client, the access token is used as a Bearer token, except in a few cases where browser APIs restrict the ability to apply headers (specifically, in Server-Sent Events and WebSockets requests). In diesen Fällen wird das Zugriffs Token als Abfrage Zeichenfolgen-Wert bereitgestellt access_token .In these cases, the access token is provided as a query string value access_token.

Im .NET-Client kann die AccessTokenProvider Option mithilfe des Options Delegaten in angegeben werden WithUrl :In the .NET client, the AccessTokenProvider option can be specified using the options delegate in WithUrl:

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

Im JavaScript-Client wird das Zugriffs Token konfiguriert, indem das- accessTokenFactory Feld für das Options-Objekt in festgelegt wird withUrl :In the JavaScript client, the access token is configured by setting the accessTokenFactory field on the options object in withUrl:

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

Im SignalR Java-Client können Sie ein bearertoken für die Authentifizierung konfigurieren, indem Sie eine zugriffstokenfactory für " httphubconnectionbuilder" bereitstellen.In the SignalR Java client, you can configure a bearer token to use for authentication by providing an access token factory to the HttpHubConnectionBuilder. Verwenden Sie withaccesstokenfactory , um eine einzelne <String> rxjava -Instanz bereitzustellen.Use withAccessTokenFactory to provide an RxJava Single<String>. Beim Aufrufen von " Single.Write" können Sie Logik schreiben, um Zugriffs Token für den Client zu erstellen.With a call to Single.defer, you can write logic to produce access tokens for your client.

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

Konfigurieren von Timeout-und Keep-Alive-OptionenConfigure timeout and keep-alive options

Zusätzliche Optionen zum Konfigurieren von Timeout und Keep-Alive-Verhalten sind für das HubConnection Objekt selbst verfügbar:Additional options for configuring timeout and keep-alive behavior are available on the HubConnection object itself:

OptionOption StandardwertDefault value BESCHREIBUNGDescription
ServerTimeout 30 Sekunden (30.000 Millisekunden)30 seconds (30,000 milliseconds) Timeout für die Serveraktivität.Timeout for server activity. Wenn der Server in diesem Intervall keine Nachricht gesendet hat, betrachtet der Client den Server als getrennt und löst das Closed Ereignis onclose aus (in JavaScript).If the server hasn't sent a message in this interval, the client considers the server disconnected and triggers the Closed event (onclose in JavaScript). Dieser Wert muss groß genug sein, damit eine Ping-Nachricht vom Server gesendet und innerhalb des Timeout Intervalls vom Client empfangen wird.This value must be large enough for a ping message to be sent from the server and received by the client within the timeout interval. Der empfohlene Wert ist eine Zahl, die mindestens dem Wert des Servers KeepAliveInterval entspricht, um Zeit für das Eintreffen von Pings zuzulassen.The recommended value is a number at least double the server's KeepAliveInterval value to allow time for pings to arrive.
HandshakeTimeout 15 Sekunden15 seconds Timeout für den anfänglichen Server Hand Shake.Timeout for initial server handshake. Wenn der Server in diesem Intervall keine Hand Shake Antwort sendet, bricht der Client den Handshake ab und löst das Closed Ereignis onclose aus (in JavaScript).If the server doesn't send a handshake response in this interval, the client cancels the handshake and triggers the Closed event (onclose in JavaScript). Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Bestimmt das Intervall, in dem der Client Ping-Nachrichten sendet.Determines the interval at which the client sends ping messages. Beim Senden von Nachrichten vom Client wird der Timer auf den Anfang des Intervalls zurückgesetzt.Sending any message from the client resets the timer to the start of the interval. Wenn der Client keine Nachricht in der ClientTimeoutInterval Gruppe auf dem Server gesendet hat, wird der Client vom Server als getrennt betrachtet.If the client hasn't sent a message in the ClientTimeoutInterval set on the server, the server considers the client disconnected.

Im .NET-Client werden Timeout Werte als Werte angegeben TimeSpan .In the .NET Client, timeout values are specified as TimeSpan values.

Konfigurieren zusätzlicher OptionenConfigure additional options

Zusätzliche Optionen können in der- WithUrl Methode ( withUrl in JavaScript) für HubConnectionBuilder oder für die verschiedenen Konfigurations-APIs auf dem HttpHubConnectionBuilder im Java-Client konfiguriert werden:Additional options can be configured in the WithUrl (withUrl in JavaScript) method on HubConnectionBuilder or on the various configuration APIs on the HttpHubConnectionBuilder in the Java client:

.Net-Option.NET Option StandardwertDefault value BESCHREIBUNGDescription
AccessTokenProvider null Eine Funktion, die eine Zeichenfolge zurückgibt, die als bearerauthentifizierungstoken in HTTP-Anforderungen bereitgestelltA function returning a string that is provided as a Bearer authentication token in HTTP requests.
SkipNegotiation false Legen Sie dies auf fest, true um den Aushandlungs Schritt zu überspringenSet this to true to skip the negotiation step. Wird nur unterstützt, wenn der websockets-Transport der einzige aktivierte Transport ist.Only supported when the WebSockets transport is the only enabled transport. Diese Einstellung kann nicht aktiviert werden, wenn der Azure-Dienst verwendet wird SignalR .This setting can't be enabled when using the Azure SignalR Service.
ClientCertificates LeerEmpty Eine Auflistung von TLS-Zertifikaten, die zum Authentifizieren von Anforderungen gesendet werden sollen.A collection of TLS certificates to send to authenticate requests.
Cookies LeerEmpty Eine Auflistung von http- cookie s, die mit jeder HTTP-Anforderung gesendet werden sollen.A collection of HTTP cookies to send with every HTTP request.
Credentials LeerEmpty Anmelde Informationen, die mit jeder HTTP-Anforderung gesendet werden.Credentials to send with every HTTP request.
CloseTimeout 5 Sekunden5 seconds Nur websockets.WebSockets only. Die maximale Zeitspanne, die der Client nach dem Schließen des Servers wartet, um die Anforderung zum Schließen zu bestätigen.The maximum amount of time the client waits after closing for the server to acknowledge the close request. Wenn der Server die Schließung innerhalb dieses Zeitraums nicht anerkennt, trennt der Client die Verbindung.If the server doesn't acknowledge the close within this time, the client disconnects.
Headers LeerEmpty Eine Karte mit zusätzlichen HTTP-Headern, die mit jeder HTTP-Anforderung gesendet werden sollen.A Map of additional HTTP headers to send with every HTTP request.
HttpMessageHandlerFactory null Ein Delegat, der verwendet werden kann, um den HttpMessageHandler zum Senden von HTTP-Anforderungen verwendeten zu konfigurieren oder zu ersetzen.A delegate that can be used to configure or replace the HttpMessageHandler used to send HTTP requests. Wird nicht für WebSocket-Verbindungen verwendet.Not used for WebSocket connections. Dieser Delegat muss einen Wert zurückgeben, der nicht NULL ist, und erhält den Standardwert als Parameter.This delegate must return a non-null value, and it receives the default value as a parameter. Ändern Sie die Einstellungen für diesen Standardwert, und geben Sie ihn zurück, oder geben Sie eine neue HttpMessageHandler Instanz zurück.Either modify settings on that default value and return it, or return a new HttpMessageHandler instance. Wenn Sie den Handler ersetzen, stellen Sie sicher, dass die Einstellungen, die Sie beibehalten möchten, vom bereitgestellten Handler kopiert werden. Andernfalls gelten die konfigurierten Optionen (z. b. Cookie s und Header) nicht für den neuen Handler.When replacing the handler make sure to copy the settings you want to keep from the provided handler, otherwise, the configured options (such as Cookies and Headers) won't apply to the new handler.
Proxy null Ein HTTP-Proxy, der beim Senden von HTTP-Anforderungen verwendet wird.An HTTP proxy to use when sending HTTP requests.
UseDefaultCredentials false Legen Sie diesen booleschen Wert fest, um die Standard Anmelde Informationen für http-und websockets-Anforderungen zu sendenSet this boolean to send the default credentials for HTTP and WebSockets requests. Dies ermöglicht die Verwendung der Windows-Authentifizierung.This enables the use of Windows authentication.
WebSocketConfiguration null Ein Delegat, der zum Konfigurieren zusätzlicher WebSocket-Optionen verwendet werden kann.A delegate that can be used to configure additional WebSocket options. Empfängt eine Instanz von clientwebsocketoptions , die zum Konfigurieren der Optionen verwendet werden kann.Receives an instance of ClientWebSocketOptions that can be used to configure the options.

Im .NET-Client können diese Optionen durch den für bereitgestellten Options Delegaten geändert werden WithUrl :In the .NET Client, these options can be modified by the options delegate provided to WithUrl:

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

Im JavaScript-Client können diese Optionen in einem JavaScript-Objekt bereitgestellt werden, das für Folgendes bereitgestellt wird withUrl :In the JavaScript Client, these options can be provided in a JavaScript object provided to withUrl:

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

Im Java-Client können diese Optionen mit den Methoden auf der konfiguriert werden, die HttpHubConnectionBuilder von der HubConnectionBuilder.create("HUB URL")In the Java client, these options can be configured with the methods on the HttpHubConnectionBuilder returned from the HubConnectionBuilder.create("HUB URL")

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

Zusätzliche RessourcenAdditional resources

JSON/messagepack-SerialisierungsoptionenJSON/MessagePack serialization options

ASP.net Core SignalR unterstützt zwei Protokolle zum Codieren von Nachrichten: JSON und messagepack.ASP.NET Core SignalR supports two protocols for encoding messages: JSON and MessagePack. Jedes Protokoll verfügt über Konfigurationsoptionen für die Serialisierung.Each protocol has serialization configuration options.

Die JSON-Serialisierung kann mithilfe der addjsonprotocol -Erweiterungsmethode auf dem Server konfiguriert werden.JSON serialization can be configured on the server using the AddJsonProtocol extension method. AddJsonProtocolkann nach Add SignalR in hinzugefügt werden Startup.ConfigureServices .AddJsonProtocol can be added after AddSignalR in Startup.ConfigureServices. Die- AddJsonProtocol Methode nimmt einen Delegaten an, der ein- options Objekt empfängt.The AddJsonProtocol method takes a delegate that receives an options object. Die payloadserializeroptions -Eigenschaft für dieses Objekt ist ein- System.Text.Json JsonSerializerOptions Objekt, das zum Konfigurieren der Serialisierung von Argumenten und Rückgabe Werten verwendet werden kann.The PayloadSerializerOptions property on that object is a System.Text.Json JsonSerializerOptions object that can be used to configure serialization of arguments and return values. Weitere Informationen finden Sie in den System.Text.Jszur Dokumentation.For more information, see the System.Text.Json documentation.

Verwenden Sie beispielsweise den folgenden Code in, um das Serialisierungsprogramm so zu konfigurieren, dass die Groß-/Kleinschreibung von Eigenschaftsnamen nicht geändert wird. verwenden Sie dazu den folgenden Code in Startup.ConfigureServices :As an example, to configure the serializer to not change the casing of property names, instead of the default "camelCase" names, use the following code in Startup.ConfigureServices:

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

Im .NET-Client ist dieselbe AddJsonProtocol Erweiterungsmethode auf hubconnectionbuildervorhanden.In the .NET client, the same AddJsonProtocol extension method exists on HubConnectionBuilder. Der Microsoft.Extensions.DependencyInjection Namespace muss importiert werden, um die Erweiterungsmethode aufzulösen:The Microsoft.Extensions.DependencyInjection namespace must be imported to resolve the extension method:

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

Hinweis

Zurzeit ist es nicht möglich, JSON-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure JSON serialization in the JavaScript client at this time.

Zum Newtonsoft.JswechselnSwitch to Newtonsoft.Json

Wenn Sie Features von benötigen Newtonsoft.Json , die in nicht unterstützt System.Text.Json werden, finden Sie weitere Informationen unter Wechseln zu Newtonsoft.Json.If you need features of Newtonsoft.Json that aren't supported in System.Text.Json, See Switch to Newtonsoft.Json.

Messagepack-SerialisierungsoptionenMessagePack serialization options

Die messagepack-Serialisierung kann konfiguriert werden, indem ein Delegat für den addmessagepackprotocol -Aufruf bereitgestellt wird.MessagePack serialization can be configured by providing a delegate to the AddMessagePackProtocol call. Weitere Informationen finden Sie unter SignalR messagepack in .See MessagePack in SignalR for more details.

Hinweis

Zurzeit ist es nicht möglich, die messagepack-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure MessagePack serialization in the JavaScript client at this time.

Konfigurieren von ServeroptionenConfigure server options

In der folgenden Tabelle werden die Optionen zum Konfigurieren von SignalR Hubs beschrieben:The following table describes options for configuring SignalR hubs:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ClientTimeoutInterval 30 Sekunden30 seconds Der Server wird vom-Client als getrennt betrachtet, wenn in diesem Intervall keine Nachricht (einschließlich Keep-Alive) empfangen wurde.The server will consider the client disconnected if it hasn't received a message (including keep-alive) in this interval. Es kann länger dauern, bis der Client als getrennt gekennzeichnet ist, weil dies implementiert ist.It could take longer than this timeout interval for the client to actually be marked disconnected, due to how this is implemented. Der empfohlene Wert ist Double- KeepAliveInterval Wert.The recommended value is double the KeepAliveInterval value.
HandshakeTimeout 15 Sekunden15 seconds Wenn der Client innerhalb dieses Zeitraums keine anfängliche Hand Shake Nachricht sendet, wird die Verbindung geschlossen.If the client doesn't send an initial handshake message within this time interval, the connection is closed. Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Wenn der Server innerhalb dieses Intervalls keine Nachricht gesendet hat, wird automatisch eine Ping-Nachricht gesendet, um die Verbindung offen zu halten.If the server hasn't sent a message within this interval, a ping message is sent automatically to keep the connection open. Ändern Sie KeepAliveInterval die ServerTimeout / serverTimeoutInMilliseconds Einstellung auf dem Client, wenn Sie sich ändern.When changing KeepAliveInterval, change the ServerTimeout/serverTimeoutInMilliseconds setting on the client. Der empfohlene ServerTimeout / serverTimeoutInMilliseconds Wert ist Double- KeepAliveInterval Wert.The recommended ServerTimeout/serverTimeoutInMilliseconds value is double the KeepAliveInterval value.
SupportedProtocols Alle installierten ProtokolleAll installed protocols Protokolle, die von diesem Hub unterstützt werden.Protocols supported by this hub. Standardmäßig sind alle auf dem Server registrierten Protokolle zulässig, aber Protokolle können aus dieser Liste entfernt werden, um bestimmte Protokolle für einzelne Hubs zu deaktivieren.By default, all protocols registered on the server are allowed, but protocols can be removed from this list to disable specific protocols for individual hubs.
EnableDetailedErrors false Wenn der Wert true ist, werden ausführliche Ausnahme Meldungen an Clients zurückgegeben, wenn eine Ausnahme in einer Hub-Methode ausgelöst wird.If true, detailed exception messages are returned to clients when an exception is thrown in a Hub method. Der Standardwert ist false , da diese Ausnahme Meldungen vertrauliche Informationen enthalten können.The default is false, as these exception messages can contain sensitive information.
StreamBufferCapacity 10 Die maximale Anzahl von Elementen, die für Client-uploadstreams gepuffert werden können.The maximum number of items that can be buffered for client upload streams. Wenn dieser Grenzwert erreicht wird, wird die Verarbeitung von Aufrufen blockiert, bis der Server streamingelemente verarbeitet.If this limit is reached, the processing of invocations is blocked until the server processes stream items.
MaximumReceiveMessageSize 32 KB32 KB Maximale Größe einer einzelnen eingehenden Hub-Nachricht.Maximum size of a single incoming hub message.

Optionen können für alle Hubs konfiguriert werden, indem ein Options Delegat für den Aufruf in bereitgestellt wird AddSignalR Startup.ConfigureServices .Options can be configured for all hubs by providing an options delegate to the AddSignalR call in Startup.ConfigureServices.

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

Optionen für einen einzelnen Hub überschreiben die in bereitgestellten globalen Optionen AddSignalR und können mithilfe von konfiguriert werden AddHubOptions :Options for a single hub override the global options provided in AddSignalR and can be configured using AddHubOptions:

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

Erweiterte http-KonfigurationsoptionenAdvanced HTTP configuration options

Verwenden HttpConnectionDispatcherOptions Sie, um erweiterte Einstellungen im Zusammenhang mit Transporte und der Speicherpuffer Verwaltung zu konfigurieren.Use HttpConnectionDispatcherOptions to configure advanced settings related to transports and memory buffer management. Diese Optionen werden konfiguriert, indem ein Delegat an <T> maphub in übergeben wird Startup.Configure .These options are configured by passing a delegate to MapHub<T> in Startup.Configure.

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

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

In der folgenden Tabelle werden die Optionen zum Konfigurieren der SignalR erweiterten http-Optionen von ASP.net Core beschrieben:The following table describes options for configuring ASP.NET Core SignalR's advanced HTTP options:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ApplicationMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die vom Client vor dem Anwenden des backdrucks vom Server gepuffert werden.The maximum number of bytes received from the client that the server buffers before applying backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller empfangen, ohne dass ein Rückdruck angewendet wird, der Arbeitsspeicher Verbrauch kann jedoch gesteigert werden.Increasing this value allows the server to receive larger messages more quickly without applying backpressure, but can increase memory consumption.
AuthorizationData Daten, die automatisch von den Authorize auf die Hub-Klasse angewendeten Attributen gesammelt werden.Data automatically gathered from the Authorize attributes applied to the Hub class. Eine Liste von iautorizedata -Objekten, die verwendet werden, um zu bestimmen, ob ein Client für die Verbindung mit dem Hub autorisiert ist.A list of IAuthorizeData objects used to determine if a client is authorized to connect to the hub.
TransportMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die von der APP gesendet werden, die der Server puffert, bevor der Rückdruck beobachtet wirdThe maximum number of bytes sent by the app that the server buffers before observing backpressure. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten schneller Puffern, ohne dass auf den Rückstand gewartet wird, aber die Arbeitsspeicher Nutzung erhöhen kann.Increasing this value allows the server to buffer larger messages more quickly without awaiting backpressure, but can increase memory consumption.
Transports Alle Transporte sind aktiviert.All Transports are enabled. Ein Bitflags-Enumeration von HttpTransportType Werten, die die Transporte einschränken können, die ein Client für die Verbindungs Herstellung verwenden kann.A bit flags enum of HttpTransportType values that can restrict the transports a client can use to connect.
LongPolling Siehe unten.See below. Zusätzliche Optionen, die für den langen Abruf Transport spezifisch sind.Additional options specific to the Long Polling transport.
WebSockets Siehe unten.See below. Zusätzliche Optionen für den websockets-Transport.Additional options specific to the WebSockets transport.

Der lange Abruf Transport bietet zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können LongPolling :The Long Polling transport has additional options that can be configured using the LongPolling property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
PollTimeout 90 Sekunden90 seconds Die maximale Zeitspanne, die der Server wartet, bis eine Nachricht an den Client gesendet wird, bevor eine einzelne Abruf Anforderung beendet wird.The maximum amount of time the server waits for a message to send to the client before terminating a single poll request. Das verringern dieses Werts bewirkt, dass der Client neue Abruf Anforderungen häufiger ausgibt.Decreasing this value causes the client to issue new poll requests more frequently.

Der WebSocket-Transport verfügt über zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können WebSockets :The WebSocket transport has additional options that can be configured using the WebSockets property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
CloseTimeout 5 Sekunden5 seconds Wenn der Client nach dem Schließen des Servers nicht innerhalb dieses Zeitraums geschlossen werden kann, wird die Verbindung beendet.After the server closes, if the client fails to close within this time interval, the connection is terminated.
SubProtocolSelector null Ein Delegat, der verwendet werden kann, um den- Sec-WebSocket-Protocol Header auf einen benutzerdefinierten Wert festzulegen.A delegate that can be used to set the Sec-WebSocket-Protocol header to a custom value. Der Delegat empfängt die vom Client angeforderten Werte als Eingabe und erwartet, dass der gewünschte Wert zurückgegeben wird.The delegate receives the values requested by the client as input and is expected to return the desired value.

Konfigurieren von ClientoptionenConfigure client options

Client Optionen können für den Typ konfiguriert werden HubConnectionBuilder (verfügbar in den .net-und JavaScript-Clients).Client options can be configured on the HubConnectionBuilder type (available in the .NET and JavaScript clients). Sie steht auch im Java-Client zur Verfügung, aber die HttpHubConnectionBuilder Unterklasse enthält die Generator-Konfigurationsoptionen sowie die HubConnection selbst.It's also available in the Java client, but the HttpHubConnectionBuilder subclass is what contains the builder configuration options, as well as on the HubConnection itself.

Konfigurieren der ProtokollierungConfigure logging

Die Protokollierung wird mithilfe der-Methode im .NET-Client konfiguriert ConfigureLogging .Logging is configured in the .NET Client using the ConfigureLogging method. Protokollierungs Anbieter und Filter können auf die gleiche Weise wie auf dem Server registriert werden.Logging providers and filters can be registered in the same way as they are on the server. Weitere Informationen finden Sie in der Dokumentation zur Protokollierung ASP.net Core .See the Logging in ASP.NET Core documentation for more information.

Hinweis

Um Protokollierungs Anbieter zu registrieren, müssen Sie die erforderlichen Pakete installieren.In order to register Logging providers, you must install the necessary packages. Eine vollständige Liste finden Sie im Abschnitt integrierte Protokollierungs Anbieter der Dokumentation.See the Built-in logging providers section of the docs for a full list.

Um z. b. die Konsolen Protokollierung zu aktivieren, installieren Sie das Microsoft.Extensions.Logging.Console nuget-Paket.For example, to enable Console logging, install the Microsoft.Extensions.Logging.Console NuGet package. Die AddConsole Erweiterungsmethode aufzurufen:Call the AddConsole extension method:

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

Im JavaScript-Client ist eine ähnliche configureLogging Methode vorhanden.In the JavaScript client, a similar configureLogging method exists. Geben LogLevel Sie einen Wert an, der die minimale Ebene der zu erstellenden Protokollmeldungen angibt.Provide a LogLevel value indicating the minimum level of log messages to produce. Protokolle werden in das Browser Konsolenfenster geschrieben.Logs are written to the browser console window.

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

Anstelle eines LogLevel Werts können Sie auch einen Wert angeben, der den string Namen einer Protokollebene darstellt.Instead of a LogLevel value, you can also provide a string value representing a log level name. Dies ist nützlich, wenn SignalR Sie die Protokollierung in Umgebungen konfigurieren, in denen Sie keinen Zugriff auf die LogLevel Konstanten haben.This is useful when configuring SignalR logging in environments where you don't have access to the LogLevel constants.

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

In der folgenden Tabelle sind die verfügbaren Protokoll Ebenen aufgeführt.The following table lists the available log levels. Der von Ihnen bereitgestellte Wert, configureLogging der die minimale Protokollierung festlegt, die protokolliert werden soll.The value you provide to configureLogging sets the minimum log level that will be logged. Nachrichten, die auf dieser Ebene protokolliert werden, oder die nach der Tabelle aufgeführten Ebenenwerden protokolliert.Messages logged at this level, or the levels listed after it in the table, will be logged.

StringString LogLevelLogLevel
trace LogLevel.Trace
debug LogLevel.Debug
infooderinformationinfo or information LogLevel.Information
warnoderwarningwarn or warning LogLevel.Warning
error LogLevel.Error
critical LogLevel.Critical
none LogLevel.None

Hinweis

Um die Protokollierung vollständig zu deaktivieren, geben Sie signalR.LogLevel.None in der configureLogging Methode anTo disable logging entirely, specify signalR.LogLevel.None in the configureLogging method.

Weitere Informationen zur Protokollierung finden Sie in der SignalR Diagnose Dokumentation.For more information on logging, see the SignalR Diagnostics documentation.

Der SignalR Java-Client verwendet die SLF4J -Bibliothek für die Protokollierung.The SignalR Java client uses the SLF4J library for logging. Dabei handelt es sich um eine allgemeine Protokollierungs-API, die es Benutzern der Bibliothek ermöglicht, ihre eigene spezifische Protokollierungs Implementierung zu wählen, indem Sie eine bestimmte Protokollierungs Abhängigkeit einbinden.It's a high-level logging API that allows users of the library to chose their own specific logging implementation by bringing in a specific logging dependency. Der folgende Code Ausschnitt zeigt, wie java.util.logging mit dem Java- SignalR Client verwendet wird.The following code snippet shows how to use java.util.logging with the SignalR Java client.

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

Wenn Sie die Protokollierung in ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine Standard Protokollierung ohne Vorgang mit folgender Warnmeldung:If you don't configure logging in your dependencies, SLF4J loads a default no-operation logger with the following warning message:

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.

Dies kann sicher ignoriert werden.This can safely be ignored.

Zulässige Transporte konfigurierenConfigure allowed transports

Die von verwendeten Transporte SignalR können im-Befehl WithUrl ( withUrl in JavaScript) konfiguriert werden.The transports used by SignalR can be configured in the WithUrl call (withUrl in JavaScript). Ein bitweises OR der Werte von HttpTransportType kann verwendet werden, um den Client so einzuschränken, dass nur die angegebenen Transporte verwendet werden.A bitwise-OR of the values of HttpTransportType can be used to restrict the client to only use the specified transports. Alle Transporte sind standardmäßig aktiviert.All transports are enabled by default.

So können Sie beispielsweise den Transport von Server gesendeten Ereignissen deaktivieren, aber websockets und lange Abruf Verbindungen zulassen:For example, to disable the Server-Sent Events transport, but allow WebSockets and Long Polling connections:

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

Im JavaScript-Client werden Transporte durch Festlegen des- transport Felds für das Options-Objekt konfiguriert, das für bereitgestellt wird withUrl :In the JavaScript client, transports are configured by setting the transport field on the options object provided to withUrl:

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

In dieser Version des Java-Clients ist websockets der einzige verfügbare Transport.In this version of the Java client websockets is the only available transport.

Im Java-Client wird der Transport mit der-Methode im ausgewählt withTransport HttpHubConnectionBuilder .In the Java client, the transport is selected with the withTransport method on the HttpHubConnectionBuilder. Der Java-Client verwendet standardmäßig den websockets-Transport.The Java client defaults to using the WebSockets transport.

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

Hinweis

Der SignalR Java-Client unterstützt noch keinen Transport Fall Back.The SignalR Java client doesn't support transport fallback yet.

Konfigurieren der bearerauthentifizierungConfigure bearer authentication

Um Authentifizierungsdaten zusammen mit Anforderungen bereitzustellen SignalR , verwenden AccessTokenProvider Sie die-Option ( accessTokenFactory in JavaScript), um eine Funktion anzugeben, die das gewünschte Zugriffs Token zurückgibt.To provide authentication data along with SignalR requests, use the AccessTokenProvider option (accessTokenFactory in JavaScript) to specify a function that returns the desired access token. Im .NET-Client wird dieses Zugriffs Token als http-tokenauthentifizierungstoken (mit dem- Authorization Header mit dem Typ) an das Token "bearerauthentifizierung" geleitet Bearer .In the .NET Client, this access token is passed in as an HTTP "Bearer Authentication" token (Using the Authorization header with a type of Bearer). Im JavaScript-Client wird das Zugriffs Token als bearertoken verwendet, außer in einigen Fällen, in denen Browser-APIs die Fähigkeit zum Anwenden von Headern einschränken (insbesondere bei vom Server gesendeten Ereignissen und websockets-Anforderungen).In the JavaScript client, the access token is used as a Bearer token, except in a few cases where browser APIs restrict the ability to apply headers (specifically, in Server-Sent Events and WebSockets requests). In diesen Fällen wird das Zugriffs Token als Abfrage Zeichenfolgen-Wert bereitgestellt access_token .In these cases, the access token is provided as a query string value access_token.

Im .NET-Client kann die AccessTokenProvider Option mithilfe des Options Delegaten in angegeben werden WithUrl :In the .NET client, the AccessTokenProvider option can be specified using the options delegate in WithUrl:

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

Im JavaScript-Client wird das Zugriffs Token konfiguriert, indem das- accessTokenFactory Feld für das Options-Objekt in festgelegt wird withUrl :In the JavaScript client, the access token is configured by setting the accessTokenFactory field on the options object in withUrl:

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

Im SignalR Java-Client können Sie ein bearertoken für die Authentifizierung konfigurieren, indem Sie eine zugriffstokenfactory für " httphubconnectionbuilder" bereitstellen.In the SignalR Java client, you can configure a bearer token to use for authentication by providing an access token factory to the HttpHubConnectionBuilder. Verwenden Sie withaccesstokenfactory , um eine einzelne <String> rxjava -Instanz bereitzustellen.Use withAccessTokenFactory to provide an RxJava Single<String>. Beim Aufrufen von " Single.Write" können Sie Logik schreiben, um Zugriffs Token für den Client zu erstellen.With a call to Single.defer, you can write logic to produce access tokens for your client.

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

Konfigurieren von Timeout-und Keep-Alive-OptionenConfigure timeout and keep-alive options

Zusätzliche Optionen zum Konfigurieren von Timeout und Keep-Alive-Verhalten sind für das HubConnection Objekt selbst verfügbar:Additional options for configuring timeout and keep-alive behavior are available on the HubConnection object itself:

OptionOption StandardwertDefault value BESCHREIBUNGDescription
ServerTimeout 30 Sekunden (30.000 Millisekunden)30 seconds (30,000 milliseconds) Timeout für die Serveraktivität.Timeout for server activity. Wenn der Server in diesem Intervall keine Nachricht gesendet hat, betrachtet der Client den Server als getrennt und löst das Closed Ereignis onclose aus (in JavaScript).If the server hasn't sent a message in this interval, the client considers the server disconnected and triggers the Closed event (onclose in JavaScript). Dieser Wert muss groß genug sein, damit eine Ping-Nachricht vom Server gesendet und innerhalb des Timeout Intervalls vom Client empfangen wird.This value must be large enough for a ping message to be sent from the server and received by the client within the timeout interval. Der empfohlene Wert ist eine Zahl, die mindestens dem Wert des Servers KeepAliveInterval entspricht, um Zeit für das Eintreffen von Pings zuzulassen.The recommended value is a number at least double the server's KeepAliveInterval value to allow time for pings to arrive.
HandshakeTimeout 15 Sekunden15 seconds Timeout für den anfänglichen Server Hand Shake.Timeout for initial server handshake. Wenn der Server in diesem Intervall keine Hand Shake Antwort sendet, bricht der Client den Handshake ab und löst das Closed Ereignis onclose aus (in JavaScript).If the server doesn't send a handshake response in this interval, the client cancels the handshake and triggers the Closed event (onclose in JavaScript). Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Bestimmt das Intervall, in dem der Client Ping-Nachrichten sendet.Determines the interval at which the client sends ping messages. Beim Senden von Nachrichten vom Client wird der Timer auf den Anfang des Intervalls zurückgesetzt.Sending any message from the client resets the timer to the start of the interval. Wenn der Client keine Nachricht in der ClientTimeoutInterval Gruppe auf dem Server gesendet hat, wird der Client vom Server als getrennt betrachtet.If the client hasn't sent a message in the ClientTimeoutInterval set on the server, the server considers the client disconnected.

Im .NET-Client werden Timeout Werte als Werte angegeben TimeSpan .In the .NET Client, timeout values are specified as TimeSpan values.

Konfigurieren zusätzlicher OptionenConfigure additional options

Zusätzliche Optionen können in der- WithUrl Methode ( withUrl in JavaScript) für HubConnectionBuilder oder für die verschiedenen Konfigurations-APIs auf dem HttpHubConnectionBuilder im Java-Client konfiguriert werden:Additional options can be configured in the WithUrl (withUrl in JavaScript) method on HubConnectionBuilder or on the various configuration APIs on the HttpHubConnectionBuilder in the Java client:

.Net-Option.NET Option StandardwertDefault value BESCHREIBUNGDescription
AccessTokenProvider null Eine Funktion, die eine Zeichenfolge zurückgibt, die als bearerauthentifizierungstoken in HTTP-Anforderungen bereitgestelltA function returning a string that is provided as a Bearer authentication token in HTTP requests.
SkipNegotiation false Legen Sie dies auf fest, true um den Aushandlungs Schritt zu überspringenSet this to true to skip the negotiation step. Wird nur unterstützt, wenn der websockets-Transport der einzige aktivierte Transport ist.Only supported when the WebSockets transport is the only enabled transport. Diese Einstellung kann nicht aktiviert werden, wenn der Azure-Dienst verwendet wird SignalR .This setting can't be enabled when using the Azure SignalR Service.
ClientCertificates LeerEmpty Eine Auflistung von TLS-Zertifikaten, die zum Authentifizieren von Anforderungen gesendet werden sollen.A collection of TLS certificates to send to authenticate requests.
Cookies LeerEmpty Eine Auflistung von http- cookie s, die mit jeder HTTP-Anforderung gesendet werden sollen.A collection of HTTP cookies to send with every HTTP request.
Credentials LeerEmpty Anmelde Informationen, die mit jeder HTTP-Anforderung gesendet werden.Credentials to send with every HTTP request.
CloseTimeout 5 Sekunden5 seconds Nur websockets.WebSockets only. Die maximale Zeitspanne, die der Client nach dem Schließen des Servers wartet, um die Anforderung zum Schließen zu bestätigen.The maximum amount of time the client waits after closing for the server to acknowledge the close request. Wenn der Server die Schließung innerhalb dieses Zeitraums nicht anerkennt, trennt der Client die Verbindung.If the server doesn't acknowledge the close within this time, the client disconnects.
Headers LeerEmpty Eine Karte mit zusätzlichen HTTP-Headern, die mit jeder HTTP-Anforderung gesendet werden sollen.A Map of additional HTTP headers to send with every HTTP request.
HttpMessageHandlerFactory null Ein Delegat, der verwendet werden kann, um den HttpMessageHandler zum Senden von HTTP-Anforderungen verwendeten zu konfigurieren oder zu ersetzen.A delegate that can be used to configure or replace the HttpMessageHandler used to send HTTP requests. Wird nicht für WebSocket-Verbindungen verwendet.Not used for WebSocket connections. Dieser Delegat muss einen Wert zurückgeben, der nicht NULL ist, und erhält den Standardwert als Parameter.This delegate must return a non-null value, and it receives the default value as a parameter. Ändern Sie die Einstellungen für diesen Standardwert, und geben Sie ihn zurück, oder geben Sie eine neue HttpMessageHandler Instanz zurück.Either modify settings on that default value and return it, or return a new HttpMessageHandler instance. Wenn Sie den Handler ersetzen, stellen Sie sicher, dass die Einstellungen, die Sie beibehalten möchten, vom bereitgestellten Handler kopiert werden. Andernfalls gelten die konfigurierten Optionen (z. b. Cookie s und Header) nicht für den neuen Handler.When replacing the handler make sure to copy the settings you want to keep from the provided handler, otherwise, the configured options (such as Cookies and Headers) won't apply to the new handler.
Proxy null Ein HTTP-Proxy, der beim Senden von HTTP-Anforderungen verwendet wird.An HTTP proxy to use when sending HTTP requests.
UseDefaultCredentials false Legen Sie diesen booleschen Wert fest, um die Standard Anmelde Informationen für http-und websockets-Anforderungen zu sendenSet this boolean to send the default credentials for HTTP and WebSockets requests. Dies ermöglicht die Verwendung der Windows-Authentifizierung.This enables the use of Windows authentication.
WebSocketConfiguration null Ein Delegat, der zum Konfigurieren zusätzlicher WebSocket-Optionen verwendet werden kann.A delegate that can be used to configure additional WebSocket options. Empfängt eine Instanz von clientwebsocketoptions , die zum Konfigurieren der Optionen verwendet werden kann.Receives an instance of ClientWebSocketOptions that can be used to configure the options.

Im .NET-Client können diese Optionen durch den für bereitgestellten Options Delegaten geändert werden WithUrl :In the .NET Client, these options can be modified by the options delegate provided to WithUrl:

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

Im JavaScript-Client können diese Optionen in einem JavaScript-Objekt bereitgestellt werden, das für Folgendes bereitgestellt wird withUrl :In the JavaScript Client, these options can be provided in a JavaScript object provided to withUrl:

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

Im Java-Client können diese Optionen mit den Methoden auf der konfiguriert werden, die HttpHubConnectionBuilder von der HubConnectionBuilder.create("HUB URL")In the Java client, these options can be configured with the methods on the HttpHubConnectionBuilder returned from the HubConnectionBuilder.create("HUB URL")

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

Zusätzliche RessourcenAdditional resources

JSON/messagepack-SerialisierungsoptionenJSON/MessagePack serialization options

ASP.net Core SignalR unterstützt zwei Protokolle zum Codieren von Nachrichten: JSON und messagepack.ASP.NET Core SignalR supports two protocols for encoding messages: JSON and MessagePack. Jedes Protokoll verfügt über Konfigurationsoptionen für die Serialisierung.Each protocol has serialization configuration options.

Die JSON-Serialisierung kann mithilfe der addjsonprotocol -Erweiterungsmethode auf dem Server konfiguriert werden, die nach dem SignalR Hinzufügen in der Methode hinzugefügt werden kann Startup.ConfigureServices .JSON serialization can be configured on the server using the AddJsonProtocol extension method, which can be added after AddSignalR in your Startup.ConfigureServices method. Die- AddJsonProtocol Methode nimmt einen Delegaten an, der ein- options Objekt empfängt.The AddJsonProtocol method takes a delegate that receives an options object. Die payloadserializersettings -Eigenschaft für dieses Objekt ist ein JSON.net- JsonSerializerSettings Objekt, das zum Konfigurieren der Serialisierung von Argumenten und Rückgabe Werten verwendet werden kann.The PayloadSerializerSettings property on that object is a JSON.NET JsonSerializerSettings object that can be used to configure serialization of arguments and return values. Weitere Informationen finden Sie in der JSON.NET-Dokumentation.For more information, see the JSON.NET documentation.

Verwenden Sie beispielsweise den folgenden Code in, um das Serialisierungsprogramm so zu konfigurieren, dass "PascalCase"-Eigenschaftsnamen anstelle der Standardnamen "CamelCase" verwendet werden Startup.ConfigureServices :As an example, to configure the serializer to use "PascalCase" property names, instead of the default "camelCase" names, use the following code in Startup.ConfigureServices:

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

Im .NET-Client ist dieselbe AddJsonProtocol Erweiterungsmethode auf hubconnectionbuildervorhanden.In the .NET client, the same AddJsonProtocol extension method exists on HubConnectionBuilder. Der Microsoft.Extensions.DependencyInjection Namespace muss importiert werden, um die Erweiterungsmethode aufzulösen:The Microsoft.Extensions.DependencyInjection namespace must be imported to resolve the extension method:

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

Hinweis

Zurzeit ist es nicht möglich, JSON-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure JSON serialization in the JavaScript client at this time.

Messagepack-SerialisierungsoptionenMessagePack serialization options

Die messagepack-Serialisierung kann konfiguriert werden, indem ein Delegat für den addmessagepackprotocol -Aufruf bereitgestellt wird.MessagePack serialization can be configured by providing a delegate to the AddMessagePackProtocol call. Weitere Informationen finden Sie unter SignalR messagepack in .See MessagePack in SignalR for more details.

Hinweis

Zurzeit ist es nicht möglich, die messagepack-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure MessagePack serialization in the JavaScript client at this time.

Konfigurieren von ServeroptionenConfigure server options

In der folgenden Tabelle werden die Optionen zum Konfigurieren von SignalR Hubs beschrieben:The following table describes options for configuring SignalR hubs:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ClientTimeoutInterval 30 Sekunden30 seconds Der Server wird vom-Client als getrennt betrachtet, wenn in diesem Intervall keine Nachricht (einschließlich Keep-Alive) empfangen wurde.The server will consider the client disconnected if it hasn't received a message (including keep-alive) in this interval. Es kann länger dauern, bis der Client als getrennt gekennzeichnet ist, weil dies implementiert ist.It could take longer than this timeout interval for the client to actually be marked disconnected, due to how this is implemented. Der empfohlene Wert ist Double- KeepAliveInterval Wert.The recommended value is double the KeepAliveInterval value.
HandshakeTimeout 15 Sekunden15 seconds Wenn der Client innerhalb dieses Zeitraums keine anfängliche Hand Shake Nachricht sendet, wird die Verbindung geschlossen.If the client doesn't send an initial handshake message within this time interval, the connection is closed. Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Wenn der Server innerhalb dieses Intervalls keine Nachricht gesendet hat, wird automatisch eine Ping-Nachricht gesendet, um die Verbindung offen zu halten.If the server hasn't sent a message within this interval, a ping message is sent automatically to keep the connection open. Ändern Sie KeepAliveInterval die ServerTimeout / serverTimeoutInMilliseconds Einstellung auf dem Client, wenn Sie sich ändern.When changing KeepAliveInterval, change the ServerTimeout/serverTimeoutInMilliseconds setting on the client. Der empfohlene ServerTimeout / serverTimeoutInMilliseconds Wert ist Double- KeepAliveInterval Wert.The recommended ServerTimeout/serverTimeoutInMilliseconds value is double the KeepAliveInterval value.
SupportedProtocols Alle installierten ProtokolleAll installed protocols Protokolle, die von diesem Hub unterstützt werden.Protocols supported by this hub. Standardmäßig sind alle auf dem Server registrierten Protokolle zulässig, aber Protokolle können aus dieser Liste entfernt werden, um bestimmte Protokolle für einzelne Hubs zu deaktivieren.By default, all protocols registered on the server are allowed, but protocols can be removed from this list to disable specific protocols for individual hubs.
EnableDetailedErrors false Wenn der Wert true ist, werden ausführliche Ausnahme Meldungen an Clients zurückgegeben, wenn eine Ausnahme in einer Hub-Methode ausgelöst wird.If true, detailed exception messages are returned to clients when an exception is thrown in a Hub method. Der Standardwert ist false , da diese Ausnahme Meldungen vertrauliche Informationen enthalten können.The default is false, as these exception messages can contain sensitive information.

Optionen können für alle Hubs konfiguriert werden, indem ein Options Delegat für den Aufruf in bereitgestellt wird AddSignalR Startup.ConfigureServices .Options can be configured for all hubs by providing an options delegate to the AddSignalR call in Startup.ConfigureServices.

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

Optionen für einen einzelnen Hub überschreiben die in bereitgestellten globalen Optionen AddSignalR und können mithilfe von konfiguriert werden AddHubOptions :Options for a single hub override the global options provided in AddSignalR and can be configured using AddHubOptions:

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

Erweiterte http-KonfigurationsoptionenAdvanced HTTP configuration options

Verwenden HttpConnectionDispatcherOptions Sie, um erweiterte Einstellungen im Zusammenhang mit Transporte und der Speicherpuffer Verwaltung zu konfigurieren.Use HttpConnectionDispatcherOptions to configure advanced settings related to transports and memory buffer management. Diese Optionen werden konfiguriert, indem ein Delegat an <T> maphub in übergeben wird Startup.Configure .These options are configured by passing a delegate to MapHub<T> in Startup.Configure.

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

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

In der folgenden Tabelle werden die Optionen zum Konfigurieren der SignalR erweiterten http-Optionen von ASP.net Core beschrieben:The following table describes options for configuring ASP.NET Core SignalR's advanced HTTP options:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ApplicationMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die vom Client empfangen werden, der vom Server gepuffert wird.The maximum number of bytes received from the client that the server buffers. Eine Erhöhung dieses Werts ermöglicht es dem Server, größere Nachrichten zu empfangen, kann sich jedoch negativ auf den Arbeitsspeicherverbrauch auswirken.Increasing this value allows the server to receive larger messages, but can negatively impact memory consumption.
AuthorizationData Daten, die automatisch von den Authorize auf die Hub-Klasse angewendeten Attributen gesammelt werden.Data automatically gathered from the Authorize attributes applied to the Hub class. Eine Liste von iautorizedata -Objekten, die verwendet werden, um zu bestimmen, ob ein Client für die Verbindung mit dem Hub autorisiert ist.A list of IAuthorizeData objects used to determine if a client is authorized to connect to the hub.
TransportMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die von der APP gesendet werden, die der Server puffert.The maximum number of bytes sent by the app that the server buffers. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten senden, kann sich jedoch negativ auf die Arbeitsspeicher Auslastung auswirken.Increasing this value allows the server to send larger messages, but can negatively impact memory consumption.
Transports Alle Transporte sind aktiviert.All Transports are enabled. Ein Bitflags-Enumeration von HttpTransportType Werten, die die Transporte einschränken können, die ein Client für die Verbindungs Herstellung verwenden kann.A bit flags enum of HttpTransportType values that can restrict the transports a client can use to connect.
LongPolling Siehe unten.See below. Zusätzliche Optionen, die für den langen Abruf Transport spezifisch sind.Additional options specific to the Long Polling transport.
WebSockets Siehe unten.See below. Zusätzliche Optionen für den websockets-Transport.Additional options specific to the WebSockets transport.

Der lange Abruf Transport bietet zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können LongPolling :The Long Polling transport has additional options that can be configured using the LongPolling property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
PollTimeout 90 Sekunden90 seconds Die maximale Zeitspanne, die der Server wartet, bis eine Nachricht an den Client gesendet wird, bevor eine einzelne Abruf Anforderung beendet wird.The maximum amount of time the server waits for a message to send to the client before terminating a single poll request. Das verringern dieses Werts bewirkt, dass der Client neue Abruf Anforderungen häufiger ausgibt.Decreasing this value causes the client to issue new poll requests more frequently.

Der WebSocket-Transport verfügt über zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können WebSockets :The WebSocket transport has additional options that can be configured using the WebSockets property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
CloseTimeout 5 Sekunden5 seconds Wenn der Client nach dem Schließen des Servers nicht innerhalb dieses Zeitraums geschlossen werden kann, wird die Verbindung beendet.After the server closes, if the client fails to close within this time interval, the connection is terminated.
SubProtocolSelector null Ein Delegat, der verwendet werden kann, um den- Sec-WebSocket-Protocol Header auf einen benutzerdefinierten Wert festzulegen.A delegate that can be used to set the Sec-WebSocket-Protocol header to a custom value. Der Delegat empfängt die vom Client angeforderten Werte als Eingabe und erwartet, dass der gewünschte Wert zurückgegeben wird.The delegate receives the values requested by the client as input and is expected to return the desired value.

Konfigurieren von ClientoptionenConfigure client options

Client Optionen können für den Typ konfiguriert werden HubConnectionBuilder (verfügbar in den .net-und JavaScript-Clients).Client options can be configured on the HubConnectionBuilder type (available in the .NET and JavaScript clients). Sie steht auch im Java-Client zur Verfügung, aber die HttpHubConnectionBuilder Unterklasse enthält die Generator-Konfigurationsoptionen sowie die HubConnection selbst.It's also available in the Java client, but the HttpHubConnectionBuilder subclass is what contains the builder configuration options, as well as on the HubConnection itself.

Konfigurieren der ProtokollierungConfigure logging

Die Protokollierung wird mithilfe der-Methode im .NET-Client konfiguriert ConfigureLogging .Logging is configured in the .NET Client using the ConfigureLogging method. Protokollierungs Anbieter und Filter können auf die gleiche Weise wie auf dem Server registriert werden.Logging providers and filters can be registered in the same way as they are on the server. Weitere Informationen finden Sie in der Dokumentation zur Protokollierung ASP.net Core .See the Logging in ASP.NET Core documentation for more information.

Hinweis

Um Protokollierungs Anbieter zu registrieren, müssen Sie die erforderlichen Pakete installieren.In order to register Logging providers, you must install the necessary packages. Eine vollständige Liste finden Sie im Abschnitt integrierte Protokollierungs Anbieter der Dokumentation.See the Built-in logging providers section of the docs for a full list.

Um z. b. die Konsolen Protokollierung zu aktivieren, installieren Sie das Microsoft.Extensions.Logging.Console nuget-Paket.For example, to enable Console logging, install the Microsoft.Extensions.Logging.Console NuGet package. Die AddConsole Erweiterungsmethode aufzurufen:Call the AddConsole extension method:

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

Im JavaScript-Client ist eine ähnliche configureLogging Methode vorhanden.In the JavaScript client, a similar configureLogging method exists. Geben LogLevel Sie einen Wert an, der die minimale Ebene der zu erstellenden Protokollmeldungen angibt.Provide a LogLevel value indicating the minimum level of log messages to produce. Protokolle werden in das Browser Konsolenfenster geschrieben.Logs are written to the browser console window.

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

Hinweis

Um die Protokollierung vollständig zu deaktivieren, geben Sie signalR.LogLevel.None in der configureLogging Methode anTo disable logging entirely, specify signalR.LogLevel.None in the configureLogging method.

Weitere Informationen zur Protokollierung finden Sie in der SignalR Diagnose Dokumentation.For more information on logging, see the SignalR Diagnostics documentation.

Der SignalR Java-Client verwendet die SLF4J -Bibliothek für die Protokollierung.The SignalR Java client uses the SLF4J library for logging. Dabei handelt es sich um eine allgemeine Protokollierungs-API, die es Benutzern der Bibliothek ermöglicht, ihre eigene spezifische Protokollierungs Implementierung zu wählen, indem Sie eine bestimmte Protokollierungs Abhängigkeit einbinden.It's a high-level logging API that allows users of the library to chose their own specific logging implementation by bringing in a specific logging dependency. Der folgende Code Ausschnitt zeigt, wie java.util.logging mit dem Java- SignalR Client verwendet wird.The following code snippet shows how to use java.util.logging with the SignalR Java client.

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

Wenn Sie die Protokollierung in ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine Standard Protokollierung ohne Vorgang mit folgender Warnmeldung:If you don't configure logging in your dependencies, SLF4J loads a default no-operation logger with the following warning message:

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.

Dies kann sicher ignoriert werden.This can safely be ignored.

Zulässige Transporte konfigurierenConfigure allowed transports

Die von verwendeten Transporte SignalR können im-Befehl WithUrl ( withUrl in JavaScript) konfiguriert werden.The transports used by SignalR can be configured in the WithUrl call (withUrl in JavaScript). Ein bitweises OR der Werte von HttpTransportType kann verwendet werden, um den Client so einzuschränken, dass nur die angegebenen Transporte verwendet werden.A bitwise-OR of the values of HttpTransportType can be used to restrict the client to only use the specified transports. Alle Transporte sind standardmäßig aktiviert.All transports are enabled by default.

So können Sie beispielsweise den Transport von Server gesendeten Ereignissen deaktivieren, aber websockets und lange Abruf Verbindungen zulassen:For example, to disable the Server-Sent Events transport, but allow WebSockets and Long Polling connections:

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

Im JavaScript-Client werden Transporte durch Festlegen des- transport Felds für das Options-Objekt konfiguriert, das für bereitgestellt wird withUrl :In the JavaScript client, transports are configured by setting the transport field on the options object provided to withUrl:

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

In dieser Version des Java-Clients ist websockets der einzige verfügbare Transport.In this version of the Java client websockets is the only available transport.

Konfigurieren der bearerauthentifizierungConfigure bearer authentication

Um Authentifizierungsdaten zusammen mit Anforderungen bereitzustellen SignalR , verwenden AccessTokenProvider Sie die-Option ( accessTokenFactory in JavaScript), um eine Funktion anzugeben, die das gewünschte Zugriffs Token zurückgibt.To provide authentication data along with SignalR requests, use the AccessTokenProvider option (accessTokenFactory in JavaScript) to specify a function that returns the desired access token. Im .NET-Client wird dieses Zugriffs Token als http-tokenauthentifizierungstoken (mit dem- Authorization Header mit dem Typ) an das Token "bearerauthentifizierung" geleitet Bearer .In the .NET Client, this access token is passed in as an HTTP "Bearer Authentication" token (Using the Authorization header with a type of Bearer). Im JavaScript-Client wird das Zugriffs Token als bearertoken verwendet, außer in einigen Fällen, in denen Browser-APIs die Fähigkeit zum Anwenden von Headern einschränken (insbesondere bei vom Server gesendeten Ereignissen und websockets-Anforderungen).In the JavaScript client, the access token is used as a Bearer token, except in a few cases where browser APIs restrict the ability to apply headers (specifically, in Server-Sent Events and WebSockets requests). In diesen Fällen wird das Zugriffs Token als Abfrage Zeichenfolgen-Wert bereitgestellt access_token .In these cases, the access token is provided as a query string value access_token.

Im .NET-Client kann die AccessTokenProvider Option mithilfe des Options Delegaten in angegeben werden WithUrl :In the .NET client, the AccessTokenProvider option can be specified using the options delegate in WithUrl:

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

Im JavaScript-Client wird das Zugriffs Token konfiguriert, indem das- accessTokenFactory Feld für das Options-Objekt in festgelegt wird withUrl :In the JavaScript client, the access token is configured by setting the accessTokenFactory field on the options object in withUrl:

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

Im SignalR Java-Client können Sie ein bearertoken für die Authentifizierung konfigurieren, indem Sie eine zugriffstokenfactory für " httphubconnectionbuilder" bereitstellen.In the SignalR Java client, you can configure a bearer token to use for authentication by providing an access token factory to the HttpHubConnectionBuilder. Verwenden Sie withaccesstokenfactory , um eine einzelne <String> rxjava -Instanz bereitzustellen.Use withAccessTokenFactory to provide an RxJava Single<String>. Beim Aufrufen von " Single.Write" können Sie Logik schreiben, um Zugriffs Token für den Client zu erstellen.With a call to Single.defer, you can write logic to produce access tokens for your client.

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

Konfigurieren von Timeout-und Keep-Alive-OptionenConfigure timeout and keep-alive options

Zusätzliche Optionen zum Konfigurieren von Timeout und Keep-Alive-Verhalten sind für das HubConnection Objekt selbst verfügbar:Additional options for configuring timeout and keep-alive behavior are available on the HubConnection object itself:

OptionOption StandardwertDefault value BESCHREIBUNGDescription
ServerTimeout 30 Sekunden (30.000 Millisekunden)30 seconds (30,000 milliseconds) Timeout für die Serveraktivität.Timeout for server activity. Wenn der Server in diesem Intervall keine Nachricht gesendet hat, betrachtet der Client den Server als getrennt und löst das Closed Ereignis onclose aus (in JavaScript).If the server hasn't sent a message in this interval, the client considers the server disconnected and triggers the Closed event (onclose in JavaScript). Dieser Wert muss groß genug sein, damit eine Ping-Nachricht vom Server gesendet und innerhalb des Timeout Intervalls vom Client empfangen wird.This value must be large enough for a ping message to be sent from the server and received by the client within the timeout interval. Der empfohlene Wert ist eine Zahl, die mindestens dem Wert des Servers KeepAliveInterval entspricht, um Zeit für das Eintreffen von Pings zuzulassen.The recommended value is a number at least double the server's KeepAliveInterval value to allow time for pings to arrive.
HandshakeTimeout 15 Sekunden15 seconds Timeout für den anfänglichen Server Hand Shake.Timeout for initial server handshake. Wenn der Server in diesem Intervall keine Hand Shake Antwort sendet, bricht der Client den Handshake ab und löst das Closed Ereignis onclose aus (in JavaScript).If the server doesn't send a handshake response in this interval, the client cancels the handshake and triggers the Closed event (onclose in JavaScript). Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Bestimmt das Intervall, in dem der Client Ping-Nachrichten sendet.Determines the interval at which the client sends ping messages. Beim Senden von Nachrichten vom Client wird der Timer auf den Anfang des Intervalls zurückgesetzt.Sending any message from the client resets the timer to the start of the interval. Wenn der Client keine Nachricht in der ClientTimeoutInterval Gruppe auf dem Server gesendet hat, wird der Client vom Server als getrennt betrachtet.If the client hasn't sent a message in the ClientTimeoutInterval set on the server, the server considers the client disconnected.

Im .NET-Client werden Timeout Werte als Werte angegeben TimeSpan .In the .NET Client, timeout values are specified as TimeSpan values.

Konfigurieren zusätzlicher OptionenConfigure additional options

Zusätzliche Optionen können in der- WithUrl Methode ( withUrl in JavaScript) für HubConnectionBuilder oder für die verschiedenen Konfigurations-APIs auf dem HttpHubConnectionBuilder im Java-Client konfiguriert werden:Additional options can be configured in the WithUrl (withUrl in JavaScript) method on HubConnectionBuilder or on the various configuration APIs on the HttpHubConnectionBuilder in the Java client:

.Net-Option.NET Option StandardwertDefault value BESCHREIBUNGDescription
AccessTokenProvider null Eine Funktion, die eine Zeichenfolge zurückgibt, die als bearerauthentifizierungstoken in HTTP-Anforderungen bereitgestelltA function returning a string that is provided as a Bearer authentication token in HTTP requests.
SkipNegotiation false Legen Sie dies auf fest, true um den Aushandlungs Schritt zu überspringenSet this to true to skip the negotiation step. Wird nur unterstützt, wenn der websockets-Transport der einzige aktivierte Transport ist.Only supported when the WebSockets transport is the only enabled transport. Diese Einstellung kann nicht aktiviert werden, wenn der Azure-Dienst verwendet wird SignalR .This setting can't be enabled when using the Azure SignalR Service.
ClientCertificates LeerEmpty Eine Auflistung von TLS-Zertifikaten, die zum Authentifizieren von Anforderungen gesendet werden sollen.A collection of TLS certificates to send to authenticate requests.
Cookies LeerEmpty Eine Auflistung von http- cookie s, die mit jeder HTTP-Anforderung gesendet werden sollen.A collection of HTTP cookies to send with every HTTP request.
Credentials LeerEmpty Anmelde Informationen, die mit jeder HTTP-Anforderung gesendet werden.Credentials to send with every HTTP request.
CloseTimeout 5 Sekunden5 seconds Nur websockets.WebSockets only. Die maximale Zeitspanne, die der Client nach dem Schließen des Servers wartet, um die Anforderung zum Schließen zu bestätigen.The maximum amount of time the client waits after closing for the server to acknowledge the close request. Wenn der Server die Schließung innerhalb dieses Zeitraums nicht anerkennt, trennt der Client die Verbindung.If the server doesn't acknowledge the close within this time, the client disconnects.
Headers LeerEmpty Eine Karte mit zusätzlichen HTTP-Headern, die mit jeder HTTP-Anforderung gesendet werden sollen.A Map of additional HTTP headers to send with every HTTP request.
HttpMessageHandlerFactory null Ein Delegat, der verwendet werden kann, um den HttpMessageHandler zum Senden von HTTP-Anforderungen verwendeten zu konfigurieren oder zu ersetzen.A delegate that can be used to configure or replace the HttpMessageHandler used to send HTTP requests. Wird nicht für WebSocket-Verbindungen verwendet.Not used for WebSocket connections. Dieser Delegat muss einen Wert zurückgeben, der nicht NULL ist, und erhält den Standardwert als Parameter.This delegate must return a non-null value, and it receives the default value as a parameter. Ändern Sie die Einstellungen für diesen Standardwert, und geben Sie ihn zurück, oder geben Sie eine neue HttpMessageHandler Instanz zurück.Either modify settings on that default value and return it, or return a new HttpMessageHandler instance. Wenn Sie den Handler ersetzen, stellen Sie sicher, dass die Einstellungen, die Sie beibehalten möchten, vom bereitgestellten Handler kopiert werden. Andernfalls gelten die konfigurierten Optionen (z. b. Cookie s und Header) nicht für den neuen Handler.When replacing the handler make sure to copy the settings you want to keep from the provided handler, otherwise, the configured options (such as Cookies and Headers) won't apply to the new handler.
Proxy null Ein HTTP-Proxy, der beim Senden von HTTP-Anforderungen verwendet wird.An HTTP proxy to use when sending HTTP requests.
UseDefaultCredentials false Legen Sie diesen booleschen Wert fest, um die Standard Anmelde Informationen für http-und websockets-Anforderungen zu sendenSet this boolean to send the default credentials for HTTP and WebSockets requests. Dies ermöglicht die Verwendung der Windows-Authentifizierung.This enables the use of Windows authentication.
WebSocketConfiguration null Ein Delegat, der zum Konfigurieren zusätzlicher WebSocket-Optionen verwendet werden kann.A delegate that can be used to configure additional WebSocket options. Empfängt eine Instanz von clientwebsocketoptions , die zum Konfigurieren der Optionen verwendet werden kann.Receives an instance of ClientWebSocketOptions that can be used to configure the options.

Im .NET-Client können diese Optionen durch den für bereitgestellten Options Delegaten geändert werden WithUrl :In the .NET Client, these options can be modified by the options delegate provided to WithUrl:

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

Im JavaScript-Client können diese Optionen in einem JavaScript-Objekt bereitgestellt werden, das für Folgendes bereitgestellt wird withUrl :In the JavaScript Client, these options can be provided in a JavaScript object provided to withUrl:

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

Im Java-Client können diese Optionen mit den Methoden auf der konfiguriert werden, die HttpHubConnectionBuilder von der HubConnectionBuilder.create("HUB URL")In the Java client, these options can be configured with the methods on the HttpHubConnectionBuilder returned from the HubConnectionBuilder.create("HUB URL")

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

Zusätzliche RessourcenAdditional resources

JSON/messagepack-SerialisierungsoptionenJSON/MessagePack serialization options

ASP.net Core SignalR unterstützt zwei Protokolle zum Codieren von Nachrichten: JSON und messagepack.ASP.NET Core SignalR supports two protocols for encoding messages: JSON and MessagePack. Jedes Protokoll verfügt über Konfigurationsoptionen für die Serialisierung.Each protocol has serialization configuration options.

Die JSON-Serialisierung kann mithilfe der addjsonprotocol -Erweiterungsmethode auf dem Server konfiguriert werden, die nach dem SignalR Hinzufügen in der Methode hinzugefügt werden kann Startup.ConfigureServices .JSON serialization can be configured on the server using the AddJsonProtocol extension method, which can be added after AddSignalR in your Startup.ConfigureServices method. Die- AddJsonProtocol Methode nimmt einen Delegaten an, der ein- options Objekt empfängt.The AddJsonProtocol method takes a delegate that receives an options object. Die payloadserializersettings -Eigenschaft für dieses Objekt ist ein JSON.net- JsonSerializerSettings Objekt, das zum Konfigurieren der Serialisierung von Argumenten und Rückgabe Werten verwendet werden kann.The PayloadSerializerSettings property on that object is a JSON.NET JsonSerializerSettings object that can be used to configure serialization of arguments and return values. Weitere Informationen finden Sie in der JSON.NET-Dokumentation.For more information, see the JSON.NET documentation.

Verwenden Sie beispielsweise den folgenden Code in, um das Serialisierungsprogramm so zu konfigurieren, dass "PascalCase"-Eigenschaftsnamen anstelle der Standardnamen "CamelCase" verwendet werden Startup.ConfigureServices :As an example, to configure the serializer to use "PascalCase" property names, instead of the default "camelCase" names, use the following code in Startup.ConfigureServices:

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

Im .NET-Client ist dieselbe AddJsonProtocol Erweiterungsmethode auf hubconnectionbuildervorhanden.In the .NET client, the same AddJsonProtocol extension method exists on HubConnectionBuilder. Der Microsoft.Extensions.DependencyInjection Namespace muss importiert werden, um die Erweiterungsmethode aufzulösen:The Microsoft.Extensions.DependencyInjection namespace must be imported to resolve the extension method:

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

Hinweis

Zurzeit ist es nicht möglich, JSON-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure JSON serialization in the JavaScript client at this time.

Messagepack-SerialisierungsoptionenMessagePack serialization options

Die messagepack-Serialisierung kann konfiguriert werden, indem ein Delegat für den addmessagepackprotocol -Aufruf bereitgestellt wird.MessagePack serialization can be configured by providing a delegate to the AddMessagePackProtocol call. Weitere Informationen finden Sie unter SignalR messagepack in .See MessagePack in SignalR for more details.

Hinweis

Zurzeit ist es nicht möglich, die messagepack-Serialisierung im JavaScript-Client zu konfigurieren.It's not possible to configure MessagePack serialization in the JavaScript client at this time.

Konfigurieren von ServeroptionenConfigure server options

In der folgenden Tabelle werden die Optionen zum Konfigurieren von SignalR Hubs beschrieben:The following table describes options for configuring SignalR hubs:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
HandshakeTimeout 15 Sekunden15 seconds Wenn der Client innerhalb dieses Zeitraums keine anfängliche Hand Shake Nachricht sendet, wird die Verbindung geschlossen.If the client doesn't send an initial handshake message within this time interval, the connection is closed. Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.
KeepAliveInterval 15 Sekunden15 seconds Wenn der Server innerhalb dieses Intervalls keine Nachricht gesendet hat, wird automatisch eine Ping-Nachricht gesendet, um die Verbindung offen zu halten.If the server hasn't sent a message within this interval, a ping message is sent automatically to keep the connection open. Ändern Sie KeepAliveInterval die ServerTimeout / serverTimeoutInMilliseconds Einstellung auf dem Client, wenn Sie sich ändern.When changing KeepAliveInterval, change the ServerTimeout/serverTimeoutInMilliseconds setting on the client. Der empfohlene ServerTimeout / serverTimeoutInMilliseconds Wert ist Double- KeepAliveInterval Wert.The recommended ServerTimeout/serverTimeoutInMilliseconds value is double the KeepAliveInterval value.
SupportedProtocols Alle installierten ProtokolleAll installed protocols Protokolle, die von diesem Hub unterstützt werden.Protocols supported by this hub. Standardmäßig sind alle auf dem Server registrierten Protokolle zulässig, aber Protokolle können aus dieser Liste entfernt werden, um bestimmte Protokolle für einzelne Hubs zu deaktivieren.By default, all protocols registered on the server are allowed, but protocols can be removed from this list to disable specific protocols for individual hubs.
EnableDetailedErrors false Wenn der Wert true ist, werden ausführliche Ausnahme Meldungen an Clients zurückgegeben, wenn eine Ausnahme in einer Hub-Methode ausgelöst wird.If true, detailed exception messages are returned to clients when an exception is thrown in a Hub method. Der Standardwert ist false , da diese Ausnahme Meldungen vertrauliche Informationen enthalten können.The default is false, as these exception messages can contain sensitive information.

Optionen können für alle Hubs konfiguriert werden, indem ein Options Delegat für den Aufruf in bereitgestellt wird AddSignalR Startup.ConfigureServices .Options can be configured for all hubs by providing an options delegate to the AddSignalR call in Startup.ConfigureServices.

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

Optionen für einen einzelnen Hub überschreiben die in bereitgestellten globalen Optionen AddSignalR und können mithilfe von konfiguriert werden AddHubOptions :Options for a single hub override the global options provided in AddSignalR and can be configured using AddHubOptions:

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

Erweiterte http-KonfigurationsoptionenAdvanced HTTP configuration options

Verwenden HttpConnectionDispatcherOptions Sie, um erweiterte Einstellungen im Zusammenhang mit Transporte und der Speicherpuffer Verwaltung zu konfigurieren.Use HttpConnectionDispatcherOptions to configure advanced settings related to transports and memory buffer management. Diese Optionen werden konfiguriert, indem ein Delegat an <T> maphub in übergeben wird Startup.Configure .These options are configured by passing a delegate to MapHub<T> in Startup.Configure.

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

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

In der folgenden Tabelle werden die Optionen zum Konfigurieren der SignalR erweiterten http-Optionen von ASP.net Core beschrieben:The following table describes options for configuring ASP.NET Core SignalR's advanced HTTP options:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
ApplicationMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die vom Client empfangen werden, der vom Server gepuffert wird.The maximum number of bytes received from the client that the server buffers. Eine Erhöhung dieses Werts ermöglicht es dem Server, größere Nachrichten zu empfangen, kann sich jedoch negativ auf den Arbeitsspeicherverbrauch auswirken.Increasing this value allows the server to receive larger messages, but can negatively impact memory consumption.
AuthorizationData Daten, die automatisch von den Authorize auf die Hub-Klasse angewendeten Attributen gesammelt werden.Data automatically gathered from the Authorize attributes applied to the Hub class. Eine Liste von iautorizedata -Objekten, die verwendet werden, um zu bestimmen, ob ein Client für die Verbindung mit dem Hub autorisiert ist.A list of IAuthorizeData objects used to determine if a client is authorized to connect to the hub.
TransportMaxBufferSize 32 KB32 KB Die maximale Anzahl von Bytes, die von der APP gesendet werden, die der Server puffert.The maximum number of bytes sent by the app that the server buffers. Wenn Sie diesen Wert erhöhen, kann der Server größere Nachrichten senden, kann sich jedoch negativ auf die Arbeitsspeicher Auslastung auswirken.Increasing this value allows the server to send larger messages, but can negatively impact memory consumption.
Transports Alle Transporte sind aktiviert.All Transports are enabled. Ein Bitflags-Enumeration von HttpTransportType Werten, die die Transporte einschränken können, die ein Client für die Verbindungs Herstellung verwenden kann.A bit flags enum of HttpTransportType values that can restrict the transports a client can use to connect.
LongPolling Siehe unten.See below. Zusätzliche Optionen, die für den langen Abruf Transport spezifisch sind.Additional options specific to the Long Polling transport.
WebSockets Siehe unten.See below. Zusätzliche Optionen für den websockets-Transport.Additional options specific to the WebSockets transport.

Der lange Abruf Transport bietet zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können LongPolling :The Long Polling transport has additional options that can be configured using the LongPolling property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
PollTimeout 90 Sekunden90 seconds Die maximale Zeitspanne, die der Server wartet, bis eine Nachricht an den Client gesendet wird, bevor eine einzelne Abruf Anforderung beendet wird.The maximum amount of time the server waits for a message to send to the client before terminating a single poll request. Das verringern dieses Werts bewirkt, dass der Client neue Abruf Anforderungen häufiger ausgibt.Decreasing this value causes the client to issue new poll requests more frequently.

Der WebSocket-Transport verfügt über zusätzliche Optionen, die mit der-Eigenschaft konfiguriert werden können WebSockets :The WebSocket transport has additional options that can be configured using the WebSockets property:

OptionOption StandardwertDefault Value BESCHREIBUNGDescription
CloseTimeout 5 Sekunden5 seconds Wenn der Client nach dem Schließen des Servers nicht innerhalb dieses Zeitraums geschlossen werden kann, wird die Verbindung beendet.After the server closes, if the client fails to close within this time interval, the connection is terminated.
SubProtocolSelector null Ein Delegat, der verwendet werden kann, um den- Sec-WebSocket-Protocol Header auf einen benutzerdefinierten Wert festzulegen.A delegate that can be used to set the Sec-WebSocket-Protocol header to a custom value. Der Delegat empfängt die vom Client angeforderten Werte als Eingabe und erwartet, dass der gewünschte Wert zurückgegeben wird.The delegate receives the values requested by the client as input and is expected to return the desired value.

Konfigurieren von ClientoptionenConfigure client options

Client Optionen können für den Typ konfiguriert werden HubConnectionBuilder (verfügbar in den .net-und JavaScript-Clients).Client options can be configured on the HubConnectionBuilder type (available in the .NET and JavaScript clients). Sie steht auch im Java-Client zur Verfügung, aber die HttpHubConnectionBuilder Unterklasse enthält die Generator-Konfigurationsoptionen sowie die HubConnection selbst.It's also available in the Java client, but the HttpHubConnectionBuilder subclass is what contains the builder configuration options, as well as on the HubConnection itself.

Konfigurieren der ProtokollierungConfigure logging

Die Protokollierung wird mithilfe der-Methode im .NET-Client konfiguriert ConfigureLogging .Logging is configured in the .NET Client using the ConfigureLogging method. Protokollierungs Anbieter und Filter können auf die gleiche Weise wie auf dem Server registriert werden.Logging providers and filters can be registered in the same way as they are on the server. Weitere Informationen finden Sie in der Dokumentation zur Protokollierung ASP.net Core .See the Logging in ASP.NET Core documentation for more information.

Hinweis

Um Protokollierungs Anbieter zu registrieren, müssen Sie die erforderlichen Pakete installieren.In order to register Logging providers, you must install the necessary packages. Eine vollständige Liste finden Sie im Abschnitt integrierte Protokollierungs Anbieter der Dokumentation.See the Built-in logging providers section of the docs for a full list.

Um z. b. die Konsolen Protokollierung zu aktivieren, installieren Sie das Microsoft.Extensions.Logging.Console nuget-Paket.For example, to enable Console logging, install the Microsoft.Extensions.Logging.Console NuGet package. Die AddConsole Erweiterungsmethode aufzurufen:Call the AddConsole extension method:

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

Im JavaScript-Client ist eine ähnliche configureLogging Methode vorhanden.In the JavaScript client, a similar configureLogging method exists. Geben LogLevel Sie einen Wert an, der die minimale Ebene der zu erstellenden Protokollmeldungen angibt.Provide a LogLevel value indicating the minimum level of log messages to produce. Protokolle werden in das Browser Konsolenfenster geschrieben.Logs are written to the browser console window.

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

Hinweis

Um die Protokollierung vollständig zu deaktivieren, geben Sie signalR.LogLevel.None in der configureLogging Methode anTo disable logging entirely, specify signalR.LogLevel.None in the configureLogging method.

Weitere Informationen zur Protokollierung finden Sie in der SignalR Diagnose Dokumentation.For more information on logging, see the SignalR Diagnostics documentation.

Der SignalR Java-Client verwendet die SLF4J -Bibliothek für die Protokollierung.The SignalR Java client uses the SLF4J library for logging. Dabei handelt es sich um eine allgemeine Protokollierungs-API, die es Benutzern der Bibliothek ermöglicht, ihre eigene spezifische Protokollierungs Implementierung zu wählen, indem Sie eine bestimmte Protokollierungs Abhängigkeit einbinden.It's a high-level logging API that allows users of the library to chose their own specific logging implementation by bringing in a specific logging dependency. Der folgende Code Ausschnitt zeigt, wie java.util.logging mit dem Java- SignalR Client verwendet wird.The following code snippet shows how to use java.util.logging with the SignalR Java client.

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

Wenn Sie die Protokollierung in ihren Abhängigkeiten nicht konfigurieren, lädt SLF4J eine Standard Protokollierung ohne Vorgang mit folgender Warnmeldung:If you don't configure logging in your dependencies, SLF4J loads a default no-operation logger with the following warning message:

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.

Dies kann sicher ignoriert werden.This can safely be ignored.

Zulässige Transporte konfigurierenConfigure allowed transports

Die von verwendeten Transporte SignalR können im-Befehl WithUrl ( withUrl in JavaScript) konfiguriert werden.The transports used by SignalR can be configured in the WithUrl call (withUrl in JavaScript). Ein bitweises OR der Werte von HttpTransportType kann verwendet werden, um den Client so einzuschränken, dass nur die angegebenen Transporte verwendet werden.A bitwise-OR of the values of HttpTransportType can be used to restrict the client to only use the specified transports. Alle Transporte sind standardmäßig aktiviert.All transports are enabled by default.

So können Sie beispielsweise den Transport von Server gesendeten Ereignissen deaktivieren, aber websockets und lange Abruf Verbindungen zulassen:For example, to disable the Server-Sent Events transport, but allow WebSockets and Long Polling connections:

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

Im JavaScript-Client werden Transporte durch Festlegen des- transport Felds für das Options-Objekt konfiguriert, das für bereitgestellt wird withUrl :In the JavaScript client, transports are configured by setting the transport field on the options object provided to withUrl:

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

Konfigurieren der bearerauthentifizierungConfigure bearer authentication

Um Authentifizierungsdaten zusammen mit Anforderungen bereitzustellen SignalR , verwenden AccessTokenProvider Sie die-Option ( accessTokenFactory in JavaScript), um eine Funktion anzugeben, die das gewünschte Zugriffs Token zurückgibt.To provide authentication data along with SignalR requests, use the AccessTokenProvider option (accessTokenFactory in JavaScript) to specify a function that returns the desired access token. Im .NET-Client wird dieses Zugriffs Token als http-tokenauthentifizierungstoken (mit dem- Authorization Header mit dem Typ) an das Token "bearerauthentifizierung" geleitet Bearer .In the .NET Client, this access token is passed in as an HTTP "Bearer Authentication" token (Using the Authorization header with a type of Bearer). Im JavaScript-Client wird das Zugriffs Token als bearertoken verwendet, außer in einigen Fällen, in denen Browser-APIs die Fähigkeit zum Anwenden von Headern einschränken (insbesondere bei vom Server gesendeten Ereignissen und websockets-Anforderungen).In the JavaScript client, the access token is used as a Bearer token, except in a few cases where browser APIs restrict the ability to apply headers (specifically, in Server-Sent Events and WebSockets requests). In diesen Fällen wird das Zugriffs Token als Abfrage Zeichenfolgen-Wert bereitgestellt access_token .In these cases, the access token is provided as a query string value access_token.

Im .NET-Client kann die AccessTokenProvider Option mithilfe des Options Delegaten in angegeben werden WithUrl :In the .NET client, the AccessTokenProvider option can be specified using the options delegate in WithUrl:

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

Im JavaScript-Client wird das Zugriffs Token konfiguriert, indem das- accessTokenFactory Feld für das Options-Objekt in festgelegt wird withUrl :In the JavaScript client, the access token is configured by setting the accessTokenFactory field on the options object in withUrl:

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

Im SignalR Java-Client können Sie ein bearertoken für die Authentifizierung konfigurieren, indem Sie eine zugriffstokenfactory für " httphubconnectionbuilder" bereitstellen.In the SignalR Java client, you can configure a bearer token to use for authentication by providing an access token factory to the HttpHubConnectionBuilder. Verwenden Sie withaccesstokenfactory , um eine einzelne <String> rxjava -Instanz bereitzustellen.Use withAccessTokenFactory to provide an RxJava Single<String>. Beim Aufrufen von " Single.Write" können Sie Logik schreiben, um Zugriffs Token für den Client zu erstellen.With a call to Single.defer, you can write logic to produce access tokens for your client.

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

Konfigurieren von Timeout-und Keep-Alive-OptionenConfigure timeout and keep-alive options

Zusätzliche Optionen zum Konfigurieren von Timeout und Keep-Alive-Verhalten sind für das HubConnection Objekt selbst verfügbar:Additional options for configuring timeout and keep-alive behavior are available on the HubConnection object itself:

OptionOption StandardwertDefault value BESCHREIBUNGDescription
ServerTimeout 30 Sekunden (30.000 Millisekunden)30 seconds (30,000 milliseconds) Timeout für die Serveraktivität.Timeout for server activity. Wenn der Server in diesem Intervall keine Nachricht gesendet hat, betrachtet der Client den Server als getrennt und löst das Closed Ereignis onclose aus (in JavaScript).If the server hasn't sent a message in this interval, the client considers the server disconnected and triggers the Closed event (onclose in JavaScript). Dieser Wert muss groß genug sein, damit eine Ping-Nachricht vom Server gesendet und innerhalb des Timeout Intervalls vom Client empfangen wird.This value must be large enough for a ping message to be sent from the server and received by the client within the timeout interval. Der empfohlene Wert ist eine Zahl, die mindestens dem Wert des Servers KeepAliveInterval entspricht, um Zeit für das Eintreffen von Pings zuzulassen.The recommended value is a number at least double the server's KeepAliveInterval value to allow time for pings to arrive.
HandshakeTimeout 15 Sekunden15 seconds Timeout für den anfänglichen Server Hand Shake.Timeout for initial server handshake. Wenn der Server in diesem Intervall keine Hand Shake Antwort sendet, bricht der Client den Handshake ab und löst das Closed Ereignis onclose aus (in JavaScript).If the server doesn't send a handshake response in this interval, the client cancels the handshake and triggers the Closed event (onclose in JavaScript). Dies ist eine erweiterte Einstellung, die nur geändert werden sollte, wenn aufgrund schwerer Netzwerk Latenz Fehler aufgrund von Hand Shake Timeout auftreten.This is an advanced setting that should only be modified if handshake timeout errors are occurring due to severe network latency. Weitere Details zum Hand Shake Prozess finden Sie in der SignalR Hub-Protokollspezifikation.For more detail on the handshake process, see the SignalR Hub Protocol Specification.

Im .NET-Client werden Timeout Werte als Werte angegeben TimeSpan .In the .NET Client, timeout values are specified as TimeSpan values.

Konfigurieren zusätzlicher OptionenConfigure additional options

Zusätzliche Optionen können in der- WithUrl Methode ( withUrl in JavaScript) für HubConnectionBuilder oder für die verschiedenen Konfigurations-APIs auf dem HttpHubConnectionBuilder im Java-Client konfiguriert werden:Additional options can be configured in the WithUrl (withUrl in JavaScript) method on HubConnectionBuilder or on the various configuration APIs on the HttpHubConnectionBuilder in the Java client:

.Net-Option.NET Option StandardwertDefault value BESCHREIBUNGDescription
AccessTokenProvider null Eine Funktion, die eine Zeichenfolge zurückgibt, die als bearerauthentifizierungstoken in HTTP-Anforderungen bereitgestelltA function returning a string that is provided as a Bearer authentication token in HTTP requests.
SkipNegotiation false Legen Sie dies auf fest, true um den Aushandlungs Schritt zu überspringenSet this to true to skip the negotiation step. Wird nur unterstützt, wenn der websockets-Transport der einzige aktivierte Transport ist.Only supported when the WebSockets transport is the only enabled transport. Diese Einstellung kann nicht aktiviert werden, wenn der Azure-Dienst verwendet wird SignalR .This setting can't be enabled when using the Azure SignalR Service.
ClientCertificates LeerEmpty Eine Auflistung von TLS-Zertifikaten, die zum Authentifizieren von Anforderungen gesendet werden sollen.A collection of TLS certificates to send to authenticate requests.
Cookies LeerEmpty Eine Auflistung von http- cookie s, die mit jeder HTTP-Anforderung gesendet werden sollen.A collection of HTTP cookies to send with every HTTP request.
Credentials LeerEmpty Anmelde Informationen, die mit jeder HTTP-Anforderung gesendet werden.Credentials to send with every HTTP request.
CloseTimeout 5 Sekunden5 seconds Nur websockets.WebSockets only. Die maximale Zeitspanne, die der Client nach dem Schließen des Servers wartet, um die Anforderung zum Schließen zu bestätigen.The maximum amount of time the client waits after closing for the server to acknowledge the close request. Wenn der Server die Schließung innerhalb dieses Zeitraums nicht anerkennt, trennt der Client die Verbindung.If the server doesn't acknowledge the close within this time, the client disconnects.
Headers LeerEmpty Eine Karte mit zusätzlichen HTTP-Headern, die mit jeder HTTP-Anforderung gesendet werden sollen.A Map of additional HTTP headers to send with every HTTP request.
HttpMessageHandlerFactory null Ein Delegat, der verwendet werden kann, um den HttpMessageHandler zum Senden von HTTP-Anforderungen verwendeten zu konfigurieren oder zu ersetzen.A delegate that can be used to configure or replace the HttpMessageHandler used to send HTTP requests. Wird nicht für WebSocket-Verbindungen verwendet.Not used for WebSocket connections. Dieser Delegat muss einen Wert zurückgeben, der nicht NULL ist, und erhält den Standardwert als Parameter.This delegate must return a non-null value, and it receives the default value as a parameter. Ändern Sie die Einstellungen für diesen Standardwert, und geben Sie ihn zurück, oder geben Sie eine neue HttpMessageHandler Instanz zurück.Either modify settings on that default value and return it, or return a new HttpMessageHandler instance. Wenn Sie den Handler ersetzen, stellen Sie sicher, dass die Einstellungen, die Sie beibehalten möchten, vom bereitgestellten Handler kopiert werden. Andernfalls gelten die konfigurierten Optionen (z. b. Cookie s und Header) nicht für den neuen Handler.When replacing the handler make sure to copy the settings you want to keep from the provided handler, otherwise, the configured options (such as Cookies and Headers) won't apply to the new handler.
Proxy null Ein HTTP-Proxy, der beim Senden von HTTP-Anforderungen verwendet wird.An HTTP proxy to use when sending HTTP requests.
UseDefaultCredentials false Legen Sie diesen booleschen Wert fest, um die Standard Anmelde Informationen für http-und websockets-Anforderungen zu sendenSet this boolean to send the default credentials for HTTP and WebSockets requests. Dies ermöglicht die Verwendung der Windows-Authentifizierung.This enables the use of Windows authentication.
WebSocketConfiguration null Ein Delegat, der zum Konfigurieren zusätzlicher WebSocket-Optionen verwendet werden kann.A delegate that can be used to configure additional WebSocket options. Empfängt eine Instanz von clientwebsocketoptions , die zum Konfigurieren der Optionen verwendet werden kann.Receives an instance of ClientWebSocketOptions that can be used to configure the options.

Im .NET-Client können diese Optionen durch den für bereitgestellten Options Delegaten geändert werden WithUrl :In the .NET Client, these options can be modified by the options delegate provided to WithUrl:

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

Im JavaScript-Client können diese Optionen in einem JavaScript-Objekt bereitgestellt werden, das für Folgendes bereitgestellt wird withUrl :In the JavaScript Client, these options can be provided in a JavaScript object provided to withUrl:

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

Im Java-Client können diese Optionen mit den Methoden auf der konfiguriert werden, die HttpHubConnectionBuilder von der HubConnectionBuilder.create("HUB URL")In the Java client, these options can be configured with the methods on the HttpHubConnectionBuilder returned from the HubConnectionBuilder.create("HUB URL")

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

Zusätzliche RessourcenAdditional resources