自从我从 CF9 升级到 CF10 以来,我一直在与 cflocation 的错误作斗争。我已经做了很多次,但总是放弃,但今天它终于让我很恼火,是时候解决问题了(我希望如此)。
首先,很抱歉,因为我试图编写一个简单的测试用例来重现这个问题,但到目前为止我无法在原始代码之外重现它。
我有一个应该在一夜之间运行的多步骤导入过程。该过程由大约 10 个链接在一起的文件组成。当通过计划任务调用进程时,还会传递一个 URL 参数(计划任务)。如果参数不存在,则在每一步结束时它会停止并等待用户单击指向下一步的链接。如果参数确实存在,它使用 cflocation 移动到下一步。
在所有步骤中,第二个步骤是最复杂和最耗时的(来自多个 Web 服务请求的数据,然后需要加入、清理和插入数据库)。移至 CF10 后,这是第二步出现问题。该页面似乎工作正常,因为它到达了 cflocation 标记所在的页面的最底部,但它从不触发 cflocation。我添加了一个 cfmail 标记,以便在调用 cflocation 时向我发送电子邮件,该标记始终被发送,但 cflocation 再次不会触发。
没有比这更基本的了:
<cfif scheduledtask EQ "true">
<cfmail from="xxxxx” to="xxxx” subject="About to call duplicate" type="text/html">
<p>calling duplicate check - scheduledtask</p>
</cfmail>
<cflocation url="importDupCheck.cfm?scheduledtask=true" addtoken="false">
</cfif>
我知道 cfflush 和 cflocation 存在问题,我已经检查过了。
作为测试,我尝试将上述逻辑移到页面上,以便在 web 服务检索到所有数据之后但在处理之前,这次 cflocation 起作用了。我想这可能是一个超时问题,即使页面被允许完全加载,计划任务引擎也放弃了等待。我尝试通过一个包含以下内容的基本文件来测试它:
<cfset sleep(240000)>
* 4 minutes
在它调用 cflocation 之前,但它工作正常。
该过程中的其他步骤与 cflocation 一样,但不是这个。所有这些代码在 CF9 下运行良好,只是在 CF10 下失败。
有人对我应该在哪里寻找一些指示吗?
问候马克
* 更新* 所以我现在想出了如何用几行代码轻松地重现它。原来它与计划任务无关。
索引.cfm
<h1>Testing cflocation</h1>
<cfloop index="i" from="1" to="7000" ><!--- For me it stops working once the loop goes beyond 6808 rows --->
row <cfoutput>#i#</cfoutput>: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789<br/>
</cfloop>
<p>Now loading resultpage via cflocation</p>
<cflocation url="resultpage.cfm" addtoken="false">
结果页面.cfm
<h1>Made it!</h1>
<p>Reload the <a href="index.cfm">first page</a></p>
在我的测试中,我发现如果我循环 6808 次它可以工作,但 6809 次失败。有 7000 条记录,我们只是在谈论一个 36 KB 的文件……为什么这仅在 CF10 中失败?
最后一件事我应该注意以防它产生影响 - 我所做的一切都是通过 https 完成的。