2010-09-01 24 views
0

我们在IIS 6中托管WCF服务。当服务的第一个请求出现时,ServiceHostFactory创建ServiceHost。在ServiceHost的OnOpening()方法中,我们将一些数据加载到实现为静态属性的缓存中。如何在回收ApplicationPool后“预热”(填充缓存等)在IIS中托管的WCF服务?

由于加载数据需要大约1分钟,我们不希望“当日的第一个用户”等待缓存被填充。问题在于,ServiceHost以及缓存因ApplicationPool的每个循环而终止。是否有可能检测到回收并重新填充缓存?还是还有其他的最佳做法?我不能相信我们是唯一有这个问题的人...

在此先感谢!

+0

可能的复制(IIS6):http://stackoverflow.com/questions/2063461/iis-web-applications-warmup – chilltemp 2010-09-01 18:45:09

+0

见http://www.codeproject.com/Tips/508713/Custom-WCF-网络服务 - 热身 - 无论服务 – abatishchev 2013-03-10 07:30:09

回答

0

对于在IIS 6.0中启动时间较长的Web应用程序或服务,我总是使用简单的控制台应用程序来ping Web应用程序。该应用程序每隔几分钟由Windows调度程序运行。这不是最好的解决方案,但它是我发现的最简单的方法。如果您确定AppPool回收时间,则可以安排此类应用程序在回收后几分钟运行,并将应用程序添加到启动集。

+0

这是相当黑客是不是?但它是我们迄今为止唯一找到的解决方案...... – ceder 2010-09-02 09:19:22

+0

我对这个解决方案也不满意,但是我在很多项目上看到过它,我相信它被普遍接受。 – 2010-09-02 09:21:53

0

如果您可以更新到IIS7,则会有一个内置的热身api。 IIS: web applications warmup

+0

感谢您的回答 - 但没有机会更新到IIS 7 :-( – ceder 2010-09-02 06:12:18

+0

Bummer。然后我建议您查看我发布的链接作为可能的重复问题,他们有许多II6的替代品。 – chilltemp 2010-09-02 16:09:57