Я рассматриваю возможность обновления этой библиотеки до SignalR 2.0.
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy
Я хочу, чтобы он поддерживал конвейер Owin 2.0 с интерфейсом IAppBuilder
вместо использования RouteCollection
, как это делал SignalR 1.x.
Проблема в том, как я могу получить набор маршрутов из IAppBuilder? Мне это нужно для регистрации пользовательского IHttpHandler, который обрабатывает мой собственный сценарий js (например, SignalR регистрирует свой сценарий концентратора)
1.x настройка моей библиотеки выглядит так
public static class SignalRConfig
{
public static void Register(RouteCollection routes)
{
routes.MapHubs();
routes.MapEventProxy<Contracts.Events.Event>();
}
}
Моя цель для конфигурации 2.0 примерно такая
public static class SignalRConfig
{
public static void Configuration(IAppBuilder app)
{
app.MapSignalR();
app.MapEventProxy<Contracts.Events.Event>();
}
}
Мой код, зависящий от RouteCollection, выглядит так
public static class RouteCollectionExtensions
{
public static void MapEventProxy<TEvent>(this RouteCollection routes)
{
Bootstrapper.Init<TEvent>();
routes.Add(new Route(
"eventAggregation/events",
new RouteValueDictionary(),
new RouteValueDictionary() {{"controller", string.Empty}},
new EventScriptRouteHandler<TEvent>()));
}
}
Изменить: похоже, очень сложно заставить Owin обслуживать запрос. Могу ли я использовать вспомогательные методы в SignalR 2.0 для регистрации маршрута и обработчика этого маршрута?
обновление: похоже, я на правильном пути с этим кодом
using Owin;
using SignalR.EventAggregatorProxy.Boostrap;
namespace SignalR.EventAggregatorProxy.Owin
{
public static class AppBuilderExtensions
{
public static void MapEventProxy<TEvent>(this IAppBuilder app)
{
Bootstrapper.Init<TEvent>();
app.Map("/eventAggregation/events", subApp => subApp.Use<EventScriptMiddleware<TEvent>>());
}
}
}
Теперь мне просто нужно реализовать EventScriptMiddleware
обновление: Последняя часть головоломки, теперь мне просто нужно промежуточное программное обеспечение, чтобы на самом деле выплюнуть javacript, это должно быть легко
namespace SignalR.EventAggregatorProxy.Owin
{
public class EventScriptMiddleware<TEvent> : OwinMiddleware
{
public EventScriptMiddleware(OwinMiddleware next) : base(next)
{
}
public override Task Invoke(IOwinContext context)
{
return context.Response.WriteAsync("Hello world!!");
}
}
}