10
votes

.NET 4.0 Frame d'entité Timeout expiré

Je développe un site Web ASP.NET à l'aide de MVC3, .NET Framework 4.0 et cadre d'entité. Lorsque j'exécute l'application et effectuez une simple sélection d'une base de données SQL Server 2005, j'obtiens l'erreur suivante:

"" Un système.data.sqlclient.sqxception a été lancé: "Timetout expiré. La période de délai d'attente écoulée avant la fin de l'opération ou que le serveur ne répond pas. " P>

C'est la chose. J'ai essayé de vous connecter et d'effectuer la même requête du studio de gestion et ça a fonctionné. J'ai développé un petit Application de la console à l'aide de .NET Framework 4.0 et cadre d'entité exécutant exactement la même requête et renvoyé les informations dont j'avais besoin. J'ai même allumé à l'aide de l'utilisation de la structure d'entité aux classes Ado.net (SQLConnection et SQLCommand) et lors de l'exécution de la sélection de l'instance SQLCOMMAND Obtenez exactement la même erreur. P>

Lorsque j'ai créé le modèle à l'aide du cadre d'entité, j'ai pu se connecter à l'assistant à la base de données et cela a fonctionné bien. J'ai eu toutes les classes créées sans problèmes. P >

S'il vous plaît ne me dis pas que la solution consiste à augmenter tout délai d'attente car la requête est vraiment petite (20 enregistrements) et comme je l'ai dit avant d'avoir fonctionné bien lors de l'exécution d'une application de console en utilisant la même technologie et même le même code que je place ci-dessous. p>

t Son est le code qui me donne le problème: p> xxx pré>

L'exception est levée lors de l'exécution de SearchResults.tolist (); p>

Ceci est ma chaîne de connexion utilisée par les classes d'entité. Je suis sûr qu'il utilise la chaîne de connexion depuis que je l'ai modifiée avec des erreurs de syntaxe et ils ont été détectés. P>

<connectionStrings>
    <add name="MLIBEntities" connectionString="metadata=res://*/Models.MlibDBModel.csdl|res://*/Models.MlibDBModel.ssdl|res://*/Models.MlibDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=HERPADERP;Initial Catalog=MLIB;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=200&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>


7 commentaires

Est-ce que cela tient-il après 200 secondes?


Vraiment, pas de rapport avec ASP.NET MVC 3.


SQL Server est local ou sur réseau?


Êtes-vous en train de dire que certaines requêtes fonctionnent mais les chercheurs on ne le fait pas? Avez-vous utilisé la même section Connexions à partir de votre fichier Web / de configuration dans votre application de console? Quelle chaîne de connexion avez-vous utilisée lorsque vous avez utilisé Ado.net Core?


OK, la demande jette un délai d'attente après environ 10 secondes. Le serveur SQL est sur un réseau mais comme je l'ai dit, j'ai démarré une trace de profileur (de la même machine que je suis à partir de l'application) et la demande ne semble jamais accéder au serveur.


Je n'ai qu'une seule question dans l'application. Celui placé ci-dessus. Cela ne fonctionne pas dans l'application MVC, mais cela fonctionne parfaitement dans l'application de la console. J'utilise exactement la même section Connections à partir du fichier Web / configuration dans le fichier App / Config de l'application de la console. La chaîne de connexion que j'ai utilisée lorsque j'ai utilisé le noyau ADO.net est celle à l'intérieur de celle que j'ai placée ici: Source de données = herpaderp; Catalogue initial = MLIB; Sécurité intégrée = true; multipléceptauxultsultst = TRUE; Connexion Timeout = 200


À ce stade, je pense que je suis sur le point de créer un nouveau projet à partir de zéro et de tout recommencer. Si cela fonctionne, je vous ferai tout savoir. Merci pour vos réponses.


4 Réponses :


2
votes

Cela pourrait apparaître comme un délai d'attente, mais est peut-être juste un problème de sécurité.

Mon premier instinct est que vous connectez à l'aide de Windows Authentication (Security intégré = true) et que le site Web est en cours d'exécution sous un compte (service réseau?) qui n'a pas de connexion valide pour ce serveur.

Mon deuxième instinct est que le serveur SQL est sur une machine différente et il y a un problème de pare-feu.

Troisième instinct est que SQL Server n'est pas configuré pour accepter les connexions réseau sur TCPIP. Exécutez le gestionnaire de configuration SQL Server et assurez-vous qu'il envisage d'écouter.


3 commentaires

Mais il a pu se connecter de consoleAppe, donc le problème doit être ailleurs.


@Tomas Il se connecte à une application de console sous son compte d'utilisateur. ASP.NET fonctionne sous un compte différent, vous êtes donc incorrect.


Vous êtes totalement correct. J'ai réalisé qu'après avoir écrit un commentaire. Merci



0
votes

Merci à tous pour votre aide. Il semble que la requête renvoyait effectivement une énorme quantité d'enregistrements et causait un délai d'attente lors de l'exécution de l'application Web alors qu'elle ne se produisait pas dans la demande de console compte tenu de sa nature.

Merci encore!


2 commentaires

L'application de la console récupérerait la même quantité d'enregistrements à peu près au même moment. Ce n'est pas l'application qui interroge la base de données, c'est la base de données et / ou les enregistrements.


Vous avez raison, il y avait quelque chose de poisson là-bas. J'ai optimisé la requête et cela a corrigé le problème. Merci.



0
votes

J'ai déjà eu des délais d'attente avec multipléceptauxultsultsultsultsultsultsultsultsultsUltsultsultsultsultsUltsultsultsultsultsUlts, essayez de l'éteindre pour voir si c'est le problème


0 commentaires

3
votes

J'ai eu le même problème et un autre est également apparu plus tard, non lié à MSSQL. Pour résoudre le premier problème (les requêtes en cours d'exécution ont pris trop de temps), j'ai changé Command.commandTimeout pour utiliser un numéro plus grand (par défaut est 30). Un autre problème qui s'est présenté était lorsque j'ai utilisé la tâche planifiée pour exécuter cette application - après 20 minutes, il serait lancé une erreur

"Le fil a été abandonné"

Après avoir examiné les erreurs de journal, il est sorti que le pool d'applications a également le délai d'attente et la valeur par défaut est 20 minutes.


1 commentaires

En outre, dans EF, vous pouvez définir ObjectContext.commandTimeout pour étendre le délai d'attente si vous souhaitez être fournisseur agnostique. MSDN.MICROSSOFT.COM/EN-US/ Bibliothèque / ...