如何在后台轮询数据库并通过SignalR从服务器通知?

时间:2016-08-09 20:23:52

标签: asp.net-mvc-4 signalr

我目前正在使用SignalR开发实时聊天应用。实时聊天应用程序的工作方式如下:

  1. 注册用户只能与管理员通话。那里 可以是同时连接的任意数量的管理员。
  2. 每个管理员都可以随时与任何注册用户(甚至是离线用户)交谈。
  3. 聊天应用程序的用户端和管理员端位于两个不同的ASP.NET MVC应用程序中,共享同一个数据库。 (这是用户要求)
  4. 所有消息一发送就会存储在数据库中。
  5. 目前,我有两个应用程序调用SignalR服务器函数,该函数使用setInterval()从数据库中获取数据以更新客户端,但这使得使用SignalR失败了。有没有办法在服务器端使用后台任务轮询数据库,然后使用SignalR通知特定用户(接收消息的用户)?如果是这样,我该如何设置后台任务?

1 个答案:

答案 0 :(得分:0)

看起来你想要一个自下而上的通知机制(Database-Application-Client)。正如@JAG所述,您可以使用ADO.Net工具集中的SqlDependency,这样您就可以在消息表上放置一个wach,这样一旦更改就会收到通知(例如,插入消息) 。这是一个fine example。 SqlDependency不会为您提供插入/更改的实际记录 - 它只会让您知道存在更改,因此您需要设计一个查询来获取该确切记录。收到通知后,您可以查询该记录,然后从集线器调用客户端的方法并将记录作为参数传递。