服务器后端的更新没有发布到web客户端

本文关键字:web 客户端 后端 更新 服务器 | 更新日期: 2023-09-27 18:05:34

我正在创建一个后端服务,它将新文章写入数据库,并在完成后将更改发布到前端层的侦听客户端。我的问题是这些BE更新没有触发前端层的订阅者。

直接测试TaskHub (signalR后端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");
            }
        });
    }

服务器后端的更新没有发布到web客户端

在我看来,这是因为当你在客户端声明侦听器时,你在第一个字母中使用大写。这种行为在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

希望这对你有帮助