asp.net - 根据 SQL Server 列或行更新将数据传输到特定页面上的客户端

标签 asp.net http iis sql-server-2012

我想使用 ASP.NET 和 SQL Server 实现一些特定的目标。例如,我有几个页面,每个页面都有自己的标识(即 id=1、id=5)。此外,我们假设对于这些 id 中的每一个,我在数据库中都有一行:

简而言之,我想要实现的是:在利用网络套接字(持久连接)的同时,将数据库更改间接推送到特定页面上的特定客户端。

例如:

第 1 行:

id = 1

名字 = 我的名字 1

第 2 行:

id = 2

名字=我的名字2

我想做的是,当特定行甚至列中的特定值发生变化时,它会触发一个事件,该事件可以将特定数据仅发送给那些正在访问具有特定 id 的页面的客户端改变了。

例如:如果第 1 行列名称从 'name1' 更改为 'name2',并且主键的 ID 为 5,我希望所有访问 id=5 页面的人都在客户端接收事件边。

我想阻止自己开发一个客户端代码,该代码将有争议地向 Web 服务发送请求并通过 ID 查询特定行以查看它是否已更新或特定列值已更改。

我想到的一个解决方案是将键/值保存在内存中(即内存缓存),就像键代表 id,值将是最后更新的日期时间。然后我可以查询内存,例如,如果 [5, 05/11/2012 12:03:45] 我可以通过保存上次我在客户端查询内存的时间来知道它们的数据是否是上次更新的,并且比较日期。如果客户端日期时间值比内存中键/值中的值旧,那么我将再次查询数据库。

但是,它仍然是一种被动的方法。

让我画出它应该如何工作:

  1. 客户端和服务器具有持久连接[可以使用 ASP.NET 4.5 套接字协议(protocol)完成]

  2. 服务器知道区分来自不同页面的连接,这些连接具有不同的查询字符串,例如 id=1、id=2 等。我想到的一个选择是在内存中创建一个数组存储每个连接字符串 ID 值的连接 ID。例如:{1: 2346,6767,87878, 2:876,8765,3455}。 1 和 2 是页面的标识(即 id=1,id=2),其他值是我使用 ASP.net 4.5 获得的持久连接的连接 ID

  3. 主键值 id=5 的行中的列值将其列“count”从值“1”更新为“2”。

  4. 触发器调用函数并传递已更改行的 ID(假设值为 X)。我更希望能够同时发送特定列的值(我选择的某些列)[这是使用 CLR 触发器完成的]

  5. 该函数有一个连接列表,用于访问 ID 值为 X(数字)的页面的客户端

  6. 服务器向客户端发送列值,或者如果不可能,则只发送 true 或 false,通知客户端该行已发生更改。

到目前为止已解决:

1] 可以使用 ASP.NET 4.5 套接字协议(protocol)完成

4] 使用 CLR 触发器,我可以拥有一个函数,该函数获取已更改的特定行的列数据和 ID。

我正在使用 ASP.NET 4.5 开发我的应用程序。

谢谢

最佳答案

Sql Server Service Broker 可以满足您的大部分需求。

Service Broker 允许在 sql server 中进行异步消息传递。由于它是异步的,所以我们将功能分成两部分。

第一部分是表上的触发器,它将消息写入服务代理队列。这只是简单的 T-SQL,而且相当简单。消息的有效负载是您可以转换为 varbinary(max) 的任何内容。它可以是 xml、包含逗号分隔值的 varchar(100) 或其他一些表示形式。

第二部分是消息的处理。您发出 transact-sql RECEIVE 语句以从队列中获取下一条消息。这个语句阻塞直到有东西到达。一个队列可以有多个对话,因此每个客户端都会收到自己的通知。

从概念上讲,它可以像这样工作(客户端是 asp.net 代码):

  1. 客户端打开 Service Broker 对话。
  2. 客户发送消息“我对第 3 页感兴趣”
  3. 客户端执行无限期阻塞的 RECEIVE
  4. UPDATE 更改 page=3 的数据
  5. 表上的触发器向对 Page=3 感兴趣的每个 session 发送消息
  6. 客户端接收消息,并将更新的数据发送到网络浏览器。

不需要 CLR,不需要定期轮询数据库。

关于asp.net - 根据 SQL Server 列或行更新将数据传输到特定页面上的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576103/

相关文章:

javascript - 获取 0 作为状态

visual-studio - IIS 调试 : Unable to open script document

iis - 这些 IIS 绑定(bind)是什么,它们的目的是什么?

asp.net - 访问报表服务器时出现 AppPool 权限问题

http - ballerina:将参数传递给客户端请求

asp.net - Aspx 文件中缺少 Visual Studio 展开/折叠按钮

asp.net - .NET Core 2.0 cookie 身份验证 - 不重定向

asp.net - 带有 ASP.NET Web 服务的 jQuery AutoComplete (jQuery UI 1.8rc3)

http - angular2 如何将来自 http.get 的响应头数据存储在额外变量中?

asp.net - "Cannot read configuration file"从物理路径为网络文件夹的IIS虚拟目录访问镜像时出错