我正在.Net 4.0 中用 C# 编写一个 Windows 服务来实现以下功能:
在每晚的设定时间,应用程序连接到 SQL Server,打开一个用户表,并为每条记录检索用户的 IP 地址,进行 WCF 调用到用户的 PC 以确定它是否可用于交易并将记录插入到状态表中(带有 y/n 和错误,如果有的话)。
处理完所有用户后,该应用程序将读取 State 表中 IsPcAvailable = true 的每条记录,从另一个表中检索该用户的报告列表,并为每个报告从 Enterprise doc 存储库中获取报告,通过调用用户的 PC WCF 并将报告推送到他们的硬盘上,然后将状态表更新为成功。
如果在 1 个应用服务器上运行单线程,则上述场景很容易编写代码;但由于冗余和性能,将至少有 2 个应用服务器同时执行完全相同的事情。
那么如何确保每个用户只在用户表中处理一次,然后是状态表(同样的问题)作为获取报告并将它们推送到全国各地的 PC 是一个漫长的过程。最佳情况下,应用程序应该是多线程的,例如,在 2 台服务器上运行 10 个线程来处理所有用户。
我更喜欢 C# 解决方案,因为我不是数据库专家 :) 我发现最接近我的问题的是:
SQL Server Process Queue Race Condition - 它使用 SQL 代码
和实体框架的多线程问题,我很可能是否必须向下一层并使用 ADO.net?