即使安装了应用程序初始化模块,第一个Web服务响应也很慢

时间:2015-07-20 11:36:03

标签: c# web-services wcf iis-7.5 warm-up

我使用IIS 7.5托管的测试WCF Web服务对于在一段时间不活动(即每天的第一次调用)之后进行的调用响应一直很慢。

通过研究这个主题,我收集到了#34;应用程序预热的问题"使用IIS时通常会遇到(例如see here)。

我采取了建议尝试缓解此问题的常规步骤:

  • 安装了Application Initialization Module
  • 禁用应用程序池空闲超时和常规回收时间间隔(即将它们设置为' 0')。
  • 修改了applicationhost.config文件,以便autoStart=TruestartMode="alwaysRunning"用于必要的应用池,preloadEnabled="true"用于我的应用。

通过这些设置,我希望应用程序池在启动IIS时立即启动工作进程,并在现有进程退出时启动新的工作进程。此外,我希望应用程序可以在工作进程中加载​​。

但是,对于每天的第一次呼叫,日志显示进行呼叫的客户端与接收呼叫的Web服务之间的时间差异可能长达10秒。后续调用通常在2秒内完成。

奇怪的是,通过在iisreset命令之后进行呼叫,再现了很长的响应时间 。我希望这种严厉的操作会使网络服务处于类似的“寒冷”状态。情况,但情况似乎并非如此。

我想知道:

  • 什么可能导致应用程序延迟"预热"?
  • iisreset之后的网络服务状态与长时间不活动状态有何不同?
  • 我是否应该选择"心脏跳动"定期ping服务以使其保持活力的解决方案?

提前感谢任何提示或见解。

1 个答案:

答案 0 :(得分:0)

我会尽力帮助你解决问题:

什么可能导致应用程序“预热”延迟?

预热应用程序并不意味着预热其资源。例如,如果在WCF应用程序(https://msdn.microsoft.com/en-us/library/ee677260(v=azure.10).aspx)中配置使用Application Fabric自动启动,并且此应用程序使用EF访问数据库,则不会启动DBContext。 如果您希望在应用程序预热后初始化这些资源,则需要实现一种初始化资源的方法,如缓存,DBContext等。

iisreset之后的网络服务状态和长时间不活动状态有何不同?

当应用程序花费很长时间不活动时,应用程序池可能会关闭并在收到任何请求时重新启动,就像回收一样。 此链接包含有关iisreset和应用程序池回收之间差异的兴趣信息,它可以帮助回答您的问题:https://fullsocrates.wordpress.com/2012/07/25/iisreset-vs-recycling-application-pools/

我是否应该采用“心跳”解决方案来定期ping服务以使其保持活力?

如果您继续访问您的服务,它可能会将其资源初始化在内存中,因此这可能是一个很好的方法。 无论如何,如果您的应用程序池配置为在某个间隔时间内回收,它将被回收并且您的资源在内存中丢失。 如果它看起来有问题,请关闭此功能转到IIS - >应用程序池 - >高级设置并设置常规时间间隔= 0 对于这个问题,这只是一些建议,您需要进行一些测试并找出更好的解决方案。