我有一个 WCF 服务,它缓存某些数据并使用它来响应 Web 请求。为了满足这个要求,我将服务设为单例(使用InstanceContextMode.Single
和ConcurrencyMode.Multiple
(是的,它是线程安全的))。
我尝试使用以下绑定将服务的超时设置为最大值:
<binding name="WebHttpBinding" receiveTimeout="24.20:31:23.6470000">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None" />
</security>
</binding>
我的问题是服务实例以不可预知的时间间隔死亡,这意味着第一个 Web 请求命中将导致缓存被重建(一个非常慢的过程)。
理想情况下,缓存将在每天的固定时间重建,而不必受到 Web 请求的影响。我可以将应用程序池设置为在设定的时间回收,但这仍然无法解决服务直到第一个 Web 请求才被实例化的问题。我宁愿不必编写一个向服务发送请求的预定脚本,因为这有点骇人听闻。
在 WCF 服务中执行缓存是否有更好的策略?其他人在这里做了什么?有最佳实践吗?