C# CF应用程序与服务器的双向通信

C# CF应用程序与服务器的双向通信,c#,wcf,web-services,compact-framework,polling,C#,Wcf,Web Services,Compact Framework,Polling,现场使用PDA的用户将生成消息并发送到服务器;服务器端的用户将生成需要发送到PDA的消息 消息位于应用程序和服务器代码之间;不是100%用户输入的数据。也就是说,我们将在表单中捕获一些数据,添加GPS位置、时间日期等,并将其发送到服务器 服务器可能会向我们发送诸如PDA应用程序中使用的数据库记录更新、用户消息等消息 对于从PDA到服务器的消息,这很简单。PDA向服务器发起呼叫并传递数据。目前正在服务器端使用web服务,并在PDA上“添加新的web参考”和相关代码 我正在努力及时地将信息从服务器发

现场使用PDA的用户将生成消息并发送到服务器;服务器端的用户将生成需要发送到PDA的消息

消息位于应用程序和服务器代码之间;不是100%用户输入的数据。也就是说,我们将在表单中捕获一些数据,添加GPS位置、时间日期等,并将其发送到服务器

服务器可能会向我们发送诸如PDA应用程序中使用的数据库记录更新、用户消息等消息

对于从PDA到服务器的消息,这很简单。PDA向服务器发起呼叫并传递数据。目前正在服务器端使用web服务,并在PDA上“添加新的web参考”和相关代码

我正在努力及时地将信息从服务器发送到PDA。在某些情况下,快速接收消息非常重要

如果服务器有一条特定PDA的消息,PDA在几秒钟内收到该消息将是非常棒的。因此,每分钟进行一次投票是不可能的;每秒轮询一次会产生大量流量,也许还会消耗一些PDA电池

这篇文章和我的问题相同,建议使用http长轮询:

我已经研究了WCF回调,它们似乎正是我想要的,但是对于compact framework是不可用的

下一篇文章不是针对CF的,但提出了服务可用性问题:

在我的上下文中,我将有500-700个设备希望与少量web服务(2-5个)通信

这是一个很长的投票要求保持开放

路怎么走?这也是很多联系

我也读过使用exchange或gmail的方法;我真的很犹豫要走那些路

我在这里和谷歌找到的大多数帖子都有几年的历史;从那以后可能发生了什么事


处理500-700台PDA CF设备的最佳方法是什么?这些设备需要从服务器进行近即时通信,同时保持电池寿命?我敢肯定,要求很高。

套接字通信似乎是最简单的方法。您说您正在使用webservice进行客户机-服务器通信,这基本上是由服务器(webservice)在后台打开套接字并侦听到达的数据包,然后响应这些数据包来完成的

您希望反过来采用相同的方法,因此每个客户机在其机器上打开一个套接字并等待流量到达。客户端基本上需要轮询自己的套接字(它不会产生任何网络流量)。客户机还需要将其ip地址和套接字与服务器通信,以便当服务器需要与客户机通信时,它有一个到达它的方法。然后,服务器将使用基于套接字的通信(与Web服务相反)根据需要发送消息。服务器只需打开一个套接字,发送消息,然后再次关闭套接字。不需要有很多永久打开的插座

但是,如果客户端在网络间漫游和跳跃,则可能会出现捕获。如果是这种情况,那么ip地址很可能会发生变化(客户端需要打开一个新的套接字,并将新的ip地址/套接字信息传递给服务器)。这也增加了服务器无法与客户端通信的可能性


听起来是个有趣的项目。祝你好运

很久以前,CF团队构建了一个名为“午餐启动器”的应用程序,它基于WCF存储转发消息。大卫·克莱恩(David Kline)在这方面做了一个很好的系列(,它为所有早期文章提供了TOC)

吉姆·威尔逊(Jim Wilson)的一篇文章概述了存储转发和网络广播中的代码


这可能会满足您的需要,尽管它有一些依赖性(例如Exchange)和一些固有的限制(例如没有内置的交付确认)。

好的,进一步看,我可能更接近我想要的;我认为这是http长轮询的一种形式

本文介绍如何在套接字上使用侦听器。因此,我在服务器端执行此操作

然后,客户端在此端口打开服务器的套接字;发送它的设备ID。 服务器代码首先检查该设备是否有响应。如果有,它会做出响应

如果不是,它要么轮询自己,要么订阅某个事件;然后当它有数据时返回

如果需要,我可以在服务器端设置超时代码

客户端阻塞我并不担心,因为它是一个后台线程,没有数据与应用程序级别的阻塞相同;至于CPU和电池寿命,不确定


我知道我写的内容相当广泛,但这是一个值得探索的策略吗?

客户端将在同一个GPRS网络上,但肯定会在手机发射塔之间跳跃;希望这会提供相同的IP地址。我将写一个小的测试应用程序,看看我是否可以得到一个pda启动,报告IP地址;然后让服务连接到该ip。看看我是否可以记录IP的变化,看看它有多稳定。不幸的是,大多数手机都有一个NATED IP地址,无法从外部解析。是的;克里斯是对的。从网络提供商那里获取我PDA上的NAT IP。PDA可以初始化套接字连接,但可以坐在那里监听而不是发送?我会仔细阅读的。啊!我知道你是CF的大师之一,如果你不知道如何去做,这将需要相当多的工作来发展。我知道一定有出路;紧急快递公司必须使用类似的技术——当您在PDA上签名接收包裹时;必须以快速的方式将作业和消息从服务器提供给驱动程序。我仍然对午餐发射器不感兴趣,但会进一步研究它。由于其他一些原因,存储转发并不完全是我所追求的——我可以轻松地跟踪发送的消息和成功的消息。