我从早期版本开始就一直在使用 SignalR,并且一直在升级,但是我已经将我的应用程序部署到了我的 Windows Server 2008 R2 生产服务器,现在应用程序因“无法解决集线器而崩溃”。例外。
编辑:StackTrace 添加:
[InvalidOperationException: 'stockitems' Hub could not be resolved.]
Microsoft.AspNet.SignalR.Hubs.HubManagerExtensions.EnsureHub(IHubManager hubManager, String hubName, IPerformanceCounter[] counters) +426
Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Initialize(IDependencyResolver resolver, HostContext context) +716
Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary`2 environment) +1075
Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary`2 environment) +363
Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute() +68
Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object extraData) +414
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
Microsoft.Owin.Host.SystemWeb.CallContextAsyncResult.End(IAsyncResult result) +146
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
在我的开发机器和本地测试服务器上,我没有遇到任何问题。
有问题的集线器非常简单:
[HubName("StockItems")]
public class StockItemHub : Hub
{
}
最初我认为这是 HubName 的问题,因此将其删除,但它仍然会爆炸。
最初我认为这是由于依赖注入,所以我将 Global.asax 更改为如下所示:
var signalRResolver = new SignalRDependencyResolver();
GlobalHost.DependencyResolver = signalRResolver;
var configuration = new HubConfiguration { Resolver = signalRResolver };
RouteTable.Routes.MapHubs(configuration);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, config.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
编辑:什么是 SignalRDependencyResolver?SignalRDependencyResolver 在我尝试解决此问题之前并不存在。因为我相信它是一个依赖注入问题,所以我包装了 DefaultDependencyResolver 覆盖 GetService 和 GetServices 以首先检查我的 Ninject 内核的类型,如果没有回退到 DefaultDependencyResolver
有任何想法吗?
服务器正在运行 IIS7、Windows Server 2008 和 .Net 4.5 该应用程序是 MVC 4 .Net 4.5