5

我们公司在美国和加拿大部分地区的每一次灾难性事件中都有人员。一个例子是他们在卡特里娜飓风事件发生后立即非常普遍。

我们正在构建一个应用程序来改进他们在可能是 ASP.NET 或 WPF 的领域中的工作,并且断开连接要求使我们相信它将是一个 WPF 应用程序。我们的员工需要能够创造他们的工作,提供所有的保险和测量数据,并将其保存在数据库中,无论互联网是否可用。

我们试图解决的问题是,在发生灾难性事件时,即使互联网不可用,我们的员工也需要能够使用我们的新应用程序。(他们在卡特里娜飓风中离线了 3 天)

有没有其他人必须解决这样的要求,并就他们如何在小尺寸设备上运行,同时保存数据就好像它们仍然连接到后端服务和数据库一样提出建议?我们还必须将安全性纳入其中,并且做得足够好,以便他们输入的数据可以毫无问题地加载到连接的数据库中。

我们的长期目标是还为 Android 和 iPad 平板设备以及笔记本电脑提供此应用程序。我们最初对 ASP.NET 的渴望是它为我们提供了一个直接用于平板电脑环境的应用程序。在他们拥有的旧应用程序中,他们运行本地服务器,在平板电脑上运行远程连接并通过终端服务器运行应用程序。不漂亮。不漂亮。

我觉得这是一个严肃的问题,不是主观的,所以希望这不会被删除。

我们当前在服务器端的架构是具有存储库模式的实体框架、用于满足返回复合数据传输对象的 CRUD 请求的 WCF 服务以及供客户端使用的代理。

我有兴趣听取其他开发人员的意见和这个设计难题。

添加到讨论中的其他信息

提供了很多好资料!!!我肯定要看看 Microsoft Sync。对于断开连接的数据库,我将只在初始数据库中放置列表(枚举)。工作,如果需要,我们称之为干书的项目,将为我们正在帮助的每个客户添加。(尽管我希望在我们清洁和烘干房屋时互联网能够恢复)一旦我们有了稳定的链接,这些表格就会填充回主机。在卡特里娜飓风的情况下,我们的办公室也失去了互联网连接,这意味着办公室几天也没有提供通信救济。

昨晚我意识到我们的客户端代理是一切正常工作的关键!客户端仍然不知道它是在线还是离线,并将同步过程留在该库中。我们正在发现我们今天谈论的数据量。我还想明确一点,ASP.NET 是一种喜欢的东西,但一个胖客户端(实际上是带有 XAML 的 WPF)可能最终成为我们的最终状态。

现在 - 进行多次更新。断开连接的工作将由一个特许经营权进入各个家庭。事实上,我们的总部向特定活动派遣特定的特许经营权。所以我们减少了多人更新记录问题的可能性(如果有的话)。原因是他们正在为每项工作(人的家庭/办公室/企业)创建记录,并且只有一个专营权会处理它。当然,这也意味着如果他们断开连接数天,那么创建工作的设备(记录谁、在哪里、条件、保险公司等)也是唯一知道工作的设备。但这可以忍受。事实上,我们也许能够在集线器上同步特许经营设备。

我期待听到更多关于您如何实现断开连接的环境的故事。

谢谢!!!

关注微软的新技术

我被指示观看 TechEd 2012 的视频,并认为我可能有答案。演讲是关于使用 ASP.NET 和 MVC4 以及 2 个库来实现断开连接的行为。起初我认为它会很棒,但随着它的继续,它让我有点担心。

首先,使用 javascript 后端来支持断开连接的 I/O 不会产生信心。作为一名编译器专家(以及编写两种解释性语言的人),我真的不喜欢依赖于解释性 javascript 的关键业务模型。和脚本!可能是我,但这只是让我不寒而栗。

然后他们展示了他们的“伟大”(???)编程模型,让您的 ViewModel 仅作为 javascript 存在。我不喜欢用记事本编写的应用程序(asp.net 和 javascript),也可能(因为缺少智能感知)。

无意冒犯任何 asp 爱好者,但是一个编写良好的经过语法和类型检查的 C# 程序让我对软件更有信心,而不是希望和祈祷类名称空间已正确键入而没有任何交叉检查手段的东西。我已经看到了太多小时的调试,以寻找一个最终出现在一个巨大的命名空间中的错误,并且在它的名称中转置了 ie。我将我的想法与团队中的其他高级开发人员擦肩而过,我们都对这项技术达成了共识。

但我们继续看。(我觉得这更像是一本日记而不是一个问题):)

4

3 回答 3

2

看起来像是Microsoft Sync Framework的完美示例

http://msdn.microsoft.com/en-us/sync/bb736753.aspx

一个全面的同步平台,支持任何数据类型、任何数据存储、任何传输协议和任何网络拓扑,支持应用程序、服务和设备的协作和离线访问。

于 2012-06-11T22:17:32.780 回答
1

不是一个完整的答案,但太多的评论。

我有两个应用程序,一个以一种方式同步,另一种以两种方式同步。

我对客户端进行单向同步以进行断开连接的操作。在服务器完整 SQL Server 和客户端 Compact Edition。TimeStamp 是查找任何需要同步的行的完美工具。我也不会复制整个数据库,因为一些最大的表是非必要的。常见用途是用户标记他们想要同步的已识别记录。

如果同步为 Jakub 做了你需要的很棒的 +1。对我来说,我无法根据大小和安全性来同步整个 MSSQL。

有另一个以两种方式同步的较小应用程序,但在这种情况下,它有区域,并且更新仅在该区域内。所以一个区域只同步他们的数据,并且在断开模式下他们只能添加新记录。必须在连接模式下更新现有记录。那是可控的。在这种情况下,主服务器使用 MSSQL,客户端使用 XML。

对您来说没有消息,但原始同步的困难部分是两方可能已经添加或修改了相同的记录。

于 2012-06-11T23:20:34.870 回答
1

我经常发现构建一个轻量级框架来满足我的特定需求比使用现有框架对我更有益。但是,在做出决定之前,请始终查看可用的内容并权衡利弊。

我没有使用 Microsoft Sync Framework,但听起来这是一个很好的先研究。如果您有 Sql Server Standard(或 Express 版本以外的其他版本),那么复制也可能是一种选择。

如果您想开发自己的本地解决方案,请确保将 lastupdated 和 date added 字段放在需要保持同步的任何表上。这听起来不像你的场景会受到并发问题的影响(即,如果 A 和 B 同时修改一个字段,谁会赢?)。如果是这种情况,那么开发自己的轻量级解决方案将非常简单。

正如 Jeremy 指出的那样,您将需要一种方法来进行更改。除了使用 Web 服务之外,您还可以使用在某些方面类似于 Web 服务的 WCF。但我个人偏向于仅通过 Internet 远程访问 SQL 服务器。该解决方案的缺点是增加了安全问题,而优点是减少了开发开销(即现在更快/更容易的开发以及随着时间的推移更少的维护)。此外,直接 SQL 解决方案还假设这是一个内部应用程序......您负责所有开发,而不是与需要访问您的数据并且不允许以这种方式访问​​它的第 3 方合作.

于 2012-06-11T23:00:39.400 回答