我正在尝试使用SignalR向所有连接的客户端发送消息。
我已经找到了几个例子,并添加了我认为是所有必需的部分。我确实成功地让我的客户端连接到了我的集线器。我无法让我的服务器连接到我的集线器并向所有连接的客户端发送消息。
当我调用DatabaseChangeListener::Notify()时,它从未命中Hub中的代码。
有没有人能建议我还需要做什么?
我在React和Redux的web应用程序中使用.NET Core2.1预览版2。
我正在使用SignalR 1.0.0-预览版2-最终版
我正在使用SignalR.Client 1.0.0-预览版2-最终版
在Startup.cs中
public void ConfigureServices(IServiceCollection services)
{
// remove all other code for this question
services.AddSignalR();
}
public void Configure(IApplicationBuilder app)
{
// remove all other code for this question
app.UseSignalR(routes =>
{
routes.MapHub<SignalRHub>("/hubs/update");
});
}我的中心
[Authorize]
public class SignalRHub : Hub
{
public async Task Send(string message)
{
await Clients.All.SendAsync("SendMessage", Context.User.Identity.Name, message);
}
}通知客户端的类
public class DatabaseChangeListener : IDatabaseChangeListener
{
private readonly IHubContext<SignalRHub> _hubContext;
public DatabaseChangeListener(IHubContext<SignalRHub> hubContext)
{
_hubContext = hubContext;
}
public void Notify()
{
_hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo");
}
}发布于 2018-07-13 07:23:20
您需要通过客户端建立到集线器的连接,然后通过使用_hubContext,您应该能够根据与集线器建立的连接向客户端发送消息。
使用JS从客户端连接到集线器。
const connection = new signalR.HubConnectionBuilder()
.withURL("/YourHub")
.build();然后,在建立连接之后,您还可以使用JS创建从服务器向客户端发送消息的方法。
connection.on("SendMessage", message => {
document.getElementById("IdOfElementToDisplayMessage").innerHTML = message;
});最后添加:
connection.start().catch(err => console.error(err.toString()));现在,您已经通过客户端建立了到集线器的连接,现在可以从IHubContext引用到集线器的连接。要将消息从服务器发送到客户端,您可以使用_hubContext。
在本例中,您可以调用Notify(),然后调用await _hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo");,这将把您的消息发送到在JS:connection.on("SendMessage", message => { ...中创建的SendMessage方法
如果您的_hubContext变量在执行期间为null,则需要检查IHubContext的注入。
https://stackoverflow.com/questions/49889722
复制相似问题