我已经构建了一个应用程序,它必须从几个(+100)商店位置读取一些MS Access数据,并将一些数据保存在位于VPN端点的远程MS SQL服务器上。由于从站点到总部站点的连接质量有时不稳定,因此客户要求我提供具有同步功能的在线/离线实施。
所以我创建了一个检测SQL Server IP的可达性的函数,并且我在各种条件下执行该函数:在相关的插入/更新操作之前,以及在计时器的基础上。定时器主要用于强制在长时间连接下拉的情况下在本地保存在一些临时位置(然后在通信更可靠时进行批量同步,例如在夜间)
我开始假设连接失败在某种程度上是偶然的,但我发现实际上不仅仅是频繁。
我只是想知道什么是更可靠的方法。
我担心的最大的情况是,在我启动3个插入组和1个更新组之后松散连接(基于全局性能我估计,所有验证都要用一些基于服务器的数据完成,执行时间是每次保存约2000毫秒)。我提供了一种提交 - 回滚方法,但我不相信它非常有用。
欢迎任何建议。
L.E。
我还必须说在线/实时场景非常重要,因为我必须更新一些关于商店客户的信息:如果它购买的东西,它积累了一些奖励积分,如果他退回产品(5分钟后或5天)我必须从他的帐户中删除积分。因此,在这方面,一种傍晚/夜晚同步不是很理想。
事实上我想知道如果我在交易时间断开连接时如何避免错误插入/更新他的观点,处理5分钟后可能另一位顾客买东西的事实,我必须始终处理来自POS应用程序的最后一条记录(因为我必须知道客户是否是会员,以及是否有资格获得积分;而在POS应用程序中没有关于客户的信息,只是关于商店的销售情况)。
答案 0 :(得分:0)
我将使用先进的“Poison Queue”处理实现MSMQ / WCF解决方案。您可以捕获与离线性相关的特定异常。或者利用重试次数。
http://blogpad-online.blogspot.com/2012/04/wcf-msmq-message-retries.html
和这个
http://www.codeproject.com/Articles/10841/Surviving-poison-messages-in-MSMQ
(这些不是最终的所有URL文章,只是为了让您体验该功能)
您没有提及“同步”是否必须完全按时间顺序排列。 那是一个不同的野兽。
编辑:
您应该将数据发送为“基于设置”而不是逐个发送。 (RBAR)。
看看这里:
那篇文章很旧,但展示了如何以原子模式将xml发送到sql server。
“3个插入和1个更新”可以在xml中打包在一起(如果使用WCF / WebApi服务,则可以打包为json)并将它们作为一组发送。
但我不是智能手机应用专家.....开/关Wifi是另一种艺术。