【问题标题】:Windows Forms & WCF - Client Application CommunicationWindows 窗体和 WCF - 客户端应用程序通信
【发布时间】: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


    【解决方案1】:

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

    这完全取决于服务器需要将多少信息发送回客户端。我了解您说这些信息将用于他们更新用户界面。然而,他们似乎可能并不都同时需要相同数量的信息。例如,如果西部地区的信息发生了变化,可能所有 1000 个客户都想知道发生了变化,他们可能都想更新西部地区的摘要级信息,但可能只有 1/4需要查看更改的详细信息。

    如果是这种情况,那么我建议回调只提供关于 什么 已更改的信息,主要是在摘要级别。让那些对变更细节感兴趣的客户询问细节。您甚至可以提供最高一或两级层次结构的所有详细信息,然后对于其余部分,只需包含“这在时间发生变化”的信息。这样,根据特定客户查看的层次结构级别,客户可以询问或不询问。

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

    您可能还希望将某些点对点绑定用于某些任务。也许您业务特定领域的客户想了解彼此的工作内容——诸如此类。

    【讨论】:

    • 您谈到了我们讨论过和正在考虑的许多事情,例如批量更新。您强调我没有完全描述环境,但它是地理上相邻建筑物中同一物理 LAN 上的大约 1,000 个用户。数据不跨越多个垂直区域,所有用户几乎都在查看相同的数据,只是一些可以编辑项目,大多数不能,个人组织模块除外。我认为您的回答有帮助,所以 +1,但我会看看是否有人尝试过这个并知道任何性能/资源问题。谢谢。
    • 太棒了。事实上,我很想知道这个结果;至少你可以做的任何概念证明。对你来说,写关于(提示,提示)的博客是一件很棒的事情。
    猜你喜欢
    • 2010-09-25
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多