SignalR:在集线器外部发送的消息未在客户端上收到
SignalR: Messages sent outside hub are not received on client
我可以从 SignalR 集线器内部发送消息,但不能从集线器外部发送消息。
以下代码不起作用:
public class MessageSender
{
private readonly ILogger<MessageSender> _logger;
private readonly IHubContext<MessageHub> _context;
public MessageSender(ILogger<MessageSender> logger, IHubContext<MessageHub> context)
{
_logger = logger;
_context = context;
}
public async Task SendTestMessage()
{
Console.WriteLine("Sending Test Message to Client");
await _context.Clients.All.SendAsync("TestMessageReceived", new SampleData());
}
}
但是下面的代码有效:
public class MessageHub : Hub
{
public async Task InitiateConnection(SampleData data)
{
Console.WriteLine($"{data.Text});
await Clients.All.SendAsync("TestMessageReceived", new SampleData());
}
}
我的客户端应用程序 (C#) 能够与服务器通信并在集线器中调用“InitiateConnection”方法,在 return 中调用客户端的“TestMessageReceived”方法工作正常。
为什么 MessageSender 无法发送消息?可能我遗漏了一些非常小的东西。
我正在使用 .Net Core,服务器和客户端都在 .Net 5
我已经解决了这个问题,对于遇到同样问题的任何人,这是我的问题所在。
我在 kestrel 服务器 运行ning 上托管 SignalR Windows 服务,但我创建了两个依赖项注入容器,一个用于 Windows 服务来执行此操作 services.AddHostedService<Worker>();
另一个 运行 kestrel 上的 Web 服务器,并像这样托管 SignalR
webHostBuilder.Configure((context, app) =>
{
app.UseRouting();
app.UseCors();
app.UseMvc();
app.UseEndpoints(endpoints => { endpoints.MapHub<MessageHub>("/myendpoint"); });
});
所以我的 MessageSender class 被 运行ning 在 Windows 服务中使用,在 _context.Clients.All
中没有任何连接
应该只有一个CreateDefaultBuilder
https://github.com/aspnet/SignalR/issues/2347
我可以从 SignalR 集线器内部发送消息,但不能从集线器外部发送消息。 以下代码不起作用:
public class MessageSender
{
private readonly ILogger<MessageSender> _logger;
private readonly IHubContext<MessageHub> _context;
public MessageSender(ILogger<MessageSender> logger, IHubContext<MessageHub> context)
{
_logger = logger;
_context = context;
}
public async Task SendTestMessage()
{
Console.WriteLine("Sending Test Message to Client");
await _context.Clients.All.SendAsync("TestMessageReceived", new SampleData());
}
}
但是下面的代码有效:
public class MessageHub : Hub
{
public async Task InitiateConnection(SampleData data)
{
Console.WriteLine($"{data.Text});
await Clients.All.SendAsync("TestMessageReceived", new SampleData());
}
}
我的客户端应用程序 (C#) 能够与服务器通信并在集线器中调用“InitiateConnection”方法,在 return 中调用客户端的“TestMessageReceived”方法工作正常。
为什么 MessageSender 无法发送消息?可能我遗漏了一些非常小的东西。 我正在使用 .Net Core,服务器和客户端都在 .Net 5
我已经解决了这个问题,对于遇到同样问题的任何人,这是我的问题所在。
我在 kestrel 服务器 运行ning 上托管 SignalR Windows 服务,但我创建了两个依赖项注入容器,一个用于 Windows 服务来执行此操作 services.AddHostedService<Worker>();
另一个 运行 kestrel 上的 Web 服务器,并像这样托管 SignalR
webHostBuilder.Configure((context, app) =>
{
app.UseRouting();
app.UseCors();
app.UseMvc();
app.UseEndpoints(endpoints => { endpoints.MapHub<MessageHub>("/myendpoint"); });
});
所以我的 MessageSender class 被 运行ning 在 Windows 服务中使用,在 _context.Clients.All
中没有任何连接应该只有一个CreateDefaultBuilder
https://github.com/aspnet/SignalR/issues/2347