2009-04-30 7 views
2

У нас есть приложение, которое может создавать электронные книги. Это приложение имеет модуль экспорта, который создает файл AIR, но это может занять некоторое время (в некоторых книгах 2500 страниц). Если мы экспортируем мы получаем следующую ошибку:Ошибка в потоке

Thread was being aborted. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Threading.ThreadAbortException: Thread was being aborted. 

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 

[ThreadAbortException: Thread was being aborted.] 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +501 
    System.Web.ApplicationStepManager.ResumeSteps(Exception error) +564 
    System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +141 
    System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +436 

Я изменил мое выполнение ExecutionTimeout до 3600 секунд, но он продолжает врезаться Arround 3 минуты. так что время связано ... каждый раз, когда мы приближаемся к 3-минутной аварии, я надеюсь, что кто-то может мне помочь.

+0

Как это устроено? в общей среде размещения? или посвященный/внутренний? – meandmycode

ответ

4

Я думаю, что Павел прав насчет причины исключения. И IIS, и ASP.NET имеют настройки, которые ограничивают максимальное количество времени, которое может потребовать запрос. Для ASP.NET он находится в файле Machine.Config (ищите элемент httpRuntime, атрибут executeTimeout). Он установлен на 90 секунд на моей машине разработки.

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

Долгосрочные задачи должны использовать асинхронное выполнение. При асинхронном выполнении фактическая работа обрабатывается в отдельном потоке. Это освобождает поток, который обрабатывает запрос для обработки других запросов, которые хороши для общей производительности вашего приложения.

Есть несколько хороших статей об этом. Например: http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

0

Довольно часто эта ошибка возникает из-за исключения OutOfMemory. Есть ли доступное InnerException?

0

У IIS есть защита от «прогонов», которая будет убивать поток/appdomain, если он работает слишком долго.

+0

Есть способы контролировать эти настройки, но на самом деле я не знаю, что они собой представляют. Я только что попал в проблему и знаю, что она существует. Вам придется копать вокруг сайтов IIS для получения справки о настройке, когда он перерабатывает рабочие процессы. –

 Смежные вопросы

  • Нет связанных вопросов^_^