【发布时间】:2017-01-12 12:40:10
【问题描述】:
我正在创建一个后端服务,它将新文章写入数据库,并在完成后将更改发布到前端层的监听客户端。我的问题是这些 BE 更新没有触发我在前端层的订阅者。
直接测试TaskHub(signalR backend asp.net hub)层似乎工作正常,但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");
}
});
}
【问题讨论】:
-
由于 BE 逻辑似乎工作正常,问题很可能只是与设置发布者和订阅者有关。
-
其他客户端方法是否有效?
AddAndUpdateQuickNews方法是否在Hub类中?
标签: c# asp.net knockout.js websocket signalr