我有一个WPF应用程序,它将部署到LAN上的多个用户。此应用程序的用户将是制造公司的工厂工人,他们将使用该应用程序更新每个订单的进度。
客户还有一个ASP.NET webforms应用程序,用于输入订单等。我想在这个ASP.NET应用程序中构建的是一个屏幕,它将提供工厂工作人员进度的实时更新。我一直在关注SignalR,但我不确定是否允许我从单独的应用程序(即WPF到WebForms应用程序)发送更新。这可能吗?如果是这样,有任何交叉应用SignalR在线使用的例子吗?
谢谢!
答案 0 :(得分:1)
如果WPF和WebForms应用程序都连接到同一服务器,那么这很容易实现。
设置SignalR Hub:
public class ProgressHub : Hub {
}
加载WebForms应用程序时,以普通方式加载/显示当前进度。设置SignalR以获取进度的实时更新:
var appHubProxy = $.connection.appHub;
appHubProxy.client.progress = function (orderId, percent) {
console.log(orderId + ': ' + percent);
};
$.connection.hub.start()
WPF应用程序调用服务器来更新进度(使用例如WebAPI),在此处理程序中调用signalr clients进程方法:
public class ProgressController : ApiController {
public void Post(string orderId, int percent) {
// <Save progress to DB, etc>
// Get instance of the SignalR ProgressHub context
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
// Invoke the progress method on all connected clients.
// You probably want to use Groups to only send customers
// events for its own orders
hubContext.Clients.All.progress(orderId, percent);
}
}
或者您可以让WPF使用.NET SignalR API来调用Hub中的方法:
public class ProgressHub : Hub {
public void Progress(string orderId, int percent) {
// <Save progress to DB, etc>
// Invoke the progress method on all connected clients.
// You probably want to use Groups to only send customers
// events for its own orders
Clients.All.progress(orderId, percent);
}
}
答案 1 :(得分:1)
SignalR客户端是标准SignalR位集的一部分,可让您直接在.net桌面应用程序中构建信号器支持。
请参阅http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client
您可以毫无问题地与JavaScript网页客户端结合使用。