做.NET的童鞋进
现在有这样一个问题,要实现2个程序间的数据共享。一个程序是WinForms,另一个WPF。2个程序有各自的数据库,但数据库结构不同。具体点,在A可以添加客户,及其客户相关数据(B也可以添加数据,但不能从B激活共享状态),A可以运行B。如果从A运行B,这些在A添加的数据与B共享,在B可以对数据继续操作。如果A,B共享数据,则在任何一方对数据的改变都自动改变另一方的数据。
一种方法是把A的数据export到本地,然后B import数据。这不是我想要的解决方案。
另一种是用共享数据库,但必须用timer访问共享数据库,看有没有数据变化?如果只能用timer,那应该也不是一个最优解决方案?
我想的解决方案是用WCF,用publisher/subscriber,每个程序分别是另一个程序的publisher和subscriber。对Webservice不是很熟悉,不知道各位童鞋有什么建议。 本帖最后由 hauke 于 2013-2-17 10:33 编辑
上个UML看看 。。。
你看看这个文章有用吗
http://bbs.csdn.net/topics/310103579 楼主啊,我问个题外话啊,你做好的.net程序,给客户装的时候,让程序脱离.net运行吗,这样的软件都是有版权的啊,都好贵! hauke 发表于 2013-2-17 11:01 static/image/common/back.gif
楼主啊,我问个题外话啊,你做好的.net程序,给客户装的时候,让程序脱离.net运行吗,这样的软件都是有版权 ...
你购买了vs.net,编译出来软件,是可以商用的吧。 而且如果是免费 express 版本编译出来的,也 可以商用的 吧。。。 keepfeeling 发表于 2013-2-17 11:08 static/image/common/back.gif
你购买了vs.net,编译出来软件,是可以商用的吧。 而且如果是免费 express 版本编译出来的,也 可以商用的 ...
晕,我说的是让客户机脱离.net,这方面的软件都是要钱的啊 。。。
另外免费 express 版本编译出来的版本不能用于商用! 什么数据库?
一般这种情况可以尝试价格Trigger看看 本帖最后由 雪候鸟 于 2013-2-18 22:26 编辑
你用什么数据库做共享,不同的数据库实现手法不一样,你可以尝试用数据库本身的锁机制来实现。如果不想用数据库的锁机制,可以考虑用一个表级或者行级的修改计数器或者timestamp来做(看你的控制粒度需求),也就是类似于乐观锁的做法。
本帖最后由 并非如此 于 2013-2-19 09:39 编辑
最佳方案
首先,真要想解决这个问题,应该进行数据库重构,用wcf作为数据的独立存储,和逻辑处理层, 至于你有多少个外部应用(winform,wpf,asp.net...)是无所谓的, 这样才能真正保证数据的完整性和一致性。
次佳方案
如果你的客户,非要保持现有数据库,那么如你所说,利用wcf作为数据操作抽象层实现publisher/subscriber架构, 下面的例子很好的解释了这种模式。
http://www.codeproject.com/Articles/22796/WCF-Implementation-of-the-Publisher-Subscriber-Mod
如果原来的应用是直接读取数据库的,那么要把他们读取数据库的模块独立出来,放到wcf中,所有的相关应用,用统一的数据库操作接口来操作数据库,你一样能保证数据的完整性和一致性, 前提就是没有其他的操作接口,只有唯一的,统一的操作接口。
最sb的方案,
原来的操作不便变,只把共同操作的部分独立出来,这种方案,相对较快的解决现有问题,但是未来的隐患是无限的,后面的工作会很恶心,很烦人,非常不利于以后的拓展及维护。
楼上说的很详细,多谢。
看起来要用最sb的解决方案了。公司现在只需要一个临时解决方案,要求保持部分数据一致性。两个应用准备在未来3年合为一个应用,把winforms应用作为一个module用wpf重写并集成在wpf应用。
感谢大家的回复。准备拿出两天看看WCF的文档,扫了下MSDN,内容并不多。另外我想看看是不是p2p是这种情况的合适解决方案。 媛珊娃娃 发表于 2013-2-19 13:45 static/image/common/back.gif
楼上说的很详细,多谢。
看起来要用最sb的解决方案了。公司现在只需要一个临时解决方案,要求保持部分数 ...
学习了。
我想问楼主,你觉得能有楼上这么样的思路,水平,至少要多少年.Net 经验。