asp.net-core - 我们可以在 ASP.NETCORE 应用程序中托管 ASP.NET SignalR v2.4.1 吗?

标签 asp.net-core signalr asp.net-core-signalr .net-4.7.2 signalr-2

我遇到的情况是,我的代码库目前停留在 .Net 4.7.2 中,但我需要在基于 Asp.Core 2.2 构建的网站上推送一些通知。

在整个系统中,我们使用 SignalR 2.4.1,但它是在 .Net Core 中完全重写的。

我尝试将其托管在同一个应用程序中,但没有成功。欧文似乎不太高兴。

有人成功过或者有什么建议吗?

必须有一种方法可以将项目从 .Net 迁移到 Core。 谢谢

最佳答案

好吧,经过一夜的努力,我找到了解决这个问题的方法。

首先只是为了让我的设置更清楚。 有一个针对 .Net 4.7.2 的 API 项目,它通过 SignalR 2.4.1 Hub 广播一些消息。 还有一些其他 Asp.Net 4.7.2 项目使用这些工作正常的集线器。 此外,还有一个基于 .Net Core 构建的新网站,但针对的是 4.7.2 框架。

我最终得到的解决方案本质上是在 AspCore Pipeline 中托管 OWIN 管道。

首先我需要安装以下软件包:

  • 微软.Owin
  • Microsoft.AspNetCore.Owin

我还为 Core IApplicationBuilder 接口(interface)添加了一个新的扩展方法,用于在同一管道上设置 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 类中,在 Configure 方法中,我可以使用我的扩展并向其注册 SignalR 集线器,如下所示:

Startup.cs

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            ...

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

            ...
}

这样,无论出于何种原因,我们都可以在需要时向 OWIN 管道添加更多中间件。

我希望这会有所帮助。

关于asp.net-core - 我们可以在 ASP.NETCORE 应用程序中托管 ASP.NET SignalR v2.4.1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60438549/

相关文章:

asp.net-core - ASP.NET 核心 : Initiating a request to the application from within itself

c# - SignalR 1.0rc2 版本中未找到 Signalr IConnectionIdGenerator

asp.net-mvc - 启动连接失败: Error: Unable to initialize any of the available transports

c# - 从类库添加 ASP.NET Controller / View

c# - 如何将日志记录添加到 Blazor 服务器端组件?

asp.net-core - 如何处理 IdentityUser 更新并发失败?

asp.net-core - ASP.NET core后台服务通过signalR发送数据

azure - 如何使 SignalR 在整个握手过程中使用同一台机器?

asp.net - 如何从 Hub 外部将 SignalR 连接添加到 Hub 组?

javascript - SignalR 不会退回到旧协议(protocol)