我从CFThread收到一个奇怪的错误。我把它包装在一个函数中,这个函数在CFThread之外运行得很好。但是,它需要大约20秒才能完成,所以我将其发送到CFThread,然后CFLocation用户到一个新页面,并在完成时提醒他们。
它还封装在CFTRY中,以便在出现问题时给我发电子邮件。
我收到了CFCATCH.Message所在的邮件:
"CFThread无法将标头设置为响应,因为请求已完成“
我在谷歌上找不到任何关于这种错误的信息。我假设它不喜欢我在调用线程之后直接使用CFLocation的事实。所以,最糟糕的是,我尝试使用元刷新来重定向用户。相同的错误结果。
有什么想法吗?
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">发布于 2013-07-06 05:25:13
如果你仔细想想,这是有意义的,因为cfthread在响应被发送到客户端之后仍然可以运行。因此,在header中设置新的内容不再有意义,因为“船已经启航了”。
正如你所知道的,CFThread允许你产生一个新的线程,在处理请求的同时进行一些处理。即使在请求完成之后,此线程也可以继续运行。因为这个线程没有连接到产生它的HTTP请求,所以从这个线程执行的任何操作试图更改HTTP请求/响应中的某些内容,比如设置头、cookie、响应代码等,都是没有意义的,也不应该执行。
所以不应该在cfthread中使用cfcookie、cfheader、cfcontent等,因为它们会导致不可预知的行为。
-- Rupesh Kumar, Adobe ColdFusion engineer
发布于 2013-07-16 04:05:14
找到了。我仔细查看了代码,发现其中一个CFDocument标签上面有一个随机的CFHEADER标签。
https://stackoverflow.com/questions/17496828
复制相似问题