我的代码库目前停留在.Net 4.7.2中,但我需要在基于Asp.Core 2.2的网站上推送一些通知。
在整个系统中,我们使用SignalR 2.4.1,但它在.Net核心中完全重写。
我尝试在同一个应用程序中托管它,但没有成功。欧文似乎并不高兴。
有没有人用它取得了一些成功,或者有什么建议?
必须有一种方法让项目从.Net迁移到核心。谢谢
发布于 2020-02-28 18:41:34
好的,经过漫长的一夜,我得到了这个问题的解决方案。
首先我要把我的设置弄清楚。有一个以.Net 4.7.2为目标的应用程序接口项目,它通过SignalR 2.4.1集线器广播一些消息。还有一些其他的Asp.Net 4.7.2项目正在使用这些集线器,它们工作得很好。此外,在.Net核心中还有一个新的网站构建,但目标是4.7.2框架。
我最终得到的解决方案实际上是在AspCore管道中托管一个OWIN管道。
首先,我需要安装以下软件包:
我还为核心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>>();
}));
}
}然后,在核心项目的启动类中,在配置方法中,我能够使用我的扩展并将SignalR集线器注册到它,如下所示:
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseOwinApp(owinApp =>
{
owinApp.MapSignalR();
});
...
}这样,无论出于什么原因,如果需要,我们都可以向OWIN管道中添加更多中间件。
我希望这能帮到你。
https://stackoverflow.com/questions/60438549
复制相似问题