我在 IIS 中有一个 Web 服务,在它的 ctor 中,我正在构建一个对象,如果它还不存在,我将它保存在 HttpContext.Cache 对象上。
当 IIS 重新启动(出于任何原因)时,缓存会被清除,并且仅当用户第一次激活某个功能时才会创建对象。我希望在加载 IIS 时执行 Ctor,而无需等待用户的操作。
我在 IIS 中有一个 Web 服务,在它的 ctor 中,我正在构建一个对象,如果它还不存在,我将它保存在 HttpContext.Cache 对象上。
当 IIS 重新启动(出于任何原因)时,缓存会被清除,并且仅当用户第一次激活某个功能时才会创建对象。我希望在加载 IIS 时执行 Ctor,而无需等待用户的操作。
我会Application_Start
在global.asax
. 只要应用程序中的任何资源被请求,您的对象的构造函数就会触发。第一个点击此资源的用户将受到点击。AFAIK,应用程序池启动时没有事件。
这是缓存数据的常见事情,并且 Web 上下文实际上会被回收,因为没有人使用该站点一段时间(通常为 20 分钟)。
您可以以独立于当前应用程序上下文的方式处理缓存(例如,持久缓存、分布式缓存......)
或者您只需修改您的 IIS,使其在 20 分钟空闲时间后不关闭应用程序池。您可以在此处找到执行此操作的说明:http: //brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/
关于如何在 ISS 启动时初始化某些内容的问题:这不是真的,IIS 没有关闭,它只是释放资源的应用程序池,它实际上关闭了在应用程序池中运行的 Web 应用程序。然后,每当用户点击该 Web 应用程序时,应用程序池将再次启动该应用程序。正如其他人已经提到的,最好的方法是初始化 global.asax 中的任何资源。global.asax app_start 将仅在您的 Web 应用程序再次初始化的那一刻执行...