【问题标题】:SignalR - cross application useSignalR - 跨应用程序使用
【发布时间】:2013-12-22 10:22:58
【问题描述】:

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

客户还有一个 ASP.NET 网络表单应用程序,用于输入订单等。我想在这个 ASP.NET 应用程序中构建一个屏幕,可以实时更新工厂工人的进度。我一直在为此寻找 SignalR,但我不确定它是否会让我从单独的应用程序(即 WPF 到 WebForms 应用程序)发送更新。这可能吗?如果是的话,有没有在线使用跨应用 SignalR 的示例?

谢谢!

【问题讨论】:

    标签: asp.net webforms signalr


    【解决方案1】:

    有一个 SignalR 客户端,它是 SignalR 位标准集的一部分,可让您将信号器支持直接构建到 .net 桌面应用程序中。

    http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client

    您可以毫无问题地将它与 JavaScript 网页客户端结合使用。

    【讨论】:

      【解决方案2】:

      如果 WPF 和 WebForms 应用程序都连接到同一台服务器,那么这很容易实现。

      设置 SignalR 集线器:

      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),在此处理程序中调用信号器客户端进度方法:

      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 来调用集线器中的方法:

      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);  
          }
      }
      

      【讨论】:

      • 太好了,谢谢!那么 Hub 会在 Web 应用程序中还是在 WPF 项目中?
      • 集线器将在服务器上
      猜你喜欢
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多