【问题标题】:IIS Application Recycle drops static classesIIS 应用程序回收丢弃静态类
【发布时间】:2014-08-01 07:14:56
【问题描述】:

我在我的 WCF 服务中使用 Simple Injector。从 VS2010 运行它时,一切都很好。但是,当我使用 IIS 7 将它发布到我的服务器时,经过一段时间(20 分钟,计数)后,我的 WCF 会丢失容器中所有已注册的程序集、模块、类。

我猜 IIS 会回收 WCF 服务应用程序池并丢弃我的容器注册。

谁能帮我解决这个问题?

【问题讨论】:

  • 对于任何严肃的工作,我建议自托管任何 WCF 服务 - 正是出于这个原因,在 IIS 中托管并不能让您完全控制正在发生的事情。
  • Self-Hosting WCF Services - 或者只是在谷歌或必应搜索......

标签: wcf iis dependency-injection dependencies code-injection


【解决方案1】:

虽然存在许多使用自托管 WCF 服务的合法案例,但是,仅仅因为 IIS 回收而接近自托管可能会适得其反。

在 IIS 中托管可为您在开发和日常运营中带来很多好处,我不会重复您可以在 google 搜索中轻松找到的好处。

因此,当 IIS 收到对您的应用程序的第一个请求时,它将根据与您的 Web 应用程序关联的应用程序池中的设置启动一个名为“w3wp.exe”的工作进程。默认情况下,IIS 将在 20 分钟的空闲时间内关闭。查看应用程序池的高级设置,你会发现很多生命周期的设置。您不会通过开箱即用的自托管获得如此灵活和健壮性。

所以基本上你可以有几个选择,只要你决定继续使用 IIS 托管。

  1. 将空闲超时更改为 24 小时甚至一个月。
  2. 编写一个小程序或使用 cUrl 每 10 分钟 ping 一次您的应用程序。
  3. 保持原样
  4. 如果您想在操作期间保持状态,请将它们保存在磁盘中,然后在由请求触发的下一次启动期间加载它们。

【讨论】:

  • 我不认为 OP 介意 IIS 回收应用程序,但他遇到的问题是,在某个时间窗口之后,他的服务停止运行,因为在那之后似乎他的应用程序状态被清除,而 WCF 启动代码不再被调用。
猜你喜欢
  • 2012-06-19
  • 2011-09-20
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多