我遇到了 WCF 问题和启动速度慢的问题,因此我将所有代码切换为使用 WebAPI。虽然启动时间已大幅减少(约 8-15 秒降至约 2 秒),但启动时仍然有奇怪的延迟。目前约为 2 秒,但后续调用始终低于 0.5 秒,直到发生超时。
我检查了所有应用程序池设置,以确保没有任何启动延迟或空闲超时设置。
我找到了这个链接Very slow first call to web service这对我没有帮助 - 我在冷启动时仍然遇到相同的速度问题。还找到了这个First call to web service each day is slow再次似乎不适用于我。
我在 WebAPI 服务上启用了跟踪,发现第一次和第二次调用之间的唯一区别是显示 WebHostHttpControllerTypeResolver.GetControllerTypes
的两行。我似乎找不到太多关于此的信息,但这是我能看到的唯一区别。
是否有任何其他类型的日志记录可以用来确定实际发生的情况?
最佳答案
这是我在该问题下的对话摘要
Well the timeouts are never the same, but the same ballpark...to expand, i publish the server - first call is ~2 seconds - subsequent calls are ~0.5 seconds. After maybe 20 minutes (hard to determine the actual time) the same occurs - ~2 then ~0.5.
20
分钟 - 这是默认的AppPool 空闲超时(分钟)。因此,听起来 IIS 会卸载您的应用程序池,以便下次您在 20 分钟后点击它时,它会“再次加载所有内容”(不确定是否会重新编译),因此会出现延迟。您可以将其设置为 0
以禁用超时(注意后果)或只是将其设置为更大的值。
如果您禁用超时,您可能需要考虑添加计划任务,以便在使用率较低时(例如凌晨 1:00 或适合您需要的时间)回收您的应用程序池。
WCF 注释
I was having issues with WCF and slow startup times
这也是我的经验(使用 IIS 托管的 WCF),就像我上面提到的那样,只是禁用了我的 WCF 服务的应用程序池的超时。这让它们保持美好和温暖。此外,当我知道我的系统不会被用来允许 IIS 执行一些内务处理时,我每天都会进行一次回收事件。
对于 IIS 而言,托管在 IIS 中的 WCF 只是另一个 IIS 应用程序。 :)
关于c# - WebAPI 首次调用服务缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056536/