我们正在开发一个将安装在大约 1,000 名员工个人电脑上的 Windows 窗体应用程序。用户可以同时运行应用程序的多个实例。客户端都在一个 Intranet 上。
应用程序中的更改可能会导致数据库记录更改,而这些更改又必须传达给其他客户端,以便更新它们的 UI。
我们的团队讨论了两种不同的方法:
1.组播包
源客户端修改记录,然后发送一个多播数据包,其中的有效负载发生了变化。其他客户端接收到这个并获取指定的数据。我们需要考虑没有收到数据包的情况,然后主动检索数据。
此时我的问题是客户端如何知道它没有收到数据包?(不知道你不知道什么)这将我们带到某种事件日志中,其中包含数据库中的时间戳,并且 UI 控件跟踪它们的最后一次更新时间。他们成为焦点,检查他们的时间戳,并根据需要进行更新。
其他人说 UI 元素每次进入焦点时都会重新加载(想想 Outlook 中的模式,将控件带到带有 CAB 的堆栈工作区的前面)。并且多播是为了更新他们当前上下文已经改变的客户端。如果他们错过了它,他们将使用陈旧的数据,直到他们改变模式并回来。
2. WCF 和回调
客户端注册 WCF 合同以通过 tcp 绑定进行回调。与此相关的主要技术问题是服务器维护许多打开的套接字。我们已经阅读了它是如何在传统意义上不打开的,它被置于休眠状态最多 90 秒,然后在那时重新建立。我们还阅读了有关 Windows 2003 Server 机器可以处理的最大打开连接数,以及如何在注册表中修改它。
如果我们有 1,000 个到服务器的开放套接字连接,这会分崩离析吗?
如果有人遇到过同样的情况并尝试或评估过 WCF 方法,我们很乐意听到。