我在我们的应用程序中集成了SignalR,它一直工作得很好。 几天前,由于一些要求,我们不得不支持我们的应用程序扩展 - 因此我们选择使用Redis进行SignalR扩展。
但是,由于集成,SignalR本身已经停止工作,我们得到的错误是:NO TRANSPORT可以成功初始化。尝试指定一个不同的传输或根本不指定自动初始化。
适用的方法: - 尝试使用不同版本的SignalR,如在线建议 - 没有帮助 - 增加连接超时 - 没有帮助
需要一些帮助来解决这个问题。也欢迎使用任何其他方法的建议。
[Update1]添加代码段
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}
如需更多参考,请点击以下链接:https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-redis
[UPDATE2]
public void Configuration(IAppBuilder app)
{
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(45);
ConfigureAuth(app);
ConfigureSignalR(app);
// SignalR backplane code changes
string server = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCacheEndpoint) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCacheEndpoint];
string port = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCachePort) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCachePort];
string password = RoleEnvironment.IsAvailable ?
RoleEnvironment.GetConfigurationSettingValue(Constant.ConfigKeys.RedisCachePassword) :
ConfigurationManager.AppSettings[Constant.ConfigKeys.RedisCachePassword];
const string SIGNALR_REDIS_APPNAME = "Phoenix 2.0 Admin Tool";
string connectionString = server + ":" + Int32.Parse(port) + ";password=" + password + ",ssl=True,abortConnect=False";
RedisScaleoutConfiguration cfg = new RedisScaleoutConfiguration(connectionString, SIGNALR_REDIS_APPNAME);
GlobalHost.DependencyResolver.UseRedis(cfg);
app.MapSignalR();
}
答案 0 :(得分:0)
我们有一个Azure AppService,可以使用SignalR和Redis背板。我确实发现根据连接字符串内容,事情无法正常工作。我们使用了RedisScaleoutConfiguration
API的GlobalHost.DependencyResolver.UseRedis
重载,而不是使用您显示的重载。
以下是基于我们工作启动的代码块(更改了值以保护易受攻击者):
const string SIGNALR_REDIS_APPNAME = "OurAppName";
string connectionString = "thename.redis.cache.windows.net:6380;password=somelongsecret,ssl=True,abortConnect=False";
RedisScaleoutConfiguration cfg = new RedisScaleoutConfiguration(connectionString, SIGNALR_REDIS_APPNAME);
GlobalHost.DependencyResolver.UseRedis(cfg);
显然,您可以使用更多代码从web.config
获取实际连接字符串。我们在指定非默认数据库名称时也遇到了问题,因此在此处使用默认值。
希望这有帮助。