2013-07-05 47 views
0

我从CFThread得到一个奇怪的错误。我将它封装在一个在CFThread之外完美运行的函数中。但是,大约需要20秒才能完成,因此我将它拍摄到CFThread,然后将用户定位到新页面,并在完成后提醒用户。ColdFusion - CFThread无法设置标题?

它也被包裹在CFTRY中,如果有问题发邮件给我。

我收到的电子邮件,其中CFCATCH.Message是:

“CFThread未能头设置为响应,要求已经完成了”

我找不到这样的错误任何参考在Google上。我假设它不喜欢我在调用线程后直接使用CFLocation的事实。所以,对于它而言,我尝试使用META REFRESH来重定向用户。相同的错误结果。

任何想法?

修订13年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="[email protected]" from="[email protected]" 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"> 
+1

你能发表一些代码,以便我们可以自己重现这个问题吗? –

+0

另外,看看CF生成的异常日志,因为这可能会指向一行代码。另外,使用Fiddler或Chrome开发工具,当您在CFTHREAD之外运行该函数并查看是否设置了其他头文件时,请查看HTTP响应 – barnyr

+0

我使用代码更新了该文章。我还查看了日志,找不到任何涉及此错误的内容。 – pmascari

回答

5

如果你想想看,这是有道理的,因为cfthread仍能工作的响应已发送到客户端之后。因此,在船头设置新的东西不再有意义,因为“船舶航行”。

正如你所知,CFThread允许你产生一个新的线程做一些 并行处理请求。即使请求已完成,此线程仍可以继续运行 。由于此线程不是 连接到产生它的HTTP请求,因此尝试在HTTP 请求/响应类似设置标头,cookie,响应代码等 中尝试更改内容的任何操作都不合理,不应该这样做。

所以不应该使用cfcookie,cfheader,cfcontent等在 cfthread,因为它可能会导致不可预知的行为。

- Rupesh Kumar, Adobe ColdFusion engineer

+0

用代码更新了帖子。要清楚...线程中的代码只需创建PDF并将其保存到服务器。它并不打算与浏览器进行交互。我在日志中没有看到有关此错误的信息 – pmascari

+1

_“它根本不是要与浏览器进行交互” - 但错误表明它正在尝试这样做。既然你说它是保存PDF(这个信息应该在问题中),那么如果在某处有一个(不正确/不必要的)cfcontent,我不会感到惊讶。 –

+1

找到了。通过代码搜索并在CFDocument标签之上找到一个随机的CFHEADER标签。 – pmascari

0

发现了它。通过代码搜索并在CFDocument标签之上找到一个随机的CFHEADER标签。