繁体   English   中英

C#SignalR:发布从后台代码更新数据的问题

[英]C# SignalR : Issues updating data from code-behind

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

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

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

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

Javascript- / FrontEnd代码:

 $(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'); }); 

Orderhub.cs代码:

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

来自前端的POST调用(触发器更新):

public HttpResponseMessage Post([FromBody] OrderViewModel newOrder)
    {
        var result = OrderServices.SaveNewOrderFromVM(newOrder);

        var context = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
        context.Clients.All.updateOrders();

        return result;
    }

除了在控制器中,您调用不带参数的updateOrders()之外,其他一切看起来都是正确的,而客户端回调则需要订单。 在您的Post操作中,您实际上需要运行:

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

我通常将SignalR集线器仅用于维护连接的客户端,以用于需要与特定客户端进行交互的场景,或者当您需要服务器上可以由客户端调用的方法时。 为了处理我所有的SignalR交互,我使用了包装器类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM