我们在冗余Azure Web应用程序中将SignalR与Redis(Azure缓存)背板一起使用。几天前,我们检测到所有SignalR消息似乎都没有传递(过去一直有效),因此指出了背板的问题。

该应用程序使用ASP.Net Owin启动以及集线器的Autofac和IoC,我们像这样启动SignalR:

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

我将Redis背板配置字符串更改为无效字符串都没关系,它只是无法连接。 SignalR代码位于Web主机之外的另一个组件中。

我在应用程序iself中没有任何异常,但是在跟踪SignalR时出现了以下错误:



它是nuget的依赖问题吗?

这是我们的packages.config的相关摘录:
<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" />

非常感谢您的帮助!

最佳答案

我发现了问题:-)当我们使用OWIN时,不应通过GlobalHost注册任何内容。这是有效的解决方案:

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

hubConfiguration.Resolver.UseRedis(new RedisScaleoutConfiguration(redisConnectionString, signalrRedisKey));

关于c# - SignalR Redis背板不起作用-依赖性问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35325531/

10-17 02:07