2013-07-05 87 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標籤。