Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器Redis背板不工作-相关性问题?_C#_Signalr_Signalr Backplane - Fatal编程技术网

C# 信号器Redis背板不工作-相关性问题?

C# 信号器Redis背板不工作-相关性问题?,c#,signalr,signalr-backplane,C#,Signalr,Signalr Backplane,在我们的冗余Azure web应用程序中,我们将Signal与Redis(Azure缓存)背板一起使用。几天前,我们检测到所有信号器消息似乎都没有被传递(它在过去工作过),因此指出了背板的问题 该应用程序使用ASP.Net Owin启动以及Autofac作为集线器的IoC,我们启动Signal如下: GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutConfiguration(redisConnectionString, signal

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

该应用程序使用ASP.Net Owin启动以及Autofac作为集线器的IoC,我们启动Signal如下:

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中没有得到任何异常,但在跟踪信号器时得到以下错误:

SignalR.ReflectedHubDescriptor提供程序警告:0:某些 来自程序集“Microsoft.AspNet.SignalR.Owin,Version=1.2.2.0”的类, 无法加载区域性=中性,PublicKeyToken=31bf3856ad364e35” 搜索集线器时。 [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET

Files\root\79fa3057\a44a64e\assembly\dl3\75de3633\cfc73faf_eb21d101\Microsoft.AspNet.signal.Owin.dll]

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

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));

在我的一个项目中,我使用了signer和Ninject作为依赖项解析程序。在hubConfiguration中,我提到过使用Ninject作为依赖项解析程序,在分配了Ninject之后,hubConfiguration.resolver被分配给GlobalHost.dependencysolver。e、 g

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

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

感谢分享!