使用.MapOwinRoute()而不是OwinStartup / Configuration类 - 协商返回404

时间:2014-01-22 08:45:49

标签: c# asp.net signalr signalr-hub owin

我正在使用SignalR 2处理应用程序,并且遇到了通过ASP.net 4 RouteTable.Routes的.MapOwinRoute()扩展方法映射SignalR的问题。像:

RouteTable.Routes.MapOwinRoute("signalr.hubs", "signalr/hubs", a => a.MapSignalR());

也添加到Web.Config:

<appSettings>
    <add key="owin:AutomaticAppStartup" value="false" />
</appSettings

它映射到了。导航到/ signalr / hubs为我提供了集线器代理,但是当我连接我的代码时:

$(function () {
   var orderProcessing = $.connection.orderProcessing;
   $.connection.hub.start().done(function () {
      orderProcessing.server.doStuff();
   });
});

路由/信号员/协商返回404.

当我这样做时,一切正常:

[assembly: OwinStartup(typeof(Web.Startup))]

namespace Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

问题是使用OwinStartup对我来说不是一个选项,因为我需要使用自己的依赖项解析器配置SignalR,将其链接到我使用的一般IOC容器,并且它在OwinStartup时尚未就绪。我还需要使用自定义选项配置JSON序列化程序,这些选项也将在稍后阶段进行配置。

无法弄清楚我在这里缺少什么。

1 个答案:

答案 0 :(得分:3)

您不希望映射要映射前缀(路径)的路由。此外,您使用了错误的URL和错误的IAppBuilder重载。

RouteTable.Routes.MapOwinPath("/signalr", app => app.RunSignalR());

上述逻辑采用任何以SignalR开头的路径并将其传递给SignalR中间件。