【问题标题】:WCF Service <-> WPF/iOS/Android Client Communication With Rapid UpdatesWCF 服务 <-> WPF/iOS/Android 客户端通信与快速更新
【发布时间】:2011-08-24 22:59:51
【问题描述】:

概述 我正在为一个新项目做技术的介绍性决策。我们需要在一个中心位置维护业务对象并在客户端设备上查看。客户端设备将是胖客户端(WPF、Silverlight、MacOS、Linux)和移动客户端(Android、iPad/iPhone、WP7)。名义上的用例是 LAN 场景,但分布式互联网使用也是一种可能。我们需要能够让中心位置(考虑 WCF 服务)根据来自客户端的输入更新业务对象,并在所有正在查看这些对象的连接设备上快速更新这些业务对象的视图。

安全 安全性是一个低问题,此时唯一要传输的重要数据是姓名,尽管尚未做出最终决定。

基本问题 我的基本问题是:如何最好地解决这个问题?我正在考虑将 WCF 服务作为业务对象的家,但我们需要非常快速地分发更改。最好它对用户来说是即时的。对我来说,这意味着大约 1/4 秒。我只是不知道这是否可能。我假设要接触设备受众,它需要是一个基本的网络服务。以这种速率从设备进行轮询会对设备的电池寿命产生什么影响?是否有一种优雅的方式可以推送到所有这些设备?

【问题讨论】:

    标签: android wpf ios wcf windows-phone-7


    【解决方案1】:

    由于您需要非常短的更新/传播时间(1/4 秒),您需要使用非常快速的网络服务轮询,这是 IMO 无法实现的。

    对于这么短的延迟,最好的办法是使用某种网络推送技术(comet、websockets),甚至直接使用套接字。

    另外,我认为您不能推送到处于睡眠模式的设备。他们至少需要运行处理器和网络,这当然会大大缩短电池寿命。

    【讨论】:

    • 这也是我关心的问题,彼得。我的第一个想法是直接套接字,但考虑到我们想要支持的设备环境,我认为这很难处理。但如果这很容易,我想每个人都会这样做。除非提出更好的建议,否则我们可能会将轮询频率放宽到用户抱怨的程度,并使用基于 REST 的 WCF 服务执行“在用户关心时进行轮询”的方法。感谢您的意见。
    【解决方案2】:

    您也可以将 JSON 用于 WP7,在 WP7 上使用它通常会更快一些并且效率更高,尤其是在压缩时,同样在 WP7 Mango 中,您可以实现一个后台代理,该代理会根据使用情况定期(10~30 分钟)更新应用死机时的手机。

    在您的场景中,推送服务将是所有设备的理想选择,但轮询会不断消耗电池电量并且还会严重影响用户带宽。但是,您不能保证它会降落在设备上(至少在 WP7 上,您不是根据我的经验,因为设备绑定的服务有限)。 Mango 支持 Sockets,这可能是理想的选择,因为您使用的带宽很少,只要用户没有断开连接,几乎可以保证您的内容交付或设备开始轮询的标志。

    唯一需要担心的是,如果移动设备使用的是移动服务而不是 WiFi 连接,那么 1/4 秒对它们来说是相当苛刻的。据报道,WP7 的 UDP 性能存在问题,请参阅 Poor UDP performance with Windows Phone 7.1 (Mango)

    我从来没有做过这样的事情,但我正打算自己为 Mango 实现套接字,目前只是通过我的 WCF 服务使用推送服务,它提供所有内容。

    祝你好运

    【讨论】:

    • 感谢约翰的意见。所有设备的推送环境是什么样的?我假设如果我们使用它,这将是一种特定于设备的方法,每种类型的推送通知服务都有不同的服务点。 1/4 秒用于 LAN 体验 - 我们必须放宽它以用于分布式使用(仍然不确定我们是否要支持这种操作模式,典型的用例是一群人坐着围着一张桌子)。
    【解决方案3】:

    在我们的团队中,我们同样需要开发一个多平台应用,例如 iOS WP7 Silverlight 等。

    对我们而言,最佳实践是在 .NET 中使用 WCF RIA 服务以及一些端点(例如 WP7 的 SOAP 和 iOS 的 JSON)开发服务。

    数据响应速度非常快。

    【讨论】:

    • 是的 http 可以相当快,但他需要数据推送,这意味着使用 web 服务所有设备都必须不断轮询。
    • 正如彼得所说,我主要关心的是如何让客户知道更新业务对象而不会过多地消耗电池和/或带宽。
    • 在 .Net(所以 WP7 和 Silverlight)中,您可以使用 WCF Classic 将信号“推送”到强制自身重新加载数据的设备!对于 iOS,唯一的方法是使用推送通知系统
    猜你喜欢
    • 2014-02-20
    • 2010-10-21
    • 1970-01-01
    • 2014-05-29
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多