我们可以托管ASP.NET SignalR v2.4.1.NETCORE应用程序



我的代码库陷入了困境。Net 4.7.2,但我需要在一个基于Asp的网站上推送一些通知。核心2.2。

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

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

有人在这方面取得了成功吗?或者有什么建议吗?

必须有一种方法让项目从迁移。网络到核心。感谢

好吧,经过一晚上的时间,我找到了这个问题的解决方案。

首先只是为了让我的设置清楚。有一个API项目的目标。Net 4.7.2通过SignalR 2.4.1集线器广播一些消息。还有一些其他的Asp。净4.7.2消耗那些运行良好的集线器的项目。此外,还有一个新的网站内置。Net Core,但目标是4.7.2框架。

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

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

  • 微软。Owin
  • 微软。AspNetCore。Owin

我还为在同一管道上设置OWIN的Core IApplicationBuilder接口添加了一个新的扩展方法:

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>>();
}));
}
}

然后,在Core项目的Startup类中,在Configure方法中,我可以使用我的扩展并向其注册SignalR集线器,如下所示:

启动.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseOwinApp(owinApp =>
{
owinApp.MapSignalR();
});
...
}

这样,如果出于任何原因需要,我们都可以向OWIN管道添加更多的中间件。

我希望这能有所帮助。

最新更新