我们有一个ASP。最近升级到。NET 4.6.2的。NET Forms应用程序。我们使用的是StackExchange.Redis.StrongName与Microsoft.AspNet.SignalR但最近转移到StackExchange。复述,. 在。net 4.6.2升级之前,所有的工作都是与Redis一起工作的,但自从这个变化之后,Redis似乎没有建立连接。
我们在ARR场后面设置了两个节点,运行相同的应用程序代码。
我们的Startup.cs文件
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(MySampleProject.SignalR.Startup))]
namespace MySampleProject.SignalR
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalHost.DependencyResolver.UseStackExchangeRedis(RedisIP, 6379, RedisPassword, "MySampleProject");
app.MapSignalR("/signalr", new HubConfiguration
{
EnableJavaScriptProxies = true,
EnableDetailedErrors = true,
EnableJSONP = true
});
}
}
}
在我们的Startup.cs文件中唯一改变的是使用UseStackExchangeRedis
从UseRedis
与StackExchange.Redis.StrongName包。我们已经在CentOS 7上安装了Redis 6.0.10。
如果我们恢复到使用StackExchange.Redis.StrongName一切又正常了。
如果我们注释掉
GlobalHost.DependencyResolver.UseStackExchangeRedis(RedisIP, 6379, RedisPassword, "MySampleProject");
SignalR工作,但消息(显然)只能在同一服务器上传递。
我们按照https://learn.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-redis上的说明操作。
还有其他需要更改的配置吗?
我发现另一个帖子遇到了类似的问题:Signalr使用Redis背板不传播消息
解决方案是在Signalr中启用跟踪:https://learn.microsoft.com/en-us/aspnet/signalr/overview/testing-and-debugging/enabling-signalr-tracing
发现连接Redis - System错误。InvalidOperationException: system . io . pipes的程序集无法加载">
将以下内容添加到Web.config
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.1" />
</dependentAssembly>
它解决了这个问题。