Можем ли мы разместить ASP. NET SignalR v2.4.1 в приложении ASP .NETCORE? - PullRequest
1 голос
/ 27 февраля 2020

У меня есть ситуация, когда моя кодовая база застряла. Net 4.7.2 на данный момент, но мне нужно получить sh некоторые уведомления на веб-сайте, который построен на Asp .Core 2.2.

Во всей системе мы используем SignalR 2.4.1, но он полностью переписан. Net Core.

Я попытался разместить его в том же приложении, но безуспешно. Овин, кажется, не счастлив.

Кто-нибудь имел успех с этим или есть какие-либо предложения?

Должен быть способ перехода проектов из. Net в Core. Спасибо

1 Ответ

1 голос
/ 28 февраля 2020

Хорошо, так что после долгого вечера я получил решение этой проблемы.

Сначала просто проясню мои настройки. Существует целевой проект API. Net 4.7.2, который транслирует некоторые сообщения через SignalR 2.4.1 Hub. Существуют и другие Asp. Net 4.7.2. Проекты, использующие те хабы, которые работают нормально. Кроме того, имеется новый встроенный веб-сайт. Net Ядро, но предназначенное для платформы 4.7.2.

Решение, которое я выбрал, заключается в размещении конвейера OWIN в конвейере AspCore.

Первый Мне нужно было установить следующие пакеты:

  • Microsoft.Owin
  • Microsoft.AspNetCore.Owin

Я также добавил новый метод расширения для Core Интерфейс IApplicationBuilder, который устанавливает OWIN для того же конвейера:

    public static class OwinExtensions
    {
        public static IApplicationBuilder UseOwinApp(this IApplicationBuilder app, Action<IAppBuilder> configuration)
        {
            return app.UseOwin(setup => setup(next =>
            {
                IAppBuilder owinApp = new AppBuilder();

                var aspNetCoreLifetime = (IApplicationLifetime)app.ApplicationServices.GetService(typeof(IApplicationLifetime));

                var owinAppProperties = new AppProperties(owinApp.Properties)
                {
                    OnAppDisposing = aspNetCoreLifetime?.ApplicationStopping ?? CancellationToken.None,
                    DefaultApp = next
                };

                configuration(owinApp);

                return owinApp.Build<Func<IDictionary<string, object>, Task>>();
            }));
        }
    }

Затем в классе Startup проекта Core, в методе Configure , который мне удалось используйте мое расширение и зарегистрируйте в нем концентраторы SignalR следующим образом:

Startup.cs

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            ...

            app.UseOwinApp(owinApp =>
            {
                owinApp.MapSignalR();
            });

            ...
}

Таким образом, мы можем добавить больше промежуточного программного обеспечения в конвейер OWIN, если нам нужно по тем или иным причинам.

Надеюсь, это поможет.

...