2008-10-01 6 views
47

Je fais une demande d'un UpdatePanel qui prend plus de 90 secondes. Je reçois cette erreur de délai d'attente:ASP.NET UpdatePanel Time Out

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerTimeoutException: The server request timed out.

Est-ce que quelqu'un sait s'il y a un moyen d'augmenter la quantité de temps avant que le temps d'appeler?

Répondre

83

Il y a une propriété sur le ScriptManager:

AsyncPostBackTimeout="300" 
+1

Merci. C'est juste venu en aide pour moi. – David

+2

où devrait-il être ajouté? côté serveur/côté client, toute autre explication serait très appréciée. –

+0

Doubler les secondes allouées avant timeout en réglant le AsynchPostBackTimeout = "180" a bien fonctionné pour ma solution. – landsteven

2

Cela peut être configurable en modifiant le délai d'expiration du script ASP dans IIS.

Il se trouve dans les propriétés de votre site Web, répertoire virtuel, bouton de configuration, puis dans l'onglet options.

ou de le définir en définissant la propriété Server.ScriptTimeout.

+0

Server.ScriptTimeout est pour le script normal ou pour l'async? –

+0

Script normal, pas de script asynchrone. – Bravax

11

Cela a fait l'affaire (fondamentalement juste en ignorant tous les délais d'attente):

<script type="text/javascript"> 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) { 
      if (args.get_error() && args.get_error().name === 'Sys.WebForms.PageRequestManagerTimeoutException') { 
          args.set_errorHandled(true); 
      } 
     }); 
    </script> 
+0

Je reçois l'erreur avec le code ci-dessus. 'ReferenceError: Sys n'est pas défini' –

1

Eh bien, je suppose que cela pourrait fonctionner si vous voulez juste la demande rejetée avec le risque qu'elle ne soit jamais complètement exécutée ...

Ajoutez une propriété AsyncPostBackTimeOut à la balise ScriptManager pour modifier votre délai d'attente par défaut de 90 secondes à quelque chose de plus raisonnable pour votre application.

En outre, regardez dans la modification du service Web recevant l'appel pour se déplacer plus rapidement. 90 secondes peuvent aussi bien être infinies en temps Internet.

37

Dans mon cas, l'objet ScriptManager a été créé dans un fichier de page maître qui a ensuite été partagé avec les fichiers de la page de contenu. Donc, pour changer la propriété ScriptManager.AsyncPostBackTimeout dans le contenu page, je devais accéder à l'objet dans le fichier aspx.cs de contenu de la page:

protected void Page_Load(object sender, EventArgs e) 
{ 
    . . . 
    ScriptManager _scriptMan = ScriptManager.GetCurrent(this); 
    _scriptMan.AsyncPostBackTimeout = 36000; 
} 
+0

Bonjour @narayan cela fonctionnera-t-il également pour 'RadScriptManager'? –

+0

@NagibMahfuz, malheureusement, n'ont pas les moyens d'essayer RadScriptManager, donc je ne peux pas répondre définitivement. Si vous l'essayez vous-même, dites-nous comment cela a fonctionné. – narayan

+1

oui ça marche aussi pour 'RadScriptManager'. –

4

S'il vous plaît suivez les étapes ci-dessous:

Étape 1: Dans web.config, définissez httpRuntime maxRequestLength="1024000" executionTimeout="999999"

Étape 2: Ajoutez le paramètre suivant à votre ScriptManager de page Web: AsyncPostBackTimeout ="360000"

Cela permettra de résoudre votre problème.

0

Le problème que vous rencontrez est lorsque votre application s'exécute dans un délai d'attente sur une requête de base de données SQL. Cela prend plus de temps que la valeur par défaut pour retourner la sortie. Vous devez donc augmenter la propriété ConnectionTimeout.

Vous pouvez le faire de plusieurs façons:

  1. Une chaîne de connexion a une propriété ConnectionTimeout. C'est une propriété qui détermine le nombre maximum de secondes que votre code attendra pour qu'une connexion de la base de données soit ouverte. Vous pouvez définir le délai d'attente de connexion dans la section de chaîne de connexion au web.config.

    <connectionstrings> 
        <add name="ConnectionString" 
         connectionstring="Database=UKTST1;Server=BRESAWN;uid="  system.data.sqlclient="/><br mode=" hold=" /><br mode=" html="> <asp:ToolkitScriptManager runat=" server=" AsyncPostBackTimeOut=" 6000="><br mode="> 
        </add> 
    </connectionstrings> 
    
  2. Vous pouvez mettre AsyncPostBackTimeout="6000" à la page .aspx

    <asp:ToolkitScriptManager runat="server" AsyncPostBackTimeOut="6000"> 
    </asp:ToolkitScriptManager> 
    
  3. Vous pouvez régler le délai dans SqlCommand, où vous appelez la procédure stockée dans le fichier .cs.

    command.CommandTimeout = 30*1000; 
    

Espoir vous avez une solution!

Questions connexes