0

我从 CFThread 收到一个奇怪的错误。我把它包裹在一个在 CFThread 之外可以完美运行的函数上。但是,它需要大约 20 秒才能完成,所以我将其发送到 CFThread,然后 CFLocation 将用户转到一个新页面,并在完成时提醒他们。

如果有问题,它也包含在 CFTRY 中给我发电子邮件。

我收到 CCFCATCH.Message 所在的电子邮件:

“CFThread 未能将标头设置为响应,因为请求已经完成”

我在 Google 上找不到对此类错误的任何引用。我假设它不喜欢我在调用线程后直接使用 CFLocation 的事实。所以,为了它,我尝试使用 META REFRESH 来重定向用户。相同的错误结果。

有任何想法吗?

2013 年 7 月 8 日更新:

代码在这里:

<cfset admsID = replace(createUUID(),"-","","all")>
<cfthread action="run" name="runADMS#admsID#" admsID="#admsID#" formstruct="#form#">
<cftry> 
<cfobject component="cfc.AutoDealerBrandMarketShare" name="adms">
<cfset rptPDF = adms.buildReport(dealer=formstruct.chosenDealer,mkt=formstruct.DMACode,make=formstruct.Make,rptID=admsID)>
<cfcatch type="any">
<cfmail to="pmascari@mysite.com" from="techsupport@mysite.com" subject="ADMS Error">
Error occurred running a Polk Auto Dealer Market Share report.
#cfcatch.Message#
#cfcatch.detail#
</cfmail>
</cfcatch>
</cftry>
</cfthread> 
<cflocation url="http://www.usercanwaithere.com">
4

2 回答 2

5

如果您考虑一下,这是有道理的,因为 cfthread 在将响应发送到客户端之后仍然可以运行。因此,在标题中设置新的东西不再有意义,因为“船已经航行了”。

如您所知,CFThread 允许您生成一个新线程,与请求并行进行一些处理。即使在请求完成后,该线程也可以继续运行。由于该线程未连接到生成它的 HTTP 请求,因此从该线程执行的任何尝试更改 HTTP 请求/响应中的某些内容的操作(例如设置标头、cookie、响应代码等)都没有意义,也不应该执行.

因此,不应在 cfthread 中使用 cfcookie、cfheader、cfcontent 等,因为它可能导致不可预知的行为。

-- Rupesh Kumar,Adobe ColdFusion 工程师

于 2013-07-05T21:25:12.710 回答
0

找到了。浏览代码并在其中一个 CFDocument 标记上方找到一个随机 CFHEADER 标记。

于 2013-07-15T20:05:13.693 回答