web-dev-qa-db-fra.com

Délai d'expiration ASP.NET UpdatePanel

Je fais une demande d'une UpdatePanel qui prend plus de 90 secondes. Je reçois cette erreur de timeout:

Erreur d'exécution Microsoft JScript: Sys.WebForms.PageRequestManagerTimeoutException: demande du serveur Fin du temps.

Est-ce que quelqu'un sait s'il existe un moyen d'augmenter le délai avant l'expiration de l'appel?

51
ctrlShiftBryan

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

AsyncPostBackTimeout="300"
87
CodeRedick

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 page de contenu. Donc, pour changer la propriété ScriptManager.AsyncPostBackTimeout dans la page de contenu, je devais accéder à l'objet dans le fichier aspx.cs de la page de contenu:

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

Cela a fait le tour (en ignorant simplement 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> 
11
ctrlShiftBryan

Veuillez suivre les étapes ci-dessous:

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

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

Cela résoudra votre problème.

7
rajalingam

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

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

ou définissez-le en définissant la propriété Server.ScriptTimeout.

2
Bravax

Eh bien, je suppose que cela fonctionnerait si vous voulez simplement que la demande soit rejetée avec le potentiel qu’elle n’exécute jamais complètement ...

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

En outre, envisagez de changer le service Web qui reçoit l'appel afin de le déplacer plus rapidement. 90 secondes peuvent aussi bien représenter l'infini du temps passé sur Internet.

1
NotMe

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

Vous pouvez le faire de plusieurs manières:

  1. Une chaîne de connexion a une propriété ConnectionTimeout. C'est une propriété qui détermine le nombre maximal de secondes pendant lequel votre code attendra qu'une connexion de la base de données soit ouverte. Vous pouvez définir le délai de connexion dans la section Chaîne de connexion dans 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" dans la page .aspx

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

    command.CommandTimeout = 30*1000;
    

J'espère que vous avez une solution!

0
Pradeep atkari