将ObjectCache与PerCall服务一起使用

时间:2013-01-28 21:01:09

标签: c# wcf entity-framework caching

我目前拥有InstanceContextMode = InstanceContextMode .PerCall的WCF RESTful服务。我这样做是因为服务方法与Entity Framework模型交互,我读到我应该使用PerCall而不是Single。现在,我想添加一个返回大型数据集的新服务方法。我最初的想法是在服务启动时关闭一个线程,并缓存数据集,这样当调用服务方法时,我不必点击数据库...我只是返回缓存。但问题是我不能这样做,因为我正在使用PerCall,因此在实例被销毁之后,我的缓存也是如此。

我的问题是,我有哪些缓存选项?我是否真的需要PerCall或者我可以将其设为单身,但是确保每次通话时EF上下文都是新的吗?

1 个答案:

答案 0 :(得分:1)

你对EF上下文和生命周期是正确的;它应该尽可能短暂。在网络(服务)场景中,它通常意味着“每个请求/呼叫”(最长)。

当然,您可以自己处理生命周期,但这是一个带有DI的IoC容器真正发光的场景。您只需将服务和EF上下文注册为“每个请求”,将缓存注册为单例,容器将为您完成繁重的工作并注入正确的依赖项。如果需要,您还可以进行更细粒度的生命范围确定。

一些最常见的:

有很多很好的教程和指南可以用WCF设置最流行的IoC容器,比如“How to Use Dependency Injection (Ninject) with WCF Services”。