我们在冗余 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 主机之外的另一个程序集中。
我在应用程序本身中没有任何异常,但是在跟踪 SignalR 时出现以下错误:
SignalR.ReflectedHubDescriptorProvider 警告:0:搜索集线器时无法加载程序集“Microsoft.AspNet.SignalR.Owin,Version=1.2.2.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”中的某些类。[C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET
Files\root\79fa3057\a44a64e\assembly\dl3\75de3633\cfc73faf_eb21d101\Microsoft.AspNet.SignalR.Owin.dll]
原始异常类型:ReflectionTypeLoadException 原始异常消息:无法加载一种或多种请求的类型。检索 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" />
真的很感谢你的帮助!