组件中的ColdFusion RequestTimeout被忽略或无效

时间:2014-07-01 07:40:53

标签: timeout coldfusion-9

我们有几个回购,其中需要允许单个页面(例如,计划的维护操作)执行更长的请求(例如,5分钟)。

然而,在一个回购中,将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>

有什么想法吗?我在哪里可以帮助诊断这个?可以设置多少个位置请求超时,为什么它看起来像repo特定?

1 个答案:

答案 0 :(得分:3)

已解决:从循环内调用的2个组件中删除了相同的1行代码。这些行将RequestTimeout设置为60,从而覆盖父级中设置的超时。

Humble Pie Time:我的错误是忘记了循环内部调用的组件也有一行代码,将超时设置为60秒。虽然错误报告了超时,但尚不清楚确切的位置。事后我应该搜索我的代码库中的数字60,我会更快找到2条违规行。

进一步思考,在研究这个时,我发现CFLOOP和CFQUERY都有超时限制,可以设置为彻底性我也增加了组件中MySQL查询的超时。

进一步思考,在循环中先前调用的组件更改了稍后调用的组件的requesttimeout。因此,虽然我通过检查父函数和它超时的函数来诊断,但我没有任何理由怀疑先前在该过程中调用的组件。