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, поскольку это может привести к непредсказуемому поведению.
Нашел это. Пролистал код и нашел случайный тег CFHEADER над одним из тегов CFDocument.