C# 根据每个请求启动HUB连接并更改上下文
我需要连接到控制器中的信号器核心集线器 (我不想使用依赖项注入来调用我的hub方法) 但我不想每次呼叫控制器时都启动C# 根据每个请求启动HUB连接并更改上下文,c#,asp.net-core,signalr,signalr-hub,asp.net-core-signalr,C#,Asp.net Core,Signalr,Signalr Hub,Asp.net Core Signalr,我需要连接到控制器中的信号器核心集线器 (我不想使用依赖项注入来调用我的hub方法) 但我不想每次呼叫控制器时都启动轮毂连接 我该怎么办 我的控制器: private静态只读字符串url=”http://localhost:10580/sgr/rtc"; 公共HubConnection连接{get;private set;}=new-HubConnectionBuilder().WithUrl(url).Build(); 公共SampleDataController() { Run(async(
轮毂连接
我该怎么办
我的控制器:
private静态只读字符串url=”http://localhost:10580/sgr/rtc";
公共HubConnection连接{get;private set;}=new-HubConnectionBuilder().WithUrl(url).Build();
公共SampleDataController()
{
Run(async()=>wait Connection.StartAsync());
}
[HttpGet(“[action]”)
公共异步任务GetConnectionId()
{
尝试
{
var str=await Connection.InvokeAsync(“GetConnectionId”);
返回Ok(str);
}
捕获(例外)
{
返回请求(“未建立连接”);
}
}
我的中心:
公共字符串GetConnectionId()
{
返回Context.ConnectionId;
}
现在,我为每个请求获得不同的connectionId
,但我只想为客户端获得一个connectionId
。您可以尝试将HubConnection
注册为Singleton
类似
public class Startup
{
private static readonly string url = "https://localhost:44379/ChatHub";
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<HubConnection>((serviceProvider) => {
var hubConnection = new HubConnectionBuilder().WithUrl(url).Build();
hubConnection.StartAsync().Wait();
return hubConnection;
});
}
}
您不想使用依赖项注入和“我不想每次都启动HUB连接”的原因是什么?您的意思是希望在应用程序启动时始终创建并保持连接吗?通常,您可以为每个请求创建连接。
public class HomeController : Controller
{
private readonly HubConnection Connection;
public HomeController(HubConnection connection)
{
Connection = connection;
}
}