ColdFusion - CFThread не удалось установить заголовок?

Я получаю странную ошибку от CFThread. У меня это обернуто вокруг функции, которая отлично работает, когда за пределами CFThread. Но на это уходит около 20 секунд, поэтому я выбрасываю его в CFThread, затем CFLocation для пользователя на новую страницу и предупреждаю его, когда это будет сделано.

Это также обернуто в CFTRY, чтобы написать мне, если возникнет проблема.

Я получаю электронные письма, где CFCATCH.Message:

"CFThread не удалось установить заголовок для ответа, так как запрос уже выполнен"

Я не могу найти ссылку на такую ​​ошибку в Google. Я предполагаю, что мне не нравится тот факт, что я использую CFLocation непосредственно после вызова Thread. Итак, черт возьми, я попытался использовать META REFRESH, чтобы вместо этого перенаправить пользователя. Тот же результат ошибки.

Есть идеи?

ОБНОВЛЕНО 7/8/13:

Код здесь:

<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">

2 ответа

Решение

Если вы думаете об этом, это имеет смысл, потому что cfthread все еще может работать после того, как ответ был отправлен клиенту. Следовательно, устанавливать что-то новое в заголовке больше не имеет смысла, потому что "корабль отплыл".

Как вы знаете, CFThread позволяет создавать новый поток, выполняющий некоторую обработку параллельно с запросом. Этот поток может продолжать работать даже после завершения запроса. Поскольку этот поток не связан с запросом HTTP, который его породил, любая операция, выполняемая из потока, который пытается что-то изменить в запросе / ответе HTTP, например установка заголовка, файла cookie, кода ответа и т. Д., Не будет иметь смысла и не должна выполняться,

Поэтому не следует использовать cfcookie, cfheader, cfcontent и т. Д. Внутри cfthread, поскольку это может привести к непредсказуемому поведению.

- Рупеш Кумар, инженер Adobe ColdFusion

Нашел это. Пролистал код и нашел случайный тег CFHEADER над одним из тегов CFDocument.

Другие вопросы по тегам