Сервер не может изменить файлы cookie после отправки заголовков HTTP - PullRequest
3 голосов
/ 01 апреля 2011

Я создаю веб-приложение на C #.

Когда моя страница загружается, я запускаю асинхронный поток для обработки некоторых данных. Частью этой обработки является обновление cookie. Однако, когда я сохраняю cookie в ответ на

System.Web.HttpContext.Current.Response.Cookies.Add(cookie), я получаю следующее исключение:

HttpException: Server cannot modify cookies after HTTP headers have been sent.

Как я могу обойти или исправить это?

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011

Если у вас нет веских причин, вам не следует раскручивать фоновые рабочие потоки в запросе ASP.NET.В конечном итоге вам все еще нужно дождаться, пока этот поток завершит свою работу, прежде чем отправлять ответ обратно в браузер.

Похоже, поток ответов уже частично записан, а затем ваш поток пытается добавитьcookie.

Я бы переосмыслил вашу стратегию здесь и прочел следующие рекомендации:

Глава 6 - Повышение производительности ASP.NET - Рекомендации по созданию потоков

Это выглядит как устаревший документ, но принципы остаются в силе.Если причина обращения к процессору данных состоит в том, чтобы предотвратить блокирование и использование ресурсов рабочим потоком ASP.NET из-за того, что процессор данных работает долго, вместо этого рассмотрите возможность сделать страницу асинхронной страницей .

1 голос
/ 01 апреля 2011

Да, файлы cookie являются частью ответа http, и в асинхронной операции вы ничего не можете изменить после того, как ответ сгенерирован и отправлен в браузер.

Чтобы обойти это, я рекомендую построить Ajax-цикл в браузере, чтобы получить результат асинхронной операции.После завершения операции вы можете вернуть cookie с ответом ajax.

0 голосов
/ 01 апреля 2011

Что если он находится в preinit или init?не уверен, если это поможет, хотя.http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

...