Nous utilisons TIBCO EMS de notre application ASP.NET 3.5 pour une interface à un système externe, et il semble fonctionner très bien - sauf que les gars courir l'autre côté nous dit que nous sommes récoltant des connexions comme un fou et ne jamais les fermer ....de fermeture automatique des connexions TIBCO EMS quand on n'a plus besoin
Ce que je fais est de routage tout le trafic TIBCO par une seule classe avec des variables membres statiques pour les deux TIBCO ConnectionFactory
et lui-même Connection
, ayant été dit que leur construction est assez ressources et de temps:
private static ConnectionFactory Factory
{
get
{
if (HttpContext.Current.Application["EMSConnectionFactory"] == null)
{
ConnectionFactory connectionFactory = CreateTibcoFactory();
HttpContext.Current.Application["EMSConnectionFactory"] = connectionFactory;
}
return HttpContext.Current.Application["EMSConnectionFactory"] as ConnectionFactory;
}
}
private static Connection EMSConnection
{
get
{
if (HttpContext.Current.Application["EMSConnection"] == null)
{
Connection connection = Factory.CreateConnection(*username*, *password*);
connection.ExceptionHandler += new EMSExceptionHandler(TibcoConnectionExceptionHandler);
connection.Start();
HttpContext.Current.Application["EMSConnection"] = connection;
}
return HttpContext.Current.Application["EMSConnection"] as Connection;
}
}
Maintenant mon problème est: où et comment pourrais-je
- dire la connexion TIBCO à « fermeture automatique » lorsqu'ils ne sont plus nécessaires (comme avec le
SqlConnection
) - fermer la connexion TIBCO sur une erreur
- fermer TIBCO connexion avant nos finitions app ASP.NET (ou l'utilisateur se déconnecte)
Je ne semble pas vraiment trouver beaucoup d'informations utiles sur la façon d'utiliser TIBCO EMS du C#/.NET monde ..... . N'importe quels preneurs?? Merci!!
Merci pour vos pensées - je suis d'accord, j'avais l'impression qu'il devrait y avoir une seule connexion moi-même - mais la programmation web est quelque part entre un art noir et voodoo pour moi (je suis un programmeur SQL Winforms et serveur principal, la plupart) –
Il peut y avoir un problème de concurrence ici. Vous devriez au moins entourer l'instruction 'if' dans un' Application.Lock() 'et' Application.Unlock() '. C'est la même chose que 'lock' dans la programmation normale de WinForms.Pourriez-vous essayer de consigner les heures où vous créez une nouvelle connexion? Cela peut être un indice. –
Merci pour vos conseils - avec toutes ces choses en place (.Lock() et ainsi de suite) les choses semblent s'être améliorées de manière significative. –