2011-10-01 5 views
0

J'ai une application ASP vanille qui s'exécute sur IIS 5.1. Le code ci-dessous dans un fichier ASP provoque l'IIS jeter l'erreur "L'opération a expiré". Cependant, malgré l'erreur, le processus continue à s'exécuter sur le serveur en arrière-plan et se termine finalement comme prévu. J'ai augmenté le délai d'attente ASP Script dans IIS via IIS MMC et le fichier ASP (Server.ScriptTimeout) de 90 secondes (par défaut) à 600, 1000 et même 10000 secondes (je connais les implications des délais d'attente de script très élevés) mais l'erreur s'est produite de manière cohérente, quel que soit le délai d'expiration du script. WebServ est une application COM + et j'ai observé que le processus qui s'exécute dans l'application prend environ 80 à 90 secondes. Cette application ne manipule aucun paramètre IIS en interne.L'opération a expiré - ASP

Bien que le code dans l'application COM + puisse être optimisé, je doute que les optimisations à elles seules puissent aider car l'application traite une grande quantité de données stockées dans SQL Server. Il y a donc de fortes chances que l'application nécessite plus de 90 secondes pour compléter le processus au fur et à mesure que les bases de données grandissent.

Par conséquent quelqu'un peut-il m'aider s'il vous plaît à comprendre 1. Pourquoi l'erreur "Expiration du délai d'exécution" se produit indépendamment du délai d'attente ASP Script défini? 2. Que devrions-nous faire pour acheter plus de temps pour le fichier ASP pour compléter le processus?

P.S. J'ai parcouru un certain nombre d'autres messages ici liés à ce message d'erreur, mais malheureusement je n'ai rien trouvé d'utile.

Merci.

<% 
Server.ScriptTimeout = 10000 

.... initialize the variables.... 

Set WebServ = CreateObject("WebServ.RunCommand") 

lcResult = WebServ.Call(SessionKey, ConfigID, Program, Function, Mode, Params) 

Set WebServ = Nothing 

With Response 
    .ContentType = "text/xml" 
    .Write(lcResult) 
End With 
%> 
+0

btw. http://msdn.microsoft.com/en-us/library/ms524831%28v=vs.90%29.aspx -> Le délai d'expiration ne prendra pas effet pendant le traitement d'un composant serveur. – NickD

Répondre

0

Veuillez essayer d'augmenter le délai d'attente dans le pool d'applications joint de l'application.

+0

Merci. Mais c'est IIS 5.1. Supporte-t-il les pools d'applications? J'ai déjà mentionné que l'augmentation du délai d'expiration ASP via la page MMC et ASP ne fait pas de différence à moins bien sûr si je fais quelque chose différemment la prochaine fois. – RanC

0

Quel devrait être le contenu de lcResult?

Placez plusieurs réponses.write et response.end dans votre code pour essayer de trouver l'endroit où se produit le délai d'expiration.

+0

Désolé, ci-dessus n'est pas clair. Pouvez-vous s'il vous plaît aviser où placer plusieurs instructions Response.Write et Response.End dans le fichier ASP ci-dessus? Quant au contenu de lcResult, il contient quelques lignes d'une très petite table au format XML. – RanC

+0

Je suis certain que le délai d'expiration se produit lors de l'exécution de la ligne lcResult = WebServ.Call (SessionKey, ConfigID, Programme, Fonction, Mode, Params). Mais le temps réel nécessaire pour compléter cette ligne ne se rapproche même pas de l'ensemble ScriptTimeout au début du script. – RanC

0

Je suggère d'ajouter des chaînes de débogage de sortie aux modules COM.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx

vous pouvez les visualiser avec votre débogueur ou DebugView (http://technet.microsoft.com/en-us/sysinternals/bb896647)

aswell i envelopperait chaîne de débogage de sortie en Module COM pour l'utiliser depuis ASP.

+0

Comme mentionné dans un de mes commentaires ci-dessous, j'ai isolé la méthode dans l'application COM dans laquelle le délai d'attente se déclenche.Cette méthode tente d'insérer un grand nombre (~ 4 Ko) de lignes dans une table SQL Server dans une boucle, mais l'ensemble du processus COM se termine bien moins de 90 secondes, ce qui est très inférieur à ScriptTimeOut défini au début du script. Toujours le délai d'expiration de l'opération déclenche. Une raison pour laquelle vous pouvez penser? Par exemple faire des boucles avec des itérations assez grandes sujettes à ce type d'erreurs? La boucle dans l'application COM n'est pas une boucle infinie. – RanC

+0

cela se produit-il si vous travaillez seul sur le serveur ou y a-t-il toujours du trafic? de toute façon, insérer 4k de lignes ne devrait jamais prendre 90 secondes. Je pense que cela pourrait être une commande ado/connexion timeout à l'intérieur de l'objet com. ce qui dit le profileur sql pendant que vous obtenez l'erreur d'asp? – NickD