我在控制台上有一个自托管的asp.net核心应用程序。我可以从C#Windows Forms客户端发送消息。但是我想在服务器类中的任何位置向客户端发送消息。没有一次消息。所以我需要hubcontext实例才能重复使用它。
我使用过IHubContext工具,但是使用集线器上下文时却收到NullReference异常。
这是我的集线器。
public class UniveraHub : Microsoft.AspNetCore.SignalR.Hub
{
public string GetConnectionId()
{
return Context.ConnectionId;
}
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("ReceiveMessage", message);
}
}
这是我的启动课程
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseSignalR(routes =>
{
routes.MapHub<UniveraHub>("/UniveraHub");
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddScoped<MyHubHelper>();
}
}
这是我的HubHelper类
public class MyHubHelper
{
private readonly IHubContext<UniveraHub> _hubContext;
public MyHubHelper(IHubContext<UniveraHub> hubContext)
{
_hubContext = hubContext;
}
public MyHubHelper()
{
}
public void SendOutAlert(string msg)
{
_hubContext.Clients.All.SendAsync("ReceivedMessage", msg);
}
}
该program.cs使用我的帮助程序类向客户端发送消息
MyHubHelper helper = new MyHubHelper();
helper.SendOutAlert("Hi from server!");
答案 0 :(得分:1)
在Program.cs
中,您可以像下面这样使用:
public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args)
.Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var helper = services.GetRequiredService<MyHubHelper>();
helper.SendOutAlert("Hi from server!");
}
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}