109 votes

Délai de connexion dépassé pour le serveur SQL

Puis-je augmenter le délai en modifiant la chaîne de connexion dans le fichier web.config ?

212voto

Darin Dimitrov Points 528142

Oui, vous pourriez ajouter ;Connection Timeout=30 à votre chaîne de connexion et spécifier la valeur que vous souhaitez.

La valeur de délai définie dans la propriété Connection Timeout est un temps exprimé en secondes. Si cette propriété n'est pas définie, la valeur de délai pour la connexion est la valeur par défaut (15 secondes).

De plus, en définissant la valeur de délai à 0, vous spécifiez que votre tentative de connexion attend un temps infini. Comme décrit dans la documentation, il s'agit de quelque chose que vous ne devriez pas définir dans votre chaîne de connexion:

Une valeur de 0 indique aucune limite, et devrait être évitée dans une ConnectionString car une tentative de connexion attend indéfiniment.

31voto

David Lively Points 16026

Hmmm...

Comme Darin l'a dit, vous pouvez spécifier une valeur de délai d'attente de connexion plus élevée, mais je doute que ce soit vraiment le problème.

Lorsque vous obtenez des délais d'attente de connexion, c'est généralement un problème avec l'un des éléments suivants :

  1. Configuration du réseau - connexion lente entre votre serveur web/boîte de développement et le serveur SQL. Augmenter le délai d'attente peut corriger cela, mais il serait sage d'enquêter sur le problème sous-jacent.

  2. Chaîne de connexion. J'ai vu des problèmes où un nom d'utilisateur/mot de passe incorrect donnera, pour une raison quelconque, une erreur de délai d'attente au lieu d'une erreur réelle indiquant "accès refusé". Cela ne devrait pas se produire, mais c'est la vie.

  3. Chaîne de connexion 2 : Si vous spécifiez le nom du serveur de manière incorrecte, ou de manière incomplète (par exemple, mysqlserver au lieu de mysqlserver.webdomain.com), vous obtiendrez un délai d'attente. Pouvez-vous pinguer le serveur en utilisant le nom du serveur exactement tel qu'il est spécifié dans la chaîne de connexion à partir de l'invite de commande?

  4. Chaîne de connexion 3 : Si le nom du serveur est dans votre DNS (ou fichier hosts), mais pointe vers une IP incorrecte ou inaccessible, vous obtiendrez un délai d'attente au lieu d'une erreur de type machine introuvable.

  5. La requête que vous appelez est en train d'expirer. Cela peut ressembler à un problème de connexion au serveur, mais, en fonction de la structure de votre application, vous pourriez arriver à l'étape où votre requête s'exécute avant que le délai d'attente ne se produise.

  6. Fuites de connexion. Combien de processus sont en cours d'exécution? Combien de connexions ouvertes? Je ne suis pas sûr si ADO.NET brut effectue un pool de connexions, ferme automatiquement les connexions lorsque cela est nécessaire à la Enterprise Library, ou où tout cela est configuré. C'est probablement une fausse piste. Cependant, en travaillant avec WCF et les services web, j'ai eu des problèmes avec des connexions non fermées causant des délais d'attente et d'autres comportements imprévisibles.

Choses à essayer :

  1. Avez-vous un délai d'attente lors de la connexion au serveur avec SQL Management Studio? Si c'est le cas, la configuration du réseau est probablement le problème. Si vous ne voyez pas de problème lors de la connexion avec Management Studio, le problème se trouvera dans votre application, pas avec le serveur.

  2. Exécutez SQL Profiler, et voyez ce qui se passe réellement à travers le réseau. Vous devriez pouvoir dire si vous êtes vraiment connecté, ou si une requête pose problème.

  3. Exécutez votre requête dans Management Studio, et voyez combien de temps cela prend.

Bonne chance!

11voto

Imran Rizvi Points 2886

Si vous souhaitez le modifier dynamiquement, je préfère utiliser SqlConnectionStringBuilder.

Cela vous permet de convertir ConnectionString, c'est-à-dire une chaîne de caractères en un objet de classe. Toutes les propriétés de la chaîne de connexion deviendront ses membres.

Dans ce cas, le réel avantage serait que vous n'avez pas à vous soucier si la partie de la chaîne de connexion ConnectionTimeout existe déjà ou non.

De plus, en créant un objet, il est toujours préférable d'assigner une valeur à l'objet plutôt que de manipuler la chaîne de caractères.

Voici un exemple de code :

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

-1voto

user55474 Points 176

Vous devez toujours utiliser le fichier web.config pour modifier le paramètre de délai d'expiration de la connexion. (pas dans votre code)

-3voto

Anjan Kant Points 11

Paramètres de chaîne de connexion par défaut :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X