当前位置: 首页 > 知识库问答 >
问题:

信号器Redis背板不工作-依赖性问题?

麻桐
2023-03-14

在我们的冗余Azure web应用程序中,我们将Signal与Redis(Azure缓存)背板一起使用。几天前,我们检测到所有信号器消息似乎都没有送达(它在过去一直有效),因此指出背板存在问题。

该应用程序使用ASP。Net Owin启动以及集线器的Autofac和IoC,我们启动信号器如下:

GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(redisConnectionString, signalrRedisKey));
var hubConfiguration = new HubConfiguration
{
    Resolver = new AutofacDependencyResolver(resolver)
};
app.UseAutofacMiddleware(resolver);
app.MapSignalR("/signalr", hubConfiguration);

无论我是否将Redis背板配置字符串更改为无效字符串,它都不会连接。信号机代码位于web主机以外的另一个组件中。

我在应用程序iself中没有得到任何异常,但在跟踪信号器时,我得到了以下错误:

信号员。ReflectedHubDescriptorProvider警告:0:在搜索集线器时,无法加载程序集“Microsoft.AspNet.signal.Owin,Version=1.2.2.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”中的某些类。[C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET

文件\root\79fa3057\a44a64e\汇编\dl3\75de3633\cfc73faf_eb21d101\Microsoft.AspNet.Owin.dll]

原始异常类型:反射类型加载异常原始异常消息:无法加载一个或多个请求的类型。有关详细信息,请检索LoaderExceptions属性。

这是nuget的依赖性问题吗?

以下是我们包裹的相关摘录。配置:

<package id="Autofac" version="3.5.2" targetFramework="net46" />
<package id="Autofac.Owin" version="3.1.0" targetFramework="net46" />
<package id="Autofac.SignalR" version="3.0.2" targetFramework="net46" />
<package id="Castle.Core" version="3.3.3" targetFramework="net46" />
<package id="Microsoft.AspNet.SignalR.Client" version="2.2.0" targetFramework="net46" />
<package id="Microsoft.AspNet.SignalR.Core" version="2.2.0" targetFramework="net46" />
<package id="Microsoft.AspNet.SignalR.Redis" version="2.2.0" targetFramework="net46" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
<package id="Microsoft.Owin.Security" version="3.0.1" targetFramework="net46" />
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net46" />
<package id="Owin" version="1.0" targetFramework="net46" />
<package id="StackExchange.Redis.StrongName" version="1.0.488" targetFramework="net46" />

非常感谢你的帮助!

共有2个答案

曾歌者
2023-03-14

在我的一个项目中,我使用了signer和Ninject作为依赖解析程序。在hubConfiguration中,我提到了使用Ninject作为依赖项解析程序,然后分配了hubConfiguration。已将解析程序分配给GlobalHost。依赖解析程序。例如

app.Map("/hubUrl", map =>
{
     var hubConfiguration = new HubConfiguration
                {
                    EnableJavaScriptProxies = false,
                    Resolver = InitializeNinjectDepenedencyResolver()
                };
     GlobalHost.DependencyResolver = hubConfiguration.Resolver;
     map.RunSignalR(hubConfiguration);
}

通过这种方式,它确保了我能够使用GlobalHost在其他地方使用相同的依赖解析程序。DependencyResolver(在Scaleout提供程序类中,该类设置在运行时使用哪个Scaleout提供程序)

顾俊茂
2023-03-14

我发现了问题:-)因为我们使用OWIN没有什么应该通过GlobalHost注册。以下是工作解决方案:

var hubConfiguration = new HubConfiguration
{
    Resolver = new AutofacDependencyResolver(resolver)
};
app.UseAutofacMiddleware(resolver);
app.MapSignalR("/signalr", hubConfiguration);

hubConfiguration.Resolver.UseRedis(new RedisScaleoutConfiguration(redisConnectionString, signalrRedisKey));
 类似资料:
  • 有人尝试连接AWS Elasticache Redis(集群模式禁用)与Signalr一起使用吗?我发现AWS Redis存在一些严重的配置问题和限制。 2)是否必须启用群集模式?与禁用群集模式一样,我们需要使用副本endpoint进行读取,而signalr不知道这一点? 提前谢了。

  • java.sql.没有找到适合jbdc:mysql://localhost:3306/mydb?autoReconnect=true的驱动程序 有没有解决办法?

  • 我首先想到的是:我认为有点非常准确,给出了一个值,其中as请求一个参数;上面写着什么?不要认为<代码>摆动定时器<代码>是准确的吗? 2) 假设用计时一个单词需要x毫秒;如果我们在重复一项任务(突出显示一个单词,如卡拉OK应用程序),我会包含以下代码: 安静地工作很好,但我肯定我不能依靠这一点,因为时间,长度可能会改变!如何克服这个问题?因为几毫秒内的变化可能会给我带来灾难性的后果。 3) 同时,

  • 我有AWS EC2的信号服务。我想用Redis引擎Elasticache设置背板。我可以使用redis cli工具成功连接到Signal服务器中的Easticache。 但当我输入backpalne设置代码时,信号器返回 SignalR: webSocket传输在尝试连接时超时。 没有背板设置代码 效果很好。 错误信息如下 使现代化 当我在服务器本地安装redis后,也出现了同样的问题。看起来不是

  • 我在一个ARM模板中有两个相互依赖的Azure资源:一个密钥库和一个service fabric集群。 是否有一种方法可以引用service fabric集群的对象ID来提供给密钥库的访问策略,是否有一种方法可以在不硬编码任何值的情况下生成密钥库中的机密?理想情况下,我们只知道秘密名称,并且只将该秘密名称提供给ARM模板中的服务fabric集群。

  • 获取错误: 错误:无法解析“”的依存关系:app@debugUnitTest/compileClasspath:无法解析com。googlecode。mp4parser:isoparser:1.1.22。打开文件显示详细信息 对于依存关系: 但对于依赖: Gradle同步成功。 尝试使用存储库: 详细错误: 无法解析“”的依存关系:app@StagingUnitTest/compileClassp