2010-02-12 6 views
0

J'ai un site Web ASP.NET v2 qui utilise NHibernate pour ORM. Mon architecture actuelle n'est pas géniale et je vais la changer après avoir lu quelques bonnes pratiques mais je souhaite toujours essayer de comprendre mon problème actuel.Mauvaise connexion utilisée lors de l'utilisation de ASP.NET et NHibernate

J'ai un écran de connexion qui crée une ISessionFactory avec la chaîne de connexion définie de manière appropriée pour le nom d'utilisateur et le mot de passe entré. Le SessionFactory est ensuite stocké dans HttpRuntime.Cache (tous les objets stockés dans le HttpRuntime.Cache ont une expiration de 30 minutes ce qui n'est pas idéal et peut causer des problèmes mais, espérons-le, n'est pas pertinent dans ce cas particulier).

Chaque fois qu'une requête de données est effectuée, l'application tente de récupérer une session à partir de HttpContext.Current. La première fois que cela se produit, aucune session n'est présente, de sorte qu'une session est créée à partir de SessionFactory et stockée pour référence future. La même session est donc utilisée tout au long de l'application qui n'est pas idéale je crois et elle n'est pas explicitement fermée après chaque opération.

Il y a eu divers problèmes avec l'application, y compris des délais qui peuvent être associés à la fermeture des connexions après chaque opération. Une erreur qui a récemment fait son apparition est:

Message: Login failed for user 'myusername'. 
Type: System.Data.SqlClient.SqlException 
Source: .Net SqlClient Data Provider 
Stack Trace: at 
    System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection 
    owningConnection) 
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection 
    outerConnection, DbConnectionFactory connectionFactory) 

C'est seulement après quelques minutes d'utilisation de l'application ne devrait donc pas être liée à l'utilisation de HttpRuntime.Cache. Le nom d'utilisateur dans l'exception (myusername) ne correspond pas à l'utilisateur spécifié dans la chaîne de connexion! Est-ce que quelqu'un a une idée de ce qui pourrait causer cela. Je pensais à ConnectionPooling, mais je comprends que la connexion est faite à partir d'un pool avec un nom d'utilisateur et un mot de passe, donc il ne faut pas confondre les utilisateurs.

Je change l'application pour utiliser un IHttpModule pour créer une session par requête qui sera explicitement fermée après chaque opération mais j'aimerais quand même savoir ce qui cause le problème actuel.

+0

Je ne suis pas sûr de savoir ce que vous voulez dire - j'ai accepté les réponses quand je les ai mises en œuvre et je les connais pour être correctes. D'autres se divisent en différentes catégories - suggestions pour une bibliothèque où une réponse acceptée n'est pas applicable, solution possible mais avec des questions en suspens, pas de réponse valide. Selon la FAQ de StackOverflow, il n'est pas toujours possible de clôturer une question - que suggérez-vous que je fasse pour mes questions ouvertes? –

+0

Choisissez la meilleure réponse? lol ... ça ne fait pas de mal de voter une fois de temps aussi. Selon vous, qu'est-ce qui motive les gens à donner des réponses? – dotjoe

+0

Vous avez raison - j'ai ajouté des commentaires, j'ai voté et des questions fermées le cas échéant. –

Répondre

0

ressemble à un problème avec vos informations d'identification de connexion au serveur sql. et écoutez Mattias!

+0

La connexion SQL est créée correctement pour l'utilisateur qui se connecte, par exemple, john.smith. À un certain point, une erreur se produit et l'exception est levée comme dans la question initiale, mais en indiquant un nom de connexion différent, par exemple. myusername –

+0

mais il s'agit d'une exception de connexion SQL, pas d'un problème de connexion de l'utilisateur. donc quelque chose, quelque part, essaie de se connecter au serveur SQL avec les fausses informations d'identification, non? pouvez-vous poster la trace de la pile complète? – hackerhasid

Questions connexes