1

场景如下:

  1. 客户端 A 和客户端 B 都登录到应用程序。
  2. 客户端 A 和客户端 B 填充了他们的网格视图(显示上传的文件)。
  3. 客户端 A 将文件上传到数据库。
  4. 客户端 B 必须检测到添加了数据(客户端 A 上传的文件)并再次重新填充网格视图。

我需要知道第 4 步有效的流程。我阅读了有关使用SqlDependency并查看了这篇文章http://rusanu.com/2007/11/01/remove-pooling-for-data-changes-from-a-wcf-front-end/
但是如果我不是错了这篇文章使用了SQL Server 2008中不推荐使用的Notification Services。我也想知道当检测到数据库中的查询结果发生变化时如何在客户端注册代码。谢谢

已编辑
当前选项是 SqlDependency、触发器、WCF、观察者模式。如果有人知道这些解决方案中的任何一个是否可以/不能在我的场景中实施,请随时发表评论并告诉我。

4

2 回答 2

2

您可以在应用程序层执行此操作。您可以使用集中方法/类来更新数据库中的文件。然后您可以注册观察者(观察者模式)以获取任何更新的通知。通过这种方式,您可以在数据库中的数据更改时刷新多个客户端。

仅当其他进程或直接数据库更新没有数据更改时,上述建议才有效。

于 2013-07-21T11:01:37.547 回答
1

你错了,文章不使用通知服务。文章中使用了以下内容:

  • 顶部有一个客户端调用的 Web 服务(WCF 双工通道);客户端有一个回调,当数据发生变化时会调用它;这也可以与数据库轮询一起使用;另一方面,本文使用更先进的技术来对数据更改做出反应
  • 在底层数据访问层,应用服务器使用普通的ADO.Net连接来使用SqlDependency;使用这种技术,订阅者附加一个事件,当数据改变时该事件会被触发;然后服务器将立即将更新的数据发送给客户端
  • 在数据库端本身,SqlDependency 内部使用 SQL Server Service Broker 来避免轮询;如果您知道如何操作 Service Broker 对象,则可以自己手动执行此操作

因此,这些技术都没有使用已弃用的通知服务。该文章中描述了您需要开始的所有内容(即使您使用 SQL Server 2012)。

于 2013-07-21T13:08:08.970 回答