0

我已经构建了一个应用程序,它必须从几个(+100)个商店位置读取一些 MS Access 数据,并将一些数据保存在位于 VPN 端点的远程 MS SQL 服务器上。因为从站点到总部站点的连接质量有时不稳定,客户要求我提供具有同步功能的在线/离线实施。

所以我制作了一个检测SQL Server IP可达性的函数,并在各种条件下执行该函数:在相关插入/更新操作之前,以及在计时器的基础上。该计时器主要用于在长时间连接下拉的情况下强制在某些临时位置本地保存(然后在通信更可靠时进行批量同步,例如在夜间)

我一开始就假设连接失败是偶然的,但我发现实际上这种情况非常频繁。

我只是想知道什么是更可靠的方法。

我最担心的情况是,在我开始 3 次插入和 1 次更新组后,连接松散(根据全局性能,我估计所有验证都将使用一些基于服务器的数据完成,执行时间约为 2000 毫秒每个储蓄)。我提供了一种提交 - 回滚方法,但我不相信它非常有用。

欢迎任何建议。

我还不得不说,在线/实时场景很重要,因为我必须更新有关商店客户的一些信息:如果它购买了一些东西,它就会积累一些奖励积分,如果他退回产品(5 分钟或 5 天后)我必须从他的帐户中删除积分。因此,在这方面,一种晚/晚同步并不是很可取的。

事实上,我想知道如果我在交易时断开连接,如何避免错误插入/更新他的积分,处理 5 分钟后可能另一个客户买东西的事实,我必须始终处理来自的最后一条记录POS 应用程序(因为我必须知道客户是否是会员,以及是否有资格获得积分;并且在 POS 应用程序中没有关于客户的信息,仅关于商店的销售额)。

4

1 回答 1

0

我将实施一个具有高级“毒物队列”处理的 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)。

看看这里:

http://granadacoder.wordpress.com/2009/01/27/bulk-insert-example-using-an-idatareader-to-strong-dataset-to-sql-server-xml/

那篇文章很旧,但展示了如何以原子模式将 xml 发送到 sql 服务器。

“3 个插入和 1 个更新”可以打包在 xml 中(或者 json,如果您使用 WCF/WebApi 服务)并将它们作为一组发送。

但我不是智能手机应用专家......开/关 Wifi 是一门不同的艺术。

于 2013-05-21T13:15:19.417 回答