【问题标题】:C#: How to execute Ctor function when IIS is restartingC#:IIS重启时如何执行Ctor函数
【发布时间】:2013-09-19 17:54:13
【问题描述】:

我在 IIS 中有一个 Web 服务,在它的 ctor 中,我正在构建一个对象,如果它尚不存在,我将其保存在 HttpContext.Cache 对象中。

当 IIS 重新启动(出于任何原因)时,缓存会被清除,并且只有在用户第一次激活某个功能时才会创建对象。我希望在加载 IIS 时执行 Ctor,而无需等待用户的操作。

【问题讨论】:

  • 你能使用静态构造函数吗? msdn.microsoft.com/en-us/library/k9x6w0hc.aspx
  • 为什么?在请求用户操作之前是否不需要 Web 服务?
  • 第一次需要用户操作时需要 Web 服务,但我构建到缓存中的对象可能需要几分钟才能创建,我不希望用户等待 2 分钟。我希望缓存可以随时保存信息,而当用户不使用它时,网站本身可能会被冻结,我真的不在乎。
  • application_start 可能是一个很好的解决方案,我会试试的。谢谢!
  • 好的,我读了一些关于 application_start 的内容,它似乎在第一次执行操作时运行,而不是在第一次应用程序池加载时运行

标签: c# web-services caching iis


【解决方案1】:

我会在global.asaxApplication_Start 事件中实例化对象。只要应用程序中的任何资源被请求,您的对象的构造函数就会触发。第一个点击此资源的用户将受到点击。 AFAIK,当应用程序池启动时没有事件。

【讨论】:

  • 这是否意味着没有对 Web 服务的实际请求就无法运行构造函数?
【解决方案2】:

缓存数据是很常见的事情,并且 Web 上下文实际上会被回收,因为在一定时间内(通常是 20 分钟)没有人使用该网站。

您可以以独立于当前应用程序上下文的方式处理缓存(例如持久缓存、分布式缓存...)

或者您只需修改您的 IIS,使其在 20 分钟空闲时间后不关闭应用程序池。 您可以在此处找到执行此操作的说明:http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

关于如何在 ISS start 上初始化某些内容的问题: 这不是真的,IIS 没有关闭,它只是释放资源的应用程序池,它实际上关闭了在应用程序池中运行的 Web 应用程序。 然后,每当用户点击该 Web 应用程序时,应用程序池将再次启动该应用程序。 正如其他人已经提到的,最好的方法是初始化 global.asax 中的任何资源。 global.asax app_start 将仅在您的 Web 应用程序再次初始化的那一刻执行...

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多