Puis-je augmenter le délai en modifiant la chaîne de connexion dans le fichier web.config
?
Réponses
Trop de publicités?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.
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 :
-
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.
-
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.
-
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 demysqlserver.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? -
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.
-
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.
-
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 :
-
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.
-
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.
-
Exécutez votre requête dans Management Studio, et voyez combien de temps cela prend.
Bonne chance!
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);