我正在使用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序列化程序,这些选项也将在稍后阶段进行配置。
无法弄清楚我在这里缺少什么。
答案 0 :(得分:3)
您不希望映射要映射前缀(路径)的路由。此外,您使用了错误的URL和错误的IAppBuilder重载。
RouteTable.Routes.MapOwinPath("/signalr", app => app.RunSignalR());
上述逻辑采用任何以SignalR开头的路径并将其传递给SignalR中间件。