.NET CF移动设备应用程序 - 处理潜在离线问题的最佳方法?

时间:2008-10-22 04:32:49

标签: database web-services windows-mobile compact-framework offline

我正在VB.NET(紧凑框架)中构建移动应用程序,我想知道在设备上进行潜在离线交互的最佳方法是什么。基本上,这些设备具有蜂窝和802.11,但可能仍处于离线状态(接收效果不佳等)。司机会在他们离开卡车时扫描箱子,我想更新新位置 - 如果有网络信号则立即更新,或者如果离线并稍后处理则排队。不过,这让我想到了如何处理离线问题。

  • 我是否尽可能多地将数据缓存到设备上,以便在离线时使用它?基本上,每台设备都有一份(相关)生产数据的副本?或者在离线时禁用某些功能是否更好,以避免以后出现同步问题?我知道这是一个非常具体的问题,取决于我的应用程序,但我很想知道其他人是否采取了这条路线。
  • 我是否构建应用程序本身就好像它始终处于脱机状态一样,将所有内容提交到本地类所拥有的本地队列(基本上抽象掉在线/离线事物),然后让类提交给服务器可以吗?那么数据查找 - 如何以“半实时”方式处理?
  • 或者我应该让应用程序尝试直接,直接地向服务器提交请求,并在它本身请求失败时处理它?我可以看到让用户等待超时的潜在问题,但这是最可靠的方法吗?

我不是在寻找一个特定的解决方案,但实际上只是关于开发人员如何利用最流畅的用户体验实现这一目标的故事,并提供了一个指向操作方法或者后续操作的链接或者类似的内容。感谢您对此的指示!

3 个答案:

答案 0 :(得分:2)

我们无法给出明确的答案,因为没有适合所有使用场景的“正确”答案。例如,如果您在后端使用SQL Server而在本地使用SQL CE,则可以始终设置合并复制并让数据引擎为您处理所有这些。那很干净。使用脱机应用程序块可能会解决它。使用存储转发可能是一种选择。

您可以在本地存储,然后使用直接连接,在检测到网络时使用的WCF服务的Web服务来滚动您自己的同步。您可以使用MSMQ进行交付。

您必须考虑的不是“正确”的方式,而是您的实施将如何影响应用程序的可用性。如果由于缺乏连接而禁用功能,应用程序是否仍然可用?如果您有陈旧数据,那是一个问题吗?当您拥有GSM / GPRS(通常不是免费的)时,可能需要传输一些关键数据,而当您拥有802.11时,可能需要做更多的工作。也许你可以整天运行,在早上下拉查找表并只上传交易,设备跟踪它所做的更改。

基本上,它实际上取决于它的使用方式,数据的性质,现场设备之间数据事务的重要性,数据延迟的影响,以及其他我无法想到的因素。

因此,第一步是确定应用程序的使用方式,然后确定基础架构和架构,以提供所需的连接和数据访问。

答案 1 :(得分:0)

我自己没有用过它,但是你有没有考虑过CF的“存储和转发”功能?它可能适合您的需求。我相信它使用Exchange邮箱作为消息队列来向设备发送SOAP数据包。

答案 2 :(得分:0)

解决此问题的最佳方法是始终脱机工作,然后使用消息队列来处理向设备发送更改和从设备发送更改。例如,当驱动程序标记已交付的内容时,更新本地存储中提供的项目,并在传出队列中放置一条消息,告诉服务器它已交付。连接启动时,将任何排队的项目发送回服务器,并从服务器获取已排队的任何消息。