目录
介绍
使用代码
- 下载源代码 - 968 KB
Signal-R是一个库,可实现服务器和多个客户端环境之间的实时交互。桌面或WPF应用程序使我们能够探索硬件的全部容量,但当我们需要多个客户端之间的实时连接时,我们会落后一步。谁可以并行工作。由于WPF应用程序部署在单个客户端计算机上,因此需要管理部署以避免集中式数据库锁定。相信我,无论您发送多少次有关部署的提醒,都没有人真正停止为您提供方法。那你怎么办呢?好吧,我们把他们赶出系统!!
我们使用SignalR的另一种方法是在服务器中更新数据时推送数据更新并在所有连接的客户端上执行数据重新加载。SignalR广播可以与实体框架集成,以识别更新的实体并强制在所有连接的客户端上重新加载相同的实体。
SignalR的第三个用途是在主数据或用户角色发生更改时同步服务和所有WPF客户端应用程序的缓存。当管理员进行一些应用程序配置更改或将用户添加到系统并希望将此信息推送到所有连接的客户端以使用它而无需重新打开应用程序时。
使用代码因此,在第一篇文章中,我将演示如何在WPF应用程序中设置SignalR侦听器,并使WebApi服务成为可以将消息推送到所有连接的客户端的广播中心。然后,我将演示如何通过向所有连接的客户端发送“毒丸”来使部署变得易于管理。这将强制客户端应用程序关闭。
用作广播中心的WebApi服务不必是独立的服务。在SOA中,企业使用的现有WebApi可以被增强为枢纽。在附加的解决方案中,我创建了一个充当广播中心的webapi服务。我们需要在Web API项目上安装Microsoft.AspNet.SignalR nuget包。所需的主要文件是在基础设施项目中定义的Broadcasthub.cs,它管理客户端与集线器的连接和断开连接。默认情况下,signalR托管在路径http:///signalR上。
要向所有连接的客户端发送消息,我们可以使用如下代码。实际上,可以通过跟踪connectionId。
var context = GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.PoisonPill(new PoisonPill() { Message = req.Message });
所以在这里,我们向所有客户发送PoisonPill消息。这可以从管理页面触发,当我们希望所有连接的客户端应用程序终止时,该页面可用于触发消息(不要作恶,当您想做一些可能导致死锁的服务或数据库部署时使用它)。
现在是关于在WPF应用程序上添加处理程序的部分,它将侦听由广播中心发布的消息,并在客户端应用程序上显示一个弹出窗口,通知部署,并允许用户在自动关闭客户端应用程序前60秒。
对于客户端应用程序,请参阅附件示例中带有ClientApp文件夹的代码。SignalR客户端已创建为单例实例。它是从App的OnStartup事件中初始化的。客户端初始化后,将调用使用API端点地址进行连接的Connect方法。这个SignalRClient类包含在一定时间跨度内重试连接的逻辑,以防连接失败。在Initializer内部,我们映射了我们想要订阅的各种signalR消息的处理程序。
var hubProxy = connection.CreateHubProxy("BroadcastHub");
hubProxy.On("PoisonPill",
message => Messenger.Default.Send(message));
因此,通过这种方式,多种类型的客户端可以订阅来自单个广播集线器的选择性消息。
现在在主窗口视图模型上,我们可以按如下方式附加事件处理程序:
Messenger.Default.Register(this, OnPoisonPillMessage);
所以每次广播服务器发送poisonpill消息时,都会调用“OnPoisonPillMessage”方法。现在自动关闭应用程序的逻辑在此方法中处理。
附上服务器和客户端应用程序的完整代码供您参考。
SignalR使WPF应用程序在多用户场景中更具交互性。
https://www.codeproject.com/Tips/5300866/Exploring-Signal-R-to-make-WPF-Application-Interac