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