我们公司在美国和加拿大部分地区的每个灾难事件中都有人。一个例子是他们在事件发生后立即在卡特里娜飓风中非常普遍。
我们正在构建一个应用程序来改进他们在ASP.NET或WPF领域的工作,并且断开连接要求使我们相信它将是一个WPF应用程序。我们的员工需要能够创建他们的工作,提供所有保险和测量数据,并将其保存在数据库中,无论互联网是否可用。
我们试图解决的问题是,在发生灾难性事件时,即使互联网不可用,我们的人也需要能够使用我们的新应用程序。 (他们在卡特里娜飓风离线了3天)
有没有其他人必须解决这样的要求以及他们如何在小型设备上接近运行的建议,同时保存数据,就好像它们仍然连接到后端服务和数据库一样?我们还必须将安全性纳入其中,并且做得非常好,以便将输入的数据加载到连接的数据库中而不会出现问题。
我们的长期目标是为Android和iPad平板电脑设备以及笔记本电脑提供此应用程序。我们对ASP.NET的初衷是它为我们提供了平板电脑环境的即时应用。在他们拥有的旧应用程序中,它们运行本地服务器,在平板电脑上运行远程连接并通过终端服务器运行应用程序。不漂亮。不漂亮。
我觉得这是一个非常主观的严肃问题,所以希望这不会被删除。
我们当前在服务器端的体系结构是具有存储库模式的实体框架,用于满足返回复合数据传输对象的CRUD请求的WCF服务,以及供客户端使用的代理。
我有兴趣听取其他开发者的意见。输入和这个设计难题。
添加到讨论中的其他信息
提供了很多好的信息!我必须肯定地看看Microsoft Sync。对于断开连接的数据库,我将只在初始数据库中放置列表表(枚举)。我们正在帮助的每个客户都会添加工作,如果需要,我们称之为干书的项目。 (虽然我希望当我们清理和干燥房屋时互联网会返回)这些表格会在我们有稳定链接后填充回主机。在卡特里娜飓风的情况下,我们的办公室也失去了互联网连接,这意味着办公室也没有提供通信缓解。
昨晚我意识到我们的客户代理是一切工作的关键!客户端仍然不知道它处于联机或脱机状态,并且在该库中保留了同步过程。我们正在发现今天我们谈论的数据量。我还想明确表示ASP.NET是一个类似的东西,但是一个胖客户端(实际上是带有XAML的WPF)可能最终成为我们的最终状态。
现在 - 进行多项更新。断开连接的工作将通过一个特许经营权进入个人住宅。事实上,我们的家庭办公室会针对特定事件派遣特定的特许经营权。因此,我们减少了多人更新记录问题的可能性(如果有的话)。原因是他们正在为每个工作(人的家/办公室/商业)创建记录,只有一个特许经营权才会处理它。当然,这也意味着如果他们断开了几天,创建工作的设备(谁,地点,条件,保险公司等的记录)也是唯一知道该工作的设备。但这可以与之共存。事实上,我们可以在集线器上同步特许经营设备。
我期待听到有关您如何实施断开连接环境的其他故事。
感谢!!!
关注微软的新技术
我被指示观看2012年TechEd的视频,并认为我可能有一个答案。谈论的是使用ASP.NET和MVC4以及2个库来实现断开连接的行为。起初我觉得它会很棒,但随后它继续让我很担心。
首先使用javascript后端来支持断开连接的I / O不会产生信心。作为编译人员(以及编写两种解释性语言的人),我真的不喜欢依赖于解释性javascript的关键业务模型。那个剧本!它可能是我,但它只是让我不寒而栗。
然后他们展示了他们的#34;伟大的#(;)编程模型,你的ViewModel只是javascript存在。我不关心应用程序(asp.net和javascript)可能是,也可能是(因为缺乏intellisense)写在记事本中。
任何asp爱好者都没有冒犯,但是一个编写良好的C#程序已经过语法和类型检查,这使我对软件更有信心,而不是写了一个希望和祈祷的东西,类命名空间已被正确输入而没有任何方法交叉检查。我已经看到了太多的调试时间来寻找一个错误,这个错误最终出现在一个巨大的命名空间中,并以其名称转换。我的想法超过了我小组中的其他高级开发人员,我们都对这项技术达成了共识。
但我们继续关注。 (我觉得这更像是一本日记而不是一个问题):)
答案 0 :(得分:2)
看起来是 Microsoft Sync Framework
的完美示例http://msdn.microsoft.com/en-us/sync/bb736753.aspx
支持协作的综合同步平台 和应用程序,服务和设备的离线访问 支持任何数据类型,任何数据存储,任何传输协议和 任何网络拓扑。
答案 1 :(得分:1)
我经常发现构建一个轻量级框架以满足我的特定需求比使用现有框架更有益于我。但是,在做出决定之前,请始终关注可用的内容并权衡利弊。
我没有使用Microsoft Sync Framework,但听起来这是一个很好的研究方法。如果您有Sql Server Standard(或Express版本以外的其他版本),那么复制也可能是一种选择。
如果您想开发自己的自行开发的解决方案,请确保将lastupdated和dateadded字段放在需要保持同步的任何表上。它听起来并不像你的场景会受到并发问题的影响(即如果A和B人同时修改了一个字段,谁赢了?)。如果是这种情况,那么开发自己的轻量级解决方案将非常简单。
正如杰里米指出的那样,你需要一种方法来获得改变。除了使用Web服务之外,您还可以在某些方面使用类似于Web服务的WCF。但我个人的偏见是仅通过互联网远程访问SQL服务器。该解决方案的缺点是增加了安全性问题,而优势则是降低了开发开销(即现在更快/更容易开发,随着时间的推移维护更少)。此外,直接SQL解决方案还假设这是一个内部应用程序...您负责所有开发,而不是与需要访问您的数据的第三方合作,并且不允许以这种方式访问它
答案 2 :(得分:1)
不是一个完整的答案,但评论太多了。
我有两个应用程序,一个同步,另一个同步。
我与客户端进行单向同步以进行断开连接的操作。在服务器完整的SQL Server和客户端Compact Edition。 TimeStamp是查找需要同步的任何行的完美选择。我也不复制整个数据库,因为一些最大的表是非必要的。常见的用途是用户标记他们想要同步的已识别记录。
如果同步为Jakub做了你需要的+1。对我来说,我无法根据大小和安全性同步整个MSSQL。
让另一个较小的应用程序以双向同步,但在这种情况下,它具有区域和更新仅在该区域内。因此,区域仅同步其数据,而在断开连接模式下,它们只能添加新记录。必须以连接模式执行对现有记录的更新。这是可以管理的。在那种情况下,MSSQL用于主服务器,而用于客户端的XML。
没有消息告诉你,但原始同步的难点在于双方可能已经添加或修改了相同的记录。