我使用 IIS 7.5 托管的测试 WCF Web 服务在一段时间不活动后(即每天的第一次调用)响应调用的速度一直很慢。
通过研究这个主题,我了解到在使用 IIS 时通常会遇到“应用程序预热”的问题(例如,请参见此处)。
我已采取建议的通常步骤来尝试缓解此问题:
- 安装了应用程序初始化模块。
- 禁用应用程序池空闲超时和常规回收时间间隔(即设置为“0”)。
- 为必要的应用程序池和我的应用程序编辑了
applicationhost.config
文件。autoStart=True
startMode="alwaysRunning"
preloadEnabled="true"
通过这些设置,我希望应用程序池在 IIS 启动时立即启动一个工作进程,并在现有的退出时启动一个新的工作进程。此外,我希望应用程序能够在工作进程中加载。
但是,对于每天的第一个呼叫,日志显示客户端发出呼叫与 Web 服务接收呼叫之间的时间差可能长达 10 秒。随后的呼叫通常在 2 秒内处理完毕。
奇怪的是,长响应时间并不能通过在命令后进行调用来重现iisreset
。我希望如此严厉的操作会使 Web 服务处于类似的“冷”境地,但情况似乎并非如此。
我想知道:
- 什么仍然可能导致应用程序“预热”的延迟?
iisreset
webservice 的状态跟随和长时间不活动有什么区别?- 我应该诉诸“心跳”解决方案来定期 ping 服务以使其保持活力吗?
在此先感谢您提供任何提示或见解。