我想在silverlight的内存中设置一个数据库对象的缓存(即表中的行),我将使用WCF和linq-to-sql来完成。一旦我将对象存储在内存中,我就打算在修改后使用MSMQ接收新对象。这是一种有点复杂的方法,但目标是减少数据库的访问,并允许连接到MSMQ的Silverlight应用程序之间的即时数据通信。
我的Silverlight应用程序意味着长时间运行,并且要缓存的数据量不会很大。我打算使用本地存储来保存内存缓存。
无论如何,为了处理进来的更新对象,我想知道用户是否更改了现有对象。我可以使用一些与数据绑定相关的事件来设置一个标志,指示对象有变化吗?
也许有更好的方法可以完全缓存?
谢谢!
答案 0 :(得分:3)
我认为需要进一步澄清以了解您的要求。你说的一些事情不清楚甚至是冲突的。但是,一些一般的想法:
如果缓存中的数据量不会很大,我就不会打扰本地存储 - 我只是将它存储在某个应用程序级范围(全局变量,应用程序上下文等)中。如果应用程序重新启动,则必须从数据库中删除缓存(我想这无论如何都是可取的)。
通常,缓存的对象是只读的(用户不能更改)。如果用户确实更改了将被缓存的对象,您通常希望立即将该信息持久保存到服务器/数据库,以便其他客户端可以获取该信息。
如果服务器/数据库持有“主”缓存数据,并且需要在数据更改的情况下通知客户端,则silverlight应用程序可能必须是某种服务的订阅侦听器( MSMQ实际上可以作为后端工作)。如果更新不必是实时更新,请考虑缓存只需每隔5-10分钟在计时器上刷新一次。
答案 1 :(得分:2)
有很多例子表明双工WCF服务(通过HTTP) - 也许寻找Silverlight的发布/订阅模式实现将为您提供一个良好的开端。
不可否认,我无法为您的方案提供示例实现,但以下是一些值得关注的地方:
Laharsub: a message server for real time web applications PollingDuplexHttpBinding and a Publish subscribe framework