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