Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av Andrew Stanton-Nurse, Brady Gaster och Tom Dykstra.
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera följande NuGet-paket i appen:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Anropa AddStackExchangeRedis genom att lägga till följande rad före raden som anropar
builder.Build()) iProgram.csfilen.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i
ConfigurationOptionsobjektet. Alternativ som anges iConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera följande NuGet-paket i appen:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Anropa AddStackExchangeRedis genom att lägga till följande rad före raden som anropar
builder.Build()) iProgram.csfilen.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i
ConfigurationOptionsobjektet. Alternativ som anges iConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera följande NuGet-paket i appen:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Anropa AddStackExchangeRedis genom att lägga till följande rad före raden som anropar
builder.Build()) iProgram.csfilen.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i
ConfigurationOptionsobjektet. Alternativ som anges iConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera följande NuGet-paket i appen:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Anropa
Startup.ConfigureServicesi AddStackExchangeRedis-metoden.services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i
ConfigurationOptionsobjektet. Alternativ som anges iConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera följande NuGet-paket i appen:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Anropa
Startup.ConfigureServicesi AddStackExchangeRedis-metoden.services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i
ConfigurationOptionsobjektet. Alternativ som anges iConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera något av följande NuGet-paket i appen:
-
Microsoft.AspNetCore.SignalR.StackExchangeRedis– Beror på StackExchange.Redis 2.X.X. Det här är det rekommenderade paketet för ASP.NET Core 2.2 eller senare. -
Microsoft.AspNetCore.SignalR.Redis– Beror på StackExchange.Redis 1.X.X. Det här paketet ingår inte i ASP.NET Core 3.0 eller senare.
-
Anropa
Startup.ConfigureServicesi AddStackExchangeRedis-metoden.services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
När du använder Microsoft.AspNetCore.SignalR.Redisanropar du AddRedis.
Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i configurationOptions-objektet . Alternativ som anges i
ConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
När du använder Microsoft.AspNetCore.SignalR.Redisanropar du AddRedis.
I föregående kod options.Configuration initieras med det som angavs i anslutningssträngen.
Information om Redis-alternativ finns i StackExchange Redis-dokumentationen.
Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
Den här artikeln beskriver SignalRspecifika aspekter av hur du konfigurerar en Redis-server som ska användas för att skala ut en ASP.NET Core-app SignalR .
Varning
Den här artikeln visar användningen av anslutningssträngar. Med en lokal databas behöver användaren inte autentiseras, men i produktion innehåller anslutningssträngar ibland ett lösenord för att autentisera. En resursägares lösenordsautentiseringsuppgifter (ROPC) är en säkerhetsrisk som bör undvikas i produktionsdatabaser. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för appar som distribueras till test- eller produktionsmiljöer finns i Säkra autentiseringsflöden.
Konfigurera ett Redis-backplan
Installera en Redis-server.
Viktigt!
För produktionsanvändning rekommenderas en Redis-backplan endast när den körs i samma datacenter som SignalR appen. Annars försämras prestandan av nätverkslatens. Om din SignalR app körs i Azure-molnet rekommenderar vi Azure SignalR Service i stället för en Redis-backplan.
Mer information finns i följande resurser:
SignalR Installera NuGet-paketet i
Microsoft.AspNetCore.SignalR.Redisappen.I metoden
Startup.ConfigureServicesanropar duAddRedisefterAddSignalR:services.AddSignalR().AddRedis("<your_Redis_connection_string>");Konfigurera alternativ efter behov:
De flesta alternativ kan anges i anslutningssträngen eller i configurationOptions-objektet . Alternativ som anges i
ConfigurationOptionsåsidosätter de som anges i anslutningssträngen.I följande exempel visas hur du anger alternativ i
ConfigurationOptionsobjektet. Det här exemplet lägger till ett kanalprefix så att flera appar kan dela samma Redis-instans, enligt beskrivningen i följande steg.services.AddSignalR() .AddRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });I föregående kod
options.Configurationinitieras med det som angavs i anslutningssträngen.Om du använder en Redis-server för flera SignalR appar använder du ett annat kanalprefix för varje SignalR app.
Om du anger ett kanalprefix isoleras en SignalR app från andra som använder olika kanalprefix. Om du inte tilldelar olika prefix går ett meddelande som skickas från en app till alla sina egna klienter till alla klienter i alla appar som använder Redis-servern som ett bakplan.
Konfigurera servergruppens belastningsutjämningsprogram för klibbiga sessioner. Här följer några exempel på dokumentation om hur du gör det:
Redis-serverfel
När en Redis-server slutar SignalR fungera genererar undantag som anger att meddelanden inte levereras. Några vanliga undantagsmeddelanden:
- Det gick inte att skriva meddelandet
- Det gick inte att anropa hubbmetoden "MethodName"
- Anslutningen till Redis misslyckades
SignalR buffrar inte meddelanden för att skicka dem när servern kommer tillbaka online. Alla meddelanden som skickas när Redis-servern är nere går förlorade.
SignalR återansluter automatiskt när Redis-servern är tillgänglig igen.
Anpassat beteende för anslutningsfel
Här är ett exempel som visar hur du hanterar Redis-anslutningsfelhändelser.
services.AddSignalR()
.AddRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis-kluster
Redis-klustret använder flera samtidigt aktiva Redis-servrar för att uppnå hög tillgänglighet. När Redis-klustret används som backplan för SignalRlevereras meddelanden till alla noder i klustret utan kodändringar i appen.
Det finns en balansgång mellan antalet noder i klustret och genomströmningen för bakplanen. Om du ökar antalet noder ökar tillgängligheten för klustret, men dataflödet minskar eftersom meddelanden måste överföras till alla noder i klustret.
SignalR I appen tar du med alla möjliga Redis-noder med någon av följande metoder:
- Visa en lista över noderna i anslutningssträngen avgränsade med kommatecken.
- Om du använder anpassat beteende för anslutningsfel lägger du till noderna i
ConfigurationOptions.Endpoints.
Nästa steg
Mer information finns i följande resurser:
ASP.NET Core