Question

Nous avons une application qui peut créer des livres électroniques. Cette application a un module d’exportation qui crée un fichier AIR, mais cela peut prendre un certain temps (certains livres ont 2500 pages). Si nous exportons, nous obtenons l’erreur suivante:

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

J'ai changé mon délai d'exécution au moment de l'exécution à 3600 secondes, mais il continue de planter pendant 3 minutes. le temps presse donc… chaque fois que nous approchons des 3 minutes qui s’écrasent, j’espère que l’on pourra m'aider.

Était-ce utile?

La solution

Je pense que Paul a raison sur la cause de l'exception. IIS et ASP.NET ont tous deux des paramètres qui limitent le temps maximal qu'une demande peut prendre. Pour ASP.NET, il se trouve dans le fichier Machine.Config (recherchez l'élément httpRuntime, attribut executionTimeout). Il est réglé à 90 secondes sur ma machine de développement.

Toutefois, je ne vous conseillerais pas de modifier ce paramètre, car il est là pour vous assurer que votre application ne sera pas bloquée par une requête incorrecte.

Les tâches à exécution longue doivent utiliser une exécution asynchrone. Avec l'exécution asynchrone, le travail réel est traité sur un thread séparé. Cela libère le thread qui gère la demande pour gérer d'autres demandes, ce qui est bon pour les performances globales de votre application.

Il existe de bons articles sur ce sujet. Par exemple: http://msdn.microsoft.com/en-us/magazine /cc163725.aspx

Autres conseils

Très souvent, cette erreur se produit réellement à partir d'une exception OutOfMemory. Une exception InnerException est-elle disponible?

IIS dispose d'une protection de thread "en fuite" qui va tuer un thread / appdomain s'il fonctionne trop longtemps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top