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



我们有几个仓库,其中个别页面(例如:需要允许计划维护操作执行较长的请求(例如: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。因此,尽管我是通过检查父函数和它超时的函数来进行诊断的,但我没有任何理由怀疑进程中先前调用的组件。

相关内容

  • 没有找到相关文章

最新更新