2009-01-08 13 views
1

Dans le développement d'un service Web relativement simple, qui prend les données fournies par un poste et il enregistre dans une table de base de données, nous obtenons cette erreur:Manquer de connexions DB en utilisant LINQ to SQL

Exception pris: Le serveur distant a renvoyé une erreur: (500) Internal Server Er ou. Stack trace: à System.Net.HttpWebRequest.GetResponse()

sur certains serveurs, mais pas d'autres. Ceux qui obtiennent ceci sont les machines physiques, les autres sont virtuels, et évidemment les serveurs physiques sont beaucoup plus puissants. Pour autant que nous le sachions, le problème est que les connexions DB ne sont pas relâchées dans les pools après chaque requête. J'utilise le motif à l'aide ci-dessous:

   using (VoteDaoDataContext dao = new VoteDaoDataContext()) 
       { 

        dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip); 
        dao.SubmitChanges(); 
        msg += "Thank you for your vote."; 
        dao.Dispose(); 
       } 

J'ai ajouté le dao.Dispose() pour faire en sorte que les connexions sont libérées lorsque la méthode se termine, mais je ne sais pas si oui ou non il est nécessaire.

Est-ce que j'utilise correctement ce modèle? Y a-t-il autre chose que je dois faire pour que les connexions soient renvoyées dans les pools correctement?

Merci!

+0

L'élimination n'est pas nécessaire à l'intérieur du bloc d'utilisation. Qu'est-ce qui vous fait penser que vous êtes à court de connexions? – TGnat

Répondre

3

Vos informations de diagnostic ne sont pas suffisantes. Un HTTP/500 n'est pas assez détaillé pour vraiment dire si votre théorie est correcte. Vous devrez capturer une trace de pile complète dans votre journalisation si vous souhaitez résoudre le problème. Je pense que vous avez sauté à une conclusion ici. Et non, vous n'avez pas besoin de Dispose() avant la fin de votre bloc using {}. C'est ce que l'utilisation {fait.

0

Je pensais que l'appel de disposer() était redondant, mais je voulais être sûr. Nous voyons les pools de connexion saturer dans les journaux SQL (je ne peux pas regarder directement, je suis juste un développeur, et ce produit fonctionne dans un environnement prod), et mon gars a dit qu'il voit les connexions expirent ... et lorsqu'elles expirent, le serveur redémarre jusqu'à la prochaine fois qu'il sature le pool de connexions.

Nous sommes en train de peaufiner les paramètres du pool de connexion pour le moment ... Je voulais être certain de ne rien faire de mal, puisque c'est la première fois que j'utilise Linq.

Merci!

+0

Vous ne pouvez pas voir les pools de connexions du serveur Web à partir des journaux du serveur SQL. –

+0

@David B - mais vous pouvez voir les connexions ouvertes ... –