我们有几个仓库,其中个别页面(例如:需要允许计划维护操作执行较长的请求(例如:5分钟).
然而,在一个repo中,将requesttimeout设置为360似乎完全无效!无论我们将这个值设置为什么,它的超时时间都是60。
<cfcomponent>
<cfsetting requesttimeout="360" />
<cffunction
name="doit"
access="public"
returntype="string"
output="true" >
<cfinclude template="arrComs.inc.cfm">
<cfset strHTMLReport = '<ul>'>
<cfloop array="#arrComs#" index="i">
<cfscript>
thisCom = CreateObject( 'component', i.fileSansExt );
skvResult = thisCom.generate();
// Sleep for 5 seconds to give MySQL a bit of breathing space
sleep( 3000 );
</cfscript>
<cfset strHTMLReport &= '<li>' & skvResult.msg & '</li>'>
</cfloop>
<cfset strHTMLReport &= '</ul>'>
<cfreturn strHTMLReport>
</cffunction>
</cfcomponent>
任何想法?我该去哪里诊断呢?有多少位置可以设置requesttimeout,为什么它看起来是特定于回购的?
SOLVED:从循环内调用的两个组件中删除相同的1行代码。这些行将RequestTimeout设置为60,从而覆盖父类中的超时设置。
Humble Pie Time:我的错误是忘记了在循环中调用的组件也有一行将超时设置为60秒的代码。虽然错误报告超时,但不清楚具体在哪里。事后看来,我应该在我的代码库中搜索数字60,这样我就能更快地找到这2行违规代码。
进一步思考,在研究这个问题时,我发现CFLOOP和CFQUERY都有超时限制,可以设置,所以为了彻底,我也增加了组件中MySQL查询的超时。
进一步考虑,在循环中较早调用的组件更改了稍后调用的组件的requesttimeout。因此,尽管我是通过检查父函数和它超时的函数来进行诊断的,但我没有任何理由怀疑进程中先前调用的组件。