我们正在开发RetailPOS .net(windows)应用程序。
其中一位客户询问“当电源突然断电时,应用程序中当前正在处理的数据会发生什么?”,“应用程序是否能够恢复未保存的数据?”
我想知道,.net应用程序中如何包含此功能?
有些人可以帮助我,需要做些什么呢?
答案 0 :(得分:4)
首先,查看UPS(不可中断的电源)
其次,考虑创建持久性事务,这些事务将提前和经常保存,但在您告知之前不会提交。这远远超出了TSQL中的典型事务。
答案 1 :(得分:1)
如果这是一次硬断电(就像拔掉笔记本电脑上的电池一样),那么除了每次写入磁盘之外你别无他法。步。的。的。办法。 (谈论性能损失。)还要确保记录的内容让应用程序知道它何时开始恢复之前的状态,因此它可以继续,或者重试操作。
如果是电源切断,就像按下电源按钮关闭/睡眠/休眠计算机一样,那么请监听SystemEvents.PowerModeChanged事件并采取相应措施。
最后,请确保如果您的数据在中途写入数据库时会被破坏,请确保您的数据库写入是原子的(要么所有更改都发生并被接受,要么都不接受)。
答案 2 :(得分:1)
您可以将收到的当前信息附加到文件系统。它会受到性能影响,但会让您回到最后捕获的项目。
当应用程序启动时检测是否有待处理文件,并提供恢复选项。适当加载保存在文件中的数据。
获得所有信息后,当您执行付款时发生的流程时,请务必以原子方式记录流程中的任何重大更改。如果您正在使用外部系统,请在启动操作时以及何时立即返回时进行记录。在上面总是有一个可以失败的时间窗口,但是你想让它尽可能地短,并为恢复过程提供足够的信息。最糟糕的情况是,如果系统无法自动恢复,您希望它有足够的信息来确定它停止在进程中的位置。
答案 3 :(得分:0)
PowerFailureException类将解决此问题。实际上只是用UPS维持电源。唯一的另一个选择是保持数据库事务的原子性。
答案 4 :(得分:0)
你真正想要的是磁盘交易的原子性。有很多方法可以执行这些操作,但通常如果您使用现有的数据库产品,它将为您完成。
如果您推出了自己的数据库或文件格式,那么根据您的文件格式,您可以根据自己的需要进行一些工作。
答案 5 :(得分:0)
您可能需要考虑让您的应用程序使用SQLite。
他们在when to use page上有一些很好的信息。
突出的一点是:
随着应用程序内容的修订,更新以原子方式发生
内容会不断更新并自动更新,以便在发生电源故障或崩溃时不会丢失任何工作。
我正在为我要实施的应用程序寻找类似的选项,该应用程序将用于第三世界国家,其中电力全天频繁出现....到目前为止,SQLite似乎脱颖而出很好的选择。
但在一天结束时,您的选择将取决于您的个人情况和要求。