假设您想将一些数据写入 RFID 卡并将一些数据写入数据库。从理论上讲,与数据库的连接可能随时中断,卡与读卡器之间的连接也可能随时中断。你的目标是以一种原子的方式设计它,你要么最终要么都写,要么都不写。
有什么优雅的方法可以解决这个问题吗?任何提示表示赞赏:)
(我正在使用 MS SQL Server 和 Windows 智能卡模块 (Winscard.dll),以防有什么不同)
假设您想将一些数据写入 RFID 卡并将一些数据写入数据库。从理论上讲,与数据库的连接可能随时中断,卡与读卡器之间的连接也可能随时中断。你的目标是以一种原子的方式设计它,你要么最终要么都写,要么都不写。
有什么优雅的方法可以解决这个问题吗?任何提示表示赞赏:)
(我正在使用 MS SQL Server 和 Windows 智能卡模块 (Winscard.dll),以防有什么不同)
在开始更新 RFID 卡之前插入一条记录,然后在完成后更新此记录。通过这种方式,您还可以发现半完成的更新,并采取相应的行动。
然后有一个进程在超时时间过去后解决不完整的记录(通过重试,或者你想做的任何其他事情)。
与 RFID 卡通信时,请勿尝试保持打开数据库事务,因为这会:
您需要先更新数据库,然后在数据库更新成功时预测 RFID 更新。数据库更新应该包含在事务中,以使其也具有原子性。
当然,如果后续的 RFID 更新失败,您会想要回滚数据库更新。因此,我会考虑在数据库更新中包含事务审计。如果 RFID 更新失败,您可以通过为数据库更新调用回滚例程来返回到一致状态。
希望这可以帮助!