我遇到的情况是,我的代码库目前停留在 .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/