我可以告诉WAS在回收后启动新的AppPool吗?

时间:2011-10-31 08:51:16

标签: nhibernate iis-7 fluent-nhibernate was

我有这个管理站点正在使用(Fluent)NHibernate进行数据访问。如前所述elsewhere,由于创建了Configuration对象,SessionFactory的初始化很慢。建议的解决方案是将Configuration对象序列化为磁盘,然后重复使用它,直到实体程序集或流畅的初始化程序集更改。

从理论上讲,这些听起来非常优雅和吸引人。实际上,即使使用1实体模型,反序列化配置大约需要500毫秒,并且会创建另外500毫秒的SessionFactory。 (这与没有序列化的启动时间相当,但我怀疑一旦我将更多实体放在那里,收益就会明显。)

IIS回收我的应用程序池后,它不会再次启动它,直到有新请求进入。所以使用IIS的默认回收管理(每29小时),以及管理员登录我的管理站点的可能情况每天,这个管理员登录时几乎会发生1秒延迟,给人一种起始网站缓慢的印象。

所以,我想知道是否有任何方法可以告诉IIS / WAS实际启动替换应用程序池作为回收的一部分而不是等待直到下一个请求进来?我意识到这一点反对WAS试图在任何给定时间保持少量并发应用程序池运行的想法,但它会解决我的问题(因为我假设我的ServiceHostFactory + ServiceHost将在应用程序池启动时立即创建)。

1 个答案:

答案 0 :(得分:0)

IIS 7 autostart feature会帮助你吗?此外,您可以实现System.Web.Hosting.IProcessHostPreloadClient接口以确保在池启动时应用程序已启动(有关示例,请参阅this blog post)。