服务器后端中的更新未发布到 Web 客户端
Updates in the server backend are not being published to the web client
我正在创建一个后端服务,将新文章写入数据库,完成后,将更改发布到前端层的监听客户端。我的问题是这些 BE 更新没有触发我在前端层的订阅者。
直接测试 TaskHub(signalR 后端 asp.net 集线器)层似乎有效,但 UI 未更新。各层的相关代码如下(我可能遗漏了一两件事 - 问问是否有问题)。
事物的顺序:
从在客户端调用它开始:
var taskHub = $.connection.taskHub;
$.connection.hub.start();
然后我有这个 Knockout 函数来做更新:
self.AddQuickNews = function() {
taskHub.server.AddAndUpdateQuickNews(self.newContent()); /just a string
}
在 ASP.NET 后端,我有以下方法来处理这个问题:
public void AddAndUpdateQuickNews(string newContent)
{
ArticleServices.AddQuickNews(newContent); //add a new record
var quicknews = ArticleServices.GetQuickNews(); // get all records
Clients.All.updateQuickNews(quicknews); // pass back to clients
}
在客户端处理结果:
taskHub.client.UpdateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
XHR 调用测试后端
self.AddQuickNews = function () {
var url = 'api/MainPage/AddQuickNews';
var params = "?content=" + self.newContent();
$.ajax({
url: url + params,
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
taskHub.server.updateQuickNews(data);
},
error: function () {
//alert("error");
}
});
}
我的看法是,当您在客户端声明侦听器时,您在第一个字母中使用大写。 SignalR
中不允许此行为。你必须改变你的听众变成:
taskHub.client.updateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
taskHub.server.addAndUpdateQuickNews(self.newContent()); /just a string
希望对您有所帮助
我正在创建一个后端服务,将新文章写入数据库,完成后,将更改发布到前端层的监听客户端。我的问题是这些 BE 更新没有触发我在前端层的订阅者。
直接测试 TaskHub(signalR 后端 asp.net 集线器)层似乎有效,但 UI 未更新。各层的相关代码如下(我可能遗漏了一两件事 - 问问是否有问题)。
事物的顺序:
从在客户端调用它开始:
var taskHub = $.connection.taskHub;
$.connection.hub.start();
然后我有这个 Knockout 函数来做更新:
self.AddQuickNews = function() {
taskHub.server.AddAndUpdateQuickNews(self.newContent()); /just a string
}
在 ASP.NET 后端,我有以下方法来处理这个问题:
public void AddAndUpdateQuickNews(string newContent)
{
ArticleServices.AddQuickNews(newContent); //add a new record
var quicknews = ArticleServices.GetQuickNews(); // get all records
Clients.All.updateQuickNews(quicknews); // pass back to clients
}
在客户端处理结果:
taskHub.client.UpdateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
XHR 调用测试后端
self.AddQuickNews = function () {
var url = 'api/MainPage/AddQuickNews';
var params = "?content=" + self.newContent();
$.ajax({
url: url + params,
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (data) {
taskHub.server.updateQuickNews(data);
},
error: function () {
//alert("error");
}
});
}
我的看法是,当您在客户端声明侦听器时,您在第一个字母中使用大写。 SignalR
中不允许此行为。你必须改变你的听众变成:
taskHub.client.updateQuickNews = function (quicknews) {
quicknewsmodel.quicknews(quicknews);
console.log("SignalR -> " + quicknews);
//console.log("Fra UpdateMatches: " + matches);
}
taskHub.server.addAndUpdateQuickNews(self.newContent()); /just a string
希望对您有所帮助