RouteTable.Routes.MapHubs()仅在Windows Azure模拟器中抛出ArgumentNullException。为什么?

时间:2013-03-23 23:37:06

标签: .net asp.net-mvc-3 azure signalr

我在MVC 3.0 Windows Azure应用程序中使用SignalR。 以下行仅在Windows Azure模拟器中引发ArgumentNullException。如果我运行MVC 3.0应用程序而不是云应用程序,它不会抛出。 (我没有尝试在部署的云中运行此代码)。

public static void RegisterRoutes(RouteCollection routes)
{
    RouteTable.Routes.MapHubs();
    // ...
}

邮件Value cannot be null. Parameter name: instanceName旁边没有关于错误的其他信息。我不知道它是什么实例名称。

我不知道可能出现什么问题。 为什么会这样?

修改

这是完整的异常信息:

  

System.ArgumentNullException未处理HResult = -2147467261
  Message = Value不能为null。参数名称:instanceName
  Source = Microsoft.AspNet.SignalR.Core ParamName = instanceName
  堆栈跟踪:          在Microsoft.AspNet.SignalR.Hosting.HostDependencyResolverExtensions.InitializeHost(IDependencyResolver)   resolver,String instanceName,CancellationToken hostShutdownToken)          at Owin.OwinExtensions.UseType [T](IAppBuilder builder,Object [] args)          在Owin.OwinExtensions.MapHubs(IAppBuilder构建器,字符串路径,HubConfiguration配置)          在System.Web.Routing.SignalRRouteExtensions。<> c_ DisplayClass7.b _5(IAppBuilder)   地图)          在Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(Action 1 startup) at Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(Action 1 startup)          在System.Web.Routing.RouteCollectionExtensions.MapOwinPath(RouteCollection   routes,String name,String pathBase,Action`1 startup)          在System.Web.Routing.SignalRRouteExtensions.MapHubs(RouteCollection   routes,String name,String path,HubConfiguration configuration)          在System.Web.Routing.SignalRRouteExtensions.MapHubs(RouteCollection   routes,String path,HubConfiguration配置)          在System.Web.Routing.SignalRRouteExtensions.MapHubs(RouteCollection   路由,HubConfiguration配置)          在System.Web.Routing.SignalRRouteExtensions.MapHubs(RouteCollection   路由)          在Cerebello.MvcApplication.RegisterRoutes(RouteCollection路由)中   C:\ Projetos \小脑\小脑\ CerebelloWebRole \ Global.asax.cs中:线   25          在CerebelloWebRole.Code.Helpers.RouteHelper.RegisterAllRoutes()in   C:\ Projetos \小脑\小脑\ CerebelloWebRole \代码\助手\ RouteHelper.cs:线   82          在CerebelloWebRole.WebRole.Run()中的c:\ Projetos \ Cerebello \ Cerebello \ CerebelloWebRole \ WebRole.cs:第23行          在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()          在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRole()          在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__2()          在System.Threading.ExecutionContext.RunInternal(ExecutionContext   executionContext,ContextCallback回调,对象状态,布尔值   preserveSyncCtx)          at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean   preserveSyncCtx)          在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)          在System.Threading.ThreadHelper.ThreadStart()InnerException:

2 个答案:

答案 0 :(得分:3)

不幸的是,这是一个已知问题:https://github.com/SignalR/SignalR/issues/1616

请随时评论此问题。知道在Windows Azure模拟器中发生此错误很有用。如果您发现此问题出现在部署中,那么这也是值得注意的。

答案 1 :(得分:2)

似乎{IIS}进程外部正在调用MapHubs(),现在不允许这样做。如果您有一个注册路由的方法,并且它在IIS内外运行的代码之间共享,则必须确保仅从IIS中调用MapHubs()