J'ai une application ASP.NET 2.0 sous IIS qui a la fonctionnalité de en exportant certaines données vers un logiciel appelé HFM (Oracle Hyperion Financial Management). Pour effectuer cette exportation, l'application .net utilise une API basée sur les objets COM fournis par le client HFM (le client est installé sur la même machine que le serveur, etc.).NET force Objets COM version
Mon problème est que l'API fournit un méthode pour se connecter au serveur HFM mais ne pas se déconnecter.
La documentation indique que pour se déconnecter, l'application doit appeler la méthode Marshal.ReleaseComObject() sur chaque objet COM créé. Mais il y a beaucoup d'actions complexes effectuées et je ne suis pas capable de libérer tous les objets créés.
Donc, mon application ne se déconnecte pas.
J'ai remarqué que lorsque je remplace les fichiers dll de l'application ASP.NET (ce qui semble réinitialiser les objets instanciés par .NET), l'application se déconnecte automatiquement.
J'ai essayé plusieurs fois d'appeler:
GC.Collect();
GC.WaitForPendingFinalizers();
Mais le problème reste. Je cherche un moyen de m'assurer que TOUT objet créé, même les objets COM sont libérés. J'ai essayé avec Marshal.FinalReleaseComObject() mais ce n'est pas mieux. Comme je mets un lock() sur cette section, il y a toujours au plus un utilisateur sur cette partie, donc je peux même utiliser des techniques hardcore pour libérer les objets COM.
Y at-il un moyen de savoir quel objet ou au moins le type de l'objet qui n'a pas été libéré?
Merci pour votre aide.
Vous aviez raison, après une analyse approfondie et des simplifications de processus, nous avons remarqué que certains objets n'étaient pas correctement libérés. C'était la raison du problème. –