C# SignalR:从代码隐藏更新数据的问题
Posted
技术标签:
【中文标题】C# SignalR:从代码隐藏更新数据的问题【英文标题】:C# SignalR : Issues updating data from code-behind 【发布时间】:2017-11-16 19:26:38 【问题描述】:.
我有一个后端应用程序(运行 .net c#)和一个在 node 和 VUE.JS 2 上运行的前端应用程序。
前端正在发布新订单,后端解决方案中的“仪表板”应使用 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;
【问题讨论】:
这里有一篇文章展示了如何订阅事件:docs.microsoft.com/en-us/aspnet/signalr/overview/…。重要的是要记住,在开始连接之前您至少需要订阅一个事件 【参考方案1】:这一切看起来都是正确的,除了在您的控制器中,您调用 updateOrders()
没有参数,而您的客户端回调需要订单。在您的 Post 操作中,您实际上需要运行:
var loggedInCompany = 2;
var orders = OrderServices.GetNewestOrdersAsVM(loggedInCompany);
var context = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
context.Clients.All.updateOrders(orders);
我通常使用我的 SignalR 集线器来维护连接的客户端,以应对需要与特定客户端交互的场景,或者当您需要服务器上可以由客户端调用的方法时。为了处理我所有的 SignalR 交互,我使用了一个包装类。
【讨论】:
以上是关于C# SignalR:从代码隐藏更新数据的问题的主要内容,如果未能解决你的问题,请参考以下文章
更新 knockout.js 和 SignalR 库后,knockout-mapping js 不会更新视图中的列表