服务器后端中的更新未发布到Web客户端

时间:2016-09-05 07:20:21

标签: c# asp.net knockout.js websocket signalr

我正在创建一个后端服务,它将新文章写入数据库,并在完成后,在前端层发布对侦听客户端的更改。我的问题是这些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");
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

我看到它的方式,因为当你在客户端声明监听器时,你在第一个字母中使用大写字母。 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

希望这会对你有所帮助

相关问题