Използване на .MapOwinRoute() вместо класа OwinStartup / Configuration - преговарянето връща 404

Работя върху приложение, използващо SignalR 2, и срещам проблеми при картографирането на SignalR чрез метода на разширение .MapOwinRoute() за ASP.net 4 RouteTable.Routes. Като:

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();
   });
});

Маршрутът /signalr/negotiate връща 404.

Всичко работи добре, когато го направя така:

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

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

Проблемът е, че използването на OwinStartup не е опция за мен, тъй като трябва да конфигурирам SignalR с моя собствен резолвер на зависимости, свързвайки го с общия IOC контейнер, който използвам, и той не е готов в момента на OwinStartup. Също така трябва да конфигурирам JSON сериализатора с персонализирани опции, които също се конфигурират на по-късен етап.

Не мога да разбера какво пропускам тук.


person EinarI    schedule 22.01.2014    source източник


Отговори (1)


Вие не искате да картографирате маршрут, за да искате да картографирате префикс (път). Освен това използвате грешен URL адрес и грешно претоварване на IAppBuilder.

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

Горната логика взема всеки път, който започва със SignalR, и го предава на мидълуера на SignalR.

person davidfowl    schedule 22.01.2014