Comment faire pour temporiser SqlConnection plus rapidement
Je suis en utilisant une chaîne de connexion SQL avec SqlClient.SqlConnection et la spécification de la Connexion Timeout=5 dans la chaîne, mais il attend encore 30 secondes avant de retourner à l'échec. Comment puis-je faire abandonner et de retourner plus vite? Je suis sur un gros réseau local et ne voulez pas attendre 30 secondes. Les serveurs qui ne sont pas activés prendre 30 secondes à l'échec. C'est juste un petit programme utilitaire qui va toujours fonctionner seulement sur ce réseau local.
Modifier: Désolé si j'ai été clair. Je veux de l'occurrence de SqlConnection.Ouvert à l'échec plus rapidement. J'espère que ça pouvait être déduit du fait que les serveurs, j'ai voulu manquer plus rapidement sont éteints.
Modifier: Il semble que le paramètre ne échoue parfois. Comme il connaît l'adresse IP du serveur, et est à l'aide de TCP/IP pour parler (et non locale), mais ne peut pas communiquer avec SQL Serveur à cette adresse? Je ne suis pas sûr quel est le schéma, mais je ne vois pas le problème lors de la connexion localement avec SQL Server arrêté, et je ne vois pas lorsque vous tentez de vous connecter à un serveur qui n'existe pas. Je l'ai vu quand il tente de communiquer avec un serveur où le pare-feu Windows 2008 est le blocage de SQL Server, cependant.
source d'informationauteur BlueMonkMN
Vous devez vous connecter pour publier un commentaire.
Il ressemble à tous les cas qui ont été à l'origine de longs retards pourraient être résolus beaucoup plus rapidement par la tentative directe d'une prise de connexion comme ceci:
Je vais utiliser ce code pour vérifier si le serveur répond sur le port SQL Server, et que tenter d'ouvrir une connexion s'il n'. J'ai pensé (basé sur l'expérience des autres) qu'il y aurait un délai de 30 secondes, même à ce niveau, mais je reçois un message indiquant que la machine "activement a refusé la connexion" sur ces.
Edit: Et si la machine n'existe pas, il me dit que tout de suite de trop. N ° 30-secondes de retard que je peux trouver.
Edit: Machines sur le réseau mais ne s'éteint pas toujours prendre 30 secondes à l'échec, je suppose. Le pare-feu de machines échouent plus vite, cependant.
Edit: Voici le code mis à jour. J'ai l'impression que c'est plus propre pour fermer un socket que d'interrompre un thread:
Mise à jour 2
Je suggère de rouler votre propre délai d'attente. Quelque chose comme ceci:
Mise à jour de 1
Je viens de le tester cela sur mon propre ordinateur à l'aide de ce code:
et elle obéit à la
Connection Timeout
valeur dans la chaîne de connexion. Ce fut avec .NET 4 par rapport à SQL Server 2008 R2. Certes, c'est un localhost connexion qui peut donner des résultats différents, mais cela signifie que je ne peux pas reproduire le problème.Je ne peux que suggérer d'essayer un semblable bout de code dans votre environnement réseau et de voir si vous continuez à voir les longs délais d'attente.
Vieux (mauvaise) réponse
J'ai mal pensé le
ConnectionTimeout
propriété est réglable, mais il ne l'est pas.Essayez de définir SqlConnection.ConnectionTimeout au lieu d'utiliser la chaîne de connexion.
La Commande de Délai d'attente et le Délai d'attente de Connexion sont deux choses différentes.
SqlConnection.ConnectionTimeout est "le temps (en secondes) d'attente pour une connexion ouverte. La valeur par défaut est de 15 secondes." C'est uniquement utilisée lorsque vous appelez SqlConnection.Open().
SqlCommand.CommandTimeout est-ce que vous voulez faire.