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

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

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

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

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

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

Любые идеи?

ОБНОВЛЕНО 08.07.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="[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">

person pmascari    schedule 05.07.2013    source источник
comment
Можете ли вы опубликовать код, чтобы мы могли воспроизвести проблему самостоятельно?   -  person Matt Busche    schedule 06.07.2013
comment
Кроме того, взгляните на журналы исключений, которые генерирует CF, так как они могут указать вам на строку кода. Кроме того, используя инструменты разработчика Fiddler или Chrome, взгляните на ответ HTTP при запуске функции вне CFTHREAD и посмотрите, устанавливаются ли какие-либо другие заголовки.   -  person barnyr    schedule 06.07.2013
comment
Я обновил пост с кодом. Я также посмотрел в журналах и не могу найти ничего, относящегося к этой ошибке.   -  person pmascari    schedule 08.07.2013
comment
Этот cflocation находится только после потока в коде - поток выполняется асинхронно с ним (и, вероятно, завершится после его выполнения и, следовательно, после отправки ответа); это не имеет значения и не является причиной.   -  person Peter Boughton    schedule 08.07.2013
comment
Сообщение об ошибке довольно явное и похоже на то, что говорит Генри, поэтому загляните внутрь buildReport — оно будет содержать (или вызывать какой-либо другой код, который содержит) cfheader или другое cflocation или какую-то другую эквивалентную конструкцию, которая пытается установить HTTP. заголовок.   -  person Peter Boughton    schedule 08.07.2013


Ответы (2)


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

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

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

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

person Henry    schedule 05.07.2013
comment
Обновил пост с кодом. Чтобы было ясно... код в потоке просто создает и сохраняет PDF на сервере. Он вообще не предназначен для взаимодействия с браузером. Я ничего не вижу в журналах об этой ошибке - person pmascari; 08.07.2013
comment
Он вообще не предназначен для взаимодействия с браузером, и тем не менее в сообщении об ошибке говорится, что он пытается это сделать. Поскольку вы говорите, что он сохраняет PDF (эта информация должна быть в вопросе), я не удивлюсь, если где-то там есть (неправильный/ненужный) cfcontent. - person Peter Boughton; 08.07.2013
comment
Нашел. Просмотрел код и обнаружил случайный тег CFHEADER над одним из тегов CFDocument. - person pmascari; 16.07.2013
comment
@PaulMascari отлично, пожалуйста, отметьте это как правильный ответ. :) Спасибо - person Henry; 16.07.2013

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

person pmascari    schedule 15.07.2013