.NET CF移动设备应用程序——处理潜在的脱机状态的最佳方法是什么?

3
我正在使用VB.NET(紧凑框架)构建移动应用程序,我想知道如何处理设备上的潜在离线交互。基本上,这些设备具有蜂窝和802.11,但可能仍处于离线状态(信号不佳等原因)。司机会在货车离开时扫描货箱,我希望立即更新新位置 - 如果有网络信号,则立即更新;如果处于离线状态,则排队处理后续更新。这让我想到了如何处理离线状态。
  • 我是否要将尽可能多的数据缓存到设备中,以便在离线时使用?基本上,每个设备都会有(相关的)生产数据副本吗?还是最好在离线时禁用某些功能,以避免稍后进行同步的麻烦?我知道这是一个相当具体的问题,取决于我的应用程序,但我很想看看其他人是否采取了这种方法。
  • 我是否应该构建应用程序本身,使其表现得好像它一直处于离线状态,将所有内容提交给本地队列的类所拥有(从根本上抽象出在线/离线的概念),然后由该类根据需要将内容提交给服务器?那么数据查找怎么办 - 如何以“半实况”方式处理?
  • 还是应该让应用程序直接尝试在实时中向服务器提交请求,并在请求本身失败时处理它?我可以看到可能会让用户等待超时的潜在问题,但这是最可靠的方法吗?

我不是在寻找具体的解决方案,而只是想听听开发人员如何以最流畅的用户体验完成此操作,并提供一个how-to 或者需要考虑的内容之类的链接。感谢您对此提供的建议!

3个回答

2
我们无法给出明确的答案,因为没有一个“正确”的答案适用于所有的使用场景。例如,如果您在后端使用 SQL Server 并在本地使用 SQL CE,则可以始终设置合并复制,并让数据引擎为您处理所有这些内容。这非常干净。使用离线应用程序块可能会解决它。使用存储和转发可能是一种选择。
您可以在本地存储,然后使用直接连接、Web 服务或检测到网络时使用 WCF 服务来自行同步。您可以使用 MSMQ 进行传递。
你需要考虑的不是什么是“正确”的方式,而是你的实现将如何影响应用程序的可用性。如果由于缺乏连接而禁用某些功能,应用程序仍可用吗?如果您有陈旧的数据,那是个问题吗?也许当您拥有 GSM/GPRS(通常不免费)时需要传输一些关键数据,当您拥有 802.11 时则会完成更多工作。也许您可以在早上拉下查找表并在一天中运行,只上传交易,设备跟踪它所做的更改。
基本上,这取决于它的使用方式、数据的性质、现场设备之间数据事务的重要性、数据延迟的影响,以及我无法立即想到的其他因素。
因此,第一步是确定应用程序需要如何使用,然后确定提供所需的连接和数据访问的基础架构和架构。

0

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


0

处理这个问题的最佳方法是始终离线工作,然后使用消息队列来处理设备之间的更改发送。例如,当驱动程序将某物品标记为已交付时,请在本地存储中更新该项并在出站队列中放置一条消息以告知服务器已经交付。当连接恢复时,将任何排队的项目发送回服务器,并获取从服务器排队的任何消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接