C/S结构中客户端脱机状态下仍然继续运行

JeffreyZhang1314 2012-04-18 04:31:29
本人一直做B/S结构的程序客户端就是浏览器,所以只知道我写的应用只有在可以连接到服务器的情况下才可以使用。在遇到一个新的项目中客户需要在无法连接服务器的情况下依然可以正常工作。从来没有接触过这样的需求,也不知道这种需求要用什么样的技术来解决,希望论坛内的各位高手可以帮忙推介一些这种需求的解决办法。

客户想在无法连接服务器的情况下客户端记录当前的录入信息,然后再可以连接服务器的时候将信息同步到服务器上。确保客户端可以独立的工作,想知道在.Net中是否有实现这种需求的框架。谢谢指点
...全文
419 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄金安魂曲 2012-08-09
  • 打赏
  • 举报
回复
你可以查阅一下微软的“智能客户端”,smartclient。可以满足你的要求!
littleluoron 2012-08-05
  • 打赏
  • 举报
回复
最近本人也在搞lz类似的项目。这个其实各位大侠已经说的很透彻了。的确用同步数据就行了!学习了!
pavee 2012-08-02
  • 打赏
  • 举报
回复
在我过去做的POS(WPF Application)遇到过这种情况。有两种解决方法:
1. 使用 Microsoft Sync Framework 2.1/4,是免费的;
2. 一本书中介绍了一个很好的方法,要使用ADO.NET。书名是:.NET Domain-Driven Design with C#。这本身主要是介绍DDD(Domain Driven Design),但例子中与数据库的连接就是offline技术.
  • 打赏
  • 举报
回复
用Silverlight+Sterling的方式可以很好的解决这个问题,但是我自己感觉这样做的话造成的隐患非常大。
xiesheng2000 2012-07-27
  • 打赏
  • 举报
回复
实际业务中确实有这种需求,一般在本地弄个数据库,在联机状态下自动去同步。
anabiosispe 2012-07-25
  • 打赏
  • 举报
回复
b/s比c/s好做多了感觉。
数据丢失之类的,b/s都不怎么用关心,浏览器帮你做了那么多工作
  • 打赏
  • 举报
回复
如果要考虑网络失败,那你是不是要考虑电脑死机?
就像sp哥说的那样,为了小概率事件去耗费大量的精力,不管怎么说都是不划算的。另外你的那个系统客户端操作的数据影响度很大吗
xiesheng2000 2012-07-19
  • 打赏
  • 举报
回复
微软有一个示例,就是这种情况。具体是什么名不记得了,好象是04年开发者日活动的DEMO
那城 2012-07-12
  • 打赏
  • 举报
回复
做两个数据库,本地一个,服务器一个
evelyn_green 2012-06-09
  • 打赏
  • 举报
回复
加个检测本地网络连接的功能就好了!
bcc222 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
今天我们的网络程序可以做的很酷,有很多强大的功能,例如可以随时动态、分步加载新的程序子模块到客户端,可以使用无限量的网络多媒体资源,可以基于(假设)海量的、每一秒钟都会增加上M的数据的支持来设计业务程序。很多核心技术、核心的创意都拜托了实时联网技术,而不是脱机运行技术。而我们做的网络,哪怕是我亲手用钳子夹的RJ45头,还是我亲自给用户插上的usb mini无线网卡,即使是便宜货也是非常可靠的东西,……
[/Quote]

不太同意类似的观点,比如我们现在要做的程序,有2台称,A秤过毛重和B秤过皮重,如果网络断掉的话,我肯定要让用户能使用的,单个机器也能做完整个业务流程,否则车辆就会堵在用户的秤台上。

我们所谓的网络问题不一定是指硬件上的,也有软件上的,比如电脑的死机、硬件设备检修、网络病毒等等,我们未必要做军工上的产品,但是用户的基本功能使用是要有的。

我想的办法,将基本的数据如客户名称、品名等等基础数据按照时间或者触发器的方式放到用户的本地(目前还没有想好怎么处理),调用的时候就在本地进行调用,主要数据做的简单一些(结构上的简单),如果断网,就用本地的数据库,感觉可能会比较麻烦一些!









  • 打赏
  • 举报
回复
今天我们的网络程序可以做的很酷,有很多强大的功能,例如可以随时动态、分步加载新的程序子模块到客户端,可以使用无限量的网络多媒体资源,可以基于(假设)海量的、每一秒钟都会增加上M的数据的支持来设计业务程序。很多核心技术、核心的创意都拜托了实时联网技术,而不是脱机运行技术。而我们做的网络,哪怕是我亲手用钳子夹的RJ45头,还是我亲自给用户插上的usb mini无线网卡,即使是便宜货也是非常可靠的东西,我们的网络全都是在十分钟内就可以恢复的,而且现在的设备即使只有50%的新号强度、受到50%的干扰也可以保证通讯的100%可靠性。只要我们自己为客户全面地负责从网络硬件到软件整个过程,我们一般的(非军品)的产品大多不必在像10几年前那样热衷于搞什么时髦的“脱机客户端”了。
  • 打赏
  • 举报
回复
如果你玩过网游就知道,当服务器短线的时候,你就让客户端保持画面上持续去重联服务器(而不要结束游戏),待重连服务器成功也就可以继续操作了。而假设用户需要停止,那么你就给用户把当时环境保存到isolatedStorage中,然后停止服务就行了。我不会轻易去做什么“客户端保持持续工作”的程序设计。这是符合这个时代的设计,我不会担心产品因为缺少那个所谓“脱机运行、连线后再自动上传”功能而显得比别人档次低。实际上你给出貌似可以脱机的软件方案,你也不能在网络上有什么理由给人家大面积断网吧?!
bwangel 2012-06-09
  • 打赏
  • 举报
回复
同意sp的观点。现在哪天你不上网感觉怎样?是不是感觉比断电还难受?
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
本人一直做B/S结构的程序客户端就是浏览器,所以只知道我写的应用只有在可以连接到服务器的情况下才可以使用。在遇到一个新的项目中客户需要在无法连接服务器的情况下依然可以正常工作。从来没有接触过这样的需求,也不知道这种需求要用什么样的技术来解决,希望论坛内的各位高手可以帮忙推介一些这种需求的解决办法。

客户想在无法连接服务器的情况下客户端记录当前的录入信息,然后再可以连接服务器的时候将信息同……
[/Quote]

随便一种c/s都可以做到啊。比如说在网页上的silverlgiht程序(而不是安装到本地的oob模式的silverlight程序),也是这样的。只要它执行,它通过tcp连接服务器。假设在运行中经常需要访问商品价格表,可是突然tcp服务器端短线了,那么自然可以捕获到通讯异常。此时只要使用在程序内存中保存的商品价格表,或者取出在IsolatedStorage(类似于cookie可以长期保存数据,同时可以有几百M大,可以用来开发客户端数据库系统)中的商品价格表继续销售。对于销售明细也是如此。

不过现在的局域网网络技术不必15年前。你的客户也许还活在15年前那个局域网环境。15年前的集线器设备,往往在夏天中午的时候就会死机,每天必须启动一次才能保证连续使用。而今天的最便宜的路由器(功能不知道强大多少倍),也比15年前的简单集线器设备可靠许多倍了。(经过谨慎思考所以才说)编程时我们其实忽略这种客户“需求”,以免为程序埋下更大的bug,以免给用户造成不必要的损失。
bcc222 2012-06-09
  • 打赏
  • 举报
回复
最近也在考虑类似的东西,但是如果牵扯到用户数据交互啥的就比较麻烦了
xuqing19830921 2012-05-16
  • 打赏
  • 举报
回复
实际上就是本地缓存嘛,一般的做法会有一个本地服务器,用来和远端服务器通信,同时对实时数据进行备份,确保数据安全,目前这种情况
最简单的做法是客户机同时向远端和本地的服务器传输实时数据,两端同时存储,网络通讯中断后,本地服务器做好标记,重新连接后做数据同步。
avi9111 2012-04-24
  • 打赏
  • 举报
回复
如果重新设计,就用CS吧,用Access数据库,sqllite什么都容易

如果你中途改的数据,或者要保存的记录不多

自定义数据结构,数据保存在本地

加载的时候再读取。

至于什么框架能做这个,我没怎么接触
lgk2012 2012-04-23
  • 打赏
  • 举报
回复
断网、断电、服务器故障等等都属于软件开发中的容错处理机制,这一类需求主要可以通过本地临时数据文件的形式处理,但也需要考虑实现情况,并不一定是所有的业务数据都能在本地处理,不然就相当于两套数据库了,从某种角度来说是不太可行的!
足球中国 2012-04-18
  • 打赏
  • 举报
回复
这就是软件和网站的区别之一。
你需要开发软件而不是网站了。
加载更多回复(2)

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧