0

我项目的总体目标是从多个 911 调度中心收集当前的紧急事件信息,并通过 Web 服务将该信息发送到我们的服务器,然后服务器将显示我们地区的紧急事件列表。我目前在每个调度中心收集数据的方式是这样的:

  • 调度中心运行着某种数据库服务器,用于存储所有事件信息
  • 我在数据库中设置了一个查询,它以 xml 格式返回所有当前的紧急事件
  • 我有一个 Windows 服务,每 3 秒运行一次该查询(实际上是一个存储过程),然后将该数据(xml)发送到我们的网络服务
  • 当我们的服务器接收到信息时,它会删除(从我们的数据库,而不是调度中心)所有当前的事件信息,并用“新”数据替换它

这种方法的问题是我们发送了大量的冗余数据。我想做的只是发送自上次运行 sproc 以来已更改的数据库行。我的想法是让我的 Windows 服务做这样的事情。运行存储过程并将结果存储在某种数组/字典中。下一次运行 sproc(3 秒后)是将新结果与现有数组进行比较,只提取差异并发送它们......想将数据作为 JSON 而不是 XML 发送到我们的 web 服务。 . 想知道人们有什么想法才能最好地完成这个(不一定是特定的代码,而是更多的概述......)使用 C#......

编辑

经过更多调查后,我认为我想要的是类似于“数据集到列表”类型的过程......这将允许我将每条记录转换为自定义对象,然后创建这些对象的列表...... . 然后可以将对象列表存储在内存中,并且可以使用下一组数据(3 秒后)与原始列表进行比较以查看是否有任何更改... windows 服务不一定会调用 SQL Server sproc所以这个代码需要与其他数据库服务器一起工作......应该注意的是,每个数据集中返回的记录数最多可能只有10-15......我们不是在谈论数千记录...

4

2 回答 2

0

您可以在所涉及的表上设置CDC ,并查找自上次轮询以来发生的更改。当然,这会在您和您的存储过程之间引入一个层,但事实就是如此。

于 2013-10-20T15:17:12.913 回答
0

您要运行的新 Windows 服务也会产生一些问题,因为它是 911 呼叫,您可以存储上次提取数据的最后时间和日期。然后,您可以收集从该日期和时间到最近时间的数据,每 3 秒执行一次,然后您将只有更改的数据行。你也应该使用 JSON 格式而不是 XML(更瘦的格式)我还建议你使用 REST API 而不是 SOAP

您还可以考虑SQL 任务

于 2013-10-20T14:44:19.110 回答