因此,我遵循了MS站点上关于构建SignalR应用程序的快速指南:SignalR App
我想我可以使用一个本地API来实时观察添加一行后计数的变化。我使用AJAX实现了以下目的:
function getALL() {
$.ajax({
url: 'http://localhost:8080/api/GetCount',
contentType: 'application/json ; charset:utf-8',
type: 'GET',
success: function (data) {
console.log(data);
document.getElementById("messageList").innerHTML = data[0].Count;
}
});
}
当然,使用以下命令启动hub:var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("ReceiveMessage", function () {
getALL();
});
connection.start().then(function () {
getALL();
connection.invoke("SendMessage").catch(function (err) {
return console.error(err.toString());
});
}).catch(function (err) {
return console.error(err.toString());
});
现在,上面的代码可以正常工作,并在第一次向我显示数据,但是当我添加另一行时,什么也没有发生。我遗漏了什么?MS示例中的onclick事件起作用。但如果我试图在没有事件的情况下加载它,就不会。
我的中心:
public class ChatHub : Hub
{
private IHubContext<ChatHub> _hubContext;
public ChatHub(IHubContext<ChatHub> hubContext) { _hubContext = hubContext; }
public async Task SendMessage()
{
await _hubContext.Clients.All.SendAsync("ReceiveMessage");
}
}
}
我把AJAX添加到错误的位置了吗?我的hub是否缺少实体模型?如果是这样的话,当我调用本地API时为什么会这样呢?
我还按照建议在Startup.cs文件中加载了集线器:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
endpoints.MapFallbackToPage("/_Host");
});
我也在用net Core 3.1尝试这一点。任何建议都是有帮助的。我认为这将是一个简单的例子修改,但我还没有它的运气。谢谢你们所有人。
发布于 2020-02-18 05:36:09
当发生如下更改时,您需要通知集线器:
connection.invoke("SendMessage").catch(function (err) {
return console.error(err.toString());
});
而且您不是在启动连接之后需要它,而是在每次添加一行之后。Edit:向您展示一下所需的内容: 1.您需要在signalR-Client中创建一个事件,在此添加行并运行之前的代码。2.你需要一个(第二个或相同的) signalR-Client,它会被通知,就像你已经有的一样。
如果您只直接添加一行,则无法在数据库中看到更改。您必须在Frontensegeln中添加行,并在客户端应用程序中通知Hub。
https://stackoverflow.com/questions/60270559
复制相似问题