请求线程外部的 ASP.NET Core RC2 SignalR Hub 上下文

2024-03-29

我目前正在尝试RC2释放ASP.NET Core我遇到了一个问题SignalR。我需要能够在请求线程之外向客户端发送消息。

现在,在完整的 .NET 框架中,您可以执行以下操作:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.<SendMessage>()

But in ASP.NET核心没有GlobalHost.

我发现了一个类似的问题:如何在 vNext 项目中获取 SignalR Hub 上下文? https://stackoverflow.com/questions/27299289/how-to-get-signalr-hub-context-in-a-vnext-project

其中第二个答案提供了一种在请求线程之外获取 hubcontext 的方法,但这也不起作用ASP.NET Core.

所以我的问题是:如何在 ASP.NET Core 中获取请求范围之外的集线器上下文?


您必须从以下位置提取当前的 github 版本:信号员 Github https://github.com/aspnet/SignalR-Server(犯罪:b95ac7b在撰写本文时)

一旦你有了这个,并加载了解决方案,或者将所有三个项目添加到现有解决方案中,你将需要更改所有三个项目中的project.json。

Microsoft.AspNetCore.SignalR.Server-project.json

您将看到对每个程序集的版本 1.1.0-* (RC3) 的引用。 将它们更改为当前的 RC2,直到看到以下内容

"Microsoft.AspNetCore.DataProtection": "1.0.0",
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0",
"Microsoft.AspNetCore.Http.Extensions": "1.0.0",
"Microsoft.Extensions.DependencyModel": "1.0.0",

现在保存文件,依赖项将更新。

对 The 做同样的事情消息传递 and 基础设施project.json 文件,将任何 1.1.0-* 替换为 1.0.0

完成后,您可以将项目引用添加到 Microsoft.AspNetCore.SignalR.Server 的主项目中

现在你已经加载了,打开你的启动.cs

在 - 的里面配置服务方法,添加:

 services.AddSignalR();

在 - 的里面配置方法添加:

 app.UseSignalR();

接下来,添加 using 语句并导入基础结构命名空间,如下所示:

using Microsoft.AspNetCore.SignalR.Infrastructure;

最后在 Startup.cs 中创建一个名为 ConnectionManager 的静态属性,如下所示:

public static IConnectionManager ConnectionManager;

最后在Startup.cs中的Configure方法中添加一个IServiceProvider属性(需要导入System命名空间)。然后从中加载ConfigurationManager。

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
    {
        ConnectionManager = serviceProvider.GetService<IConnectionManager>();

现在,在您的中心/其他任何地方,只需使用启动即可,而不是使用 Globalhost。例如:

IHubContext context = Startup.ConnectionManager.GetHubContext<SomeHub>();
context.Clients.All.someMethod();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请求线程外部的 ASP.NET Core RC2 SignalR Hub 上下文 的相关文章

随机推荐