2009-07-17 49 views
1

我们正在开发一个Windows Forms应用程序,该应用程序将安装在约1,000名员工个人电脑上。用户可以同时运行应用程序的多个实例。客户端都在一个内部网上。Windows Forms&WCF - 客户端应用程序通信

应用程序中的更改可能会导致数据库记录更改,而这些更改必须传递给其他客户端,以便更新其UI。

我们的团队已经谈到了两种不同的方法:

1.多播数据包

源客户端修改记录,然后与东西已经改变有效载荷发出一个组播数据包。其他客户端接收并获取指定的数据。我们需要说明数据包未收到时的情况,并回退到主动检索数据。

我现在的问题是客户如何知道它没有收到数据包? (不知道你不知道的是什么)这会将我们带到某种事件日志中,并在数据库中添加时间戳,并且UI控件会跟踪它们上次更新的时间。他们开始关注,检查他们的时间戳,并根据需要进行更新。

其他人表示,UI元素在每次焦点时都会重新加载(思考Outlook中的模式,将控件带到CAB的堆栈工作区前端)。多点传送是为了更新当前上下文已经改变的客户端。如果他们错过了,他们会使用陈旧的数据,直到他们改变模式并回来。

2. WCF和回调

客户注册在TCP绑定回调WCF合同。与此有关的主要技术问题是服务器维护许多开放式套接字。我们已经阅读了它在传统意义上是如何不公开的,它最多可以休眠90秒,然后在那个时候重新建立。我们还了解了Windows 2003 Server计算机可以处理的最大打开连接数以及如何在注册表中修改这些连接。

如果我们有1000个打开的套接字连接到服务器,这是否会崩溃?

如果有人遇到过这种情况,并尝试或评估过WCF方法,我们很乐意听到它。

回答

1

我还没有实现这样的情况。不过,我认为其中一个双工绑定不一定会有很高的开销。

这一切都取决于服务器需要发送回客户端的信息量。我了解你说这些信息将用于他们更新他们的用户界面。然而,他们似乎可能并不都需要同一时间同样数量的信息。例如,如果有关西部地区的信息发生了变化,所有1000个客户可能想知道有变化,他们可能都希望更新有关西部地区的汇总级别信息,但可能只有其中的1/4需要查看更改的详细信息。

如果是这种情况,那么我建议回调只提供有关什么已更改的信息,主要是在汇总级别。让那些对变更细节感兴趣的客户要求详细信息。您甚至可以提供最高一级或两级层次结构的所有详细信息,其余的仅包括“时间”更改的信息。这样,根据特定客户的等级级别,客户可以询问或不询问。

如有必要,您可以一起批量更新。如果客户端只需要每秒更新一次,那么您可以累积最后一秒的更改并一次全部发送。

您可能还想为某些任务使用某些对等绑定。也许在您的业务特定领域的客户想知道对方正在处理什么 - 这类事情。

+0

您触及了我们讨论过并正在考虑的许多事情,例如批处理更新。您强调我没有完全描述环境,但它在地理位置相邻的建筑物中的同一物理LAN上大约有1,000个用户。数据没有跨越多个垂直区域,所有的用户都在查看相同的数据,只有一些用户可以编辑项目,大多数用户不能,例外是个人组织模块。我认为你的答案有帮助,所以+1,但我会看看是否有人试过这个,并知道任何性能/资源问题。谢谢。 – blu 2009-07-17 18:38:07

+0

太好了。事实上,我很想知道这个结果;至少可以做任何概念验证。博客(提示,提示)对你来说是件好事。 – 2009-07-17 18:50:02

相关问题