【问题标题】:How to push data to a .NET CF client?如何将数据推送到 .NET CF 客户端?
【发布时间】:2011-01-02 10:30:45
【问题描述】:

尽管可以轮询 Web 服务,但您是否知道除了使用 Exchange 服务器邮件传输之外的另一种将更改推送到移动客户端的方法?

【问题讨论】:

  • 您介意分享您提到的源代码 (POC) 吗?

标签: wcf web-services architecture compact-framework


【解决方案1】:

正如 Mark Seemann 所说:当我在 Microsoft Dynamics Mobile 团队时,我曾经为 .NET CF 做过客户端通知系统的 POC。

当时我没有找到任何开箱即用的解决方案可以做到这一点,我不想搭载 Exchange Server 连接,因为目标用户没有 AD 帐户,而且大多数确实没有使用交换服务器。所以我和你现在的情况一样。我开始寻找可能的解决方案...

我意识到服务器无法连接到客户端,因为它的 IP 地址不断变化(从 3G 变为 WiFi,失去连接等)。客户端必须连接到服务器。此外,我发现大多数网络都允许 HTTP 连接,但并不总是允许通过自定义端口进行自定义 TCP 连接。

我使用“Comet”执行从客户端 (.NET CF) 到服务器 (IIS) 的长期 http 请求,并使用此连接将通知推送到客户端。如果客户端在发出通知之前超时,它只会发出一个新请求。

在服务器端,我使用了 AsyncHttpHandler 和等待线程的组合,每秒钟检查一次连接客户端的消息。使用 AsyncHttpHandler 很重要,否则会阻塞 IIS 服务器。

POC 运行良好,证明是一种可靠的解决方案。这样做有一些缺点:如果你不小心,你会很快耗尽电池。

很遗憾,由于涉及的代码行数太多,我无法在此处发布代码,但如果您愿意,欢迎与我联系,我会通过电子邮件将我的 POC 发送给您。

【讨论】:

    【解决方案2】:

    当我在 Microsoft Dynamics Mobile 团队工作时(直到 2009 年 1 月),除了通过 Exchange Server 邮件传输之外,没有其他内置方法可以在 .NET CF 上执行此操作。

    但是,我的一位同事在移动客户端打开到服务的 HTTP 连接并使其保持打开状态时出现了峰值,由此服务有一个可以推送的开放通道。

    AFAIK,这基本上是 Exchange Server 邮件传输所做的。 IIRC,他做得很好,但我会发推特,看看我能不能让他插话。

    【讨论】:

      【解决方案3】:

      尝试查看WebSync,这是一个用于 IIS/.NET 的彗星服务器。它现在得到了完整的紧凑框架支持。

      【讨论】:

      【解决方案4】:

      以下是用于内部网络的一些选项:

      1. MSQM
      2. TcpListener

      对于选项 1,您需要安装另一块基础架构,但您会获得标准 API 和协议。

      对于第二个选项,您必须实现自己的协议。

      这两个选项都只能在封闭的环境中工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多