Использование .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