我使用IIS 7.5托管的测试WCF Web服务对于在一段时间不活动(即每天的第一次调用)之后进行的调用响应一直很慢。
通过研究这个主题,我收集到了#34;应用程序预热的问题"使用IIS时通常会遇到(例如see here)。
我采取了建议尝试缓解此问题的常规步骤:
applicationhost.config
文件,以便autoStart=True
和startMode="alwaysRunning"
用于必要的应用池,preloadEnabled="true"
用于我的应用。通过这些设置,我希望应用程序池在启动IIS时立即启动工作进程,并在现有进程退出时启动新的工作进程。此外,我希望应用程序可以在工作进程中加载。
但是,对于每天的第一次呼叫,日志显示进行呼叫的客户端与接收呼叫的Web服务之间的时间差异可能长达10秒。后续调用通常在2秒内完成。
奇怪的是,通过在iisreset
命令之后进行呼叫,再现了很长的响应时间 。我希望这种严厉的操作会使网络服务处于类似的“寒冷”状态。情况,但情况似乎并非如此。
我想知道:
iisreset
之后的网络服务状态与长时间不活动状态有何不同?提前感谢任何提示或见解。
答案 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 对于这个问题,这只是一些建议,您需要进行一些测试并找出更好的解决方案。