SignalR - 交叉应用程序使用

时间:2013-12-22 10:22:58

标签: asp.net webforms signalr

我有一个WPF应用程序,它将部署到LAN上的多个用户。此应用程序的用户将是制造公司的工厂工人,他们将使用该应用程序更新每个订单的进度。

客户还有一个ASP.NET webforms应用程序,用于输入订单等。我想在这个ASP.NET应用程序中构建的是一个屏幕,它将提供工厂工作人员进度的实时更新。我一直在关注SignalR,但我不确定是否允许我从单独的应用程序(即WPF到WebForms应用程序)发送更新。这可能吗?如果是这样,有任何交叉应用SignalR在线使用的例子吗?

谢谢!

2 个答案:

答案 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网页客户端结合使用。