C# SignalR:从代码隐藏更新数据时出现问题



.

我有一个后端应用程序(运行 .net c#(和一个在节点和 VUE 上运行的前端应用程序.JS 2。

前端正在发布新订单,后端解决方案中的"仪表板"应使用 SignalR 自动获取新的传入订单。

我有大约 90% 的正确率,但在使用数据更新客户端时遇到问题。(当前代码实际上是在循环中运行的,一直在获取新数据(。

那么我如何以正确的方式从后端"强制"客户端更新呢?

Javascript-/前端代码:

$(document).ready(function() {
    // start hub
    var orderHub = $.connection.orderHub;
    $.connection.hub.start().done(function () {
        console.log("Orderhub initialized...");
    });
    // end hub
    var OrdersModel = function() {
        var self = this;
        self.orders = ko.observableArray();
    }
    var ordersmodel = new OrdersModel();
    orderHub.client.updateOrders = function (orders) {
        orderHub.server.getOrders().then(
            result => {
                ordersmodel.orders(result);
            }
        ); 
        console.log("Getting updated orders : " + orders);
    }
    ko.applyBindings(ordersmodel, document.getElementById("ordersContainer"));
    $.get('api/Order',
        function (data) {
            ordersmodel.orders(data);
            console.log("API kall - GetOrders");
        }, 'json');
});

订单中心.cs代码:

public void GetOrders()
    {
        var loggedInCompany = 2;
        var orders = OrderServices.GetNewestOrdersAsVM(loggedInCompany);
        Clients.All.updateOrders(orders);
    }

来自前端的开机自检呼叫(触发更新(:

public HttpResponseMessage Post([FromBody] OrderViewModel newOrder)
    {
        var result = OrderServices.SaveNewOrderFromVM(newOrder);
        var context = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
        context.Clients.All.updateOrders();
        return result;
    }

一切看起来都正确,除了在你的控制器中,你调用updateOrders()没有参数,而你的客户端回调需要订单。在发布操作中,您实际上需要运行:

var loggedInCompany = 2;
var orders = OrderServices.GetNewestOrdersAsVM(loggedInCompany);
var context = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
context.Clients.All.updateOrders(orders);

我通常仅将 SignalR 中心用于维护连接的客户端,以便在需要与特定客户端交互的情况下,或者当需要在服务器上使用可由客户端调用的方法时。为了处理我所有的 SignalR 交互,我使用包装类。

最新更新