我有一个ASP .NET Web应用程序,后端正在与ASMX Web服务进行通信。我们已计算,初始请求的平均等待时间为20秒。我想知道是否有一种方法可以将Web服务发送到预编译的服务器,从而无需编译。
我们还注意到IIS倾向于回收其工作线程,这也会导致编译。流程本身不会经常访问,但它需要更快。
有什么想法吗?
提前致谢
更新:感谢所有的建议,我已经尝试了很多这些,这就是我找到的。回收时间关闭/修补是危险的,因为我不希望线程只是无所事事。经过进一步检查,该网站正在进行预编译,所以我的问题是为什么网络服务的初始启动时间为何?
现在:倾向于下面的热身脚本建议
更新:该服务正在来自其他计算机上的Web服务器。我们只看到了初始请求的问题。
答案 0 :(得分:7)
另一种方法是编写一个“预热脚本”,它只是从您的应用程序执行一个页面。这将使服务器为您启动,下一个人将受到快速打击。您还可以设置一个计划进程偶尔运行该脚本(例如,如果您安排线程池在凌晨4点回收,请安排预热脚本在凌晨4:01运行)
答案 1 :(得分:3)
您应该在构建/部署脚本中执行预补偿。
部署后的活动以编程方式请求每个网络资源并触发赞美似乎对我来说非常愚蠢。
Thomas的回答给了编译器,MSDN上还有一个指南,How to: Precompile ASP.NET Web Sites。
如果您正在使用MSBuild,请转到AspNetCompiler Task。
(我可能会对此作出评论,但我还没有被允许......没有足够的SO汁液)
答案 2 :(得分:2)
您是否尝试在框架文件夹中使用aspnet_compiler(例如%SYSTEMROOT%\ Microsoft.NET \ Framework \ v2.0.50727)?
您可以通过应用程序池上的设置来控制ASP.NET回收。如果它比设置更频繁地回收,则会导致其他原因(例如更改web.config等)。
答案 3 :(得分:1)
尝试在IIS中的页面或应用程序池配置中禁用应用程序重新打印。
IIS 6 (如果我没记错的话):右键单击AppPool - >标签“效果” - >取消选中“关闭空闲时间的工作流程”
IIS 7.5 有一个属性(似乎也是一个appPool设置),在X分钟的空闲时间后关闭AppPool。值0等于“永不关闭”
希望这有帮助
答案 4 :(得分:1)
在之前的位置,我们在最初假脱机时遇到了与WCF服务类似的问题,我们通过创建一个在部署后调用所有Web服务的简单程序来绕过它。
您也可以使用相同类型的程序作为保持活动服务,并且每隔5-10分钟ping一次服务等。