У меня есть приложение ASP.NET 2.0 под IIS, которое имеет функцию экспорта некоторых данных в программное обеспечение под названием HFM (Oracle Hyperion Financial Management). Для выполнения этого экспорта приложение .net использует API, основанный на COM-объектах, предоставляемых клиентом HFM (клиент устанавливается на том же компьютере, что и сервер, и т. Д.)
Моя проблема в том, что API предоставляет метод для подключения к серверу HFM, но не для отключения.
В документации сказано, что для отключения приложение должно вызывать метод Marshal.ReleaseComObject () на каждом COM-объект создан. Но выполняется много сложных действий, и я не могу освободить весь созданный объект.
Итак, мое приложение не отключается.
Я заметил, что когда я заменяю файлы dll приложения ASP.NET (которые, кажется, повторно инициализируют объекты, созданные .NET), приложение автоматически отключается.
Несколько раз пробовала позвонить:
GC.Collect();
GC.WaitForPendingFinalizers();
Но проблема остается. Я ищу способ быть уверенным, что ЛЮБОЙ объект создан, даже COM-объекты выпущены. Я пробовал использовать Marshal.FinalReleaseComObject (), но это не лучше.
Поскольку я устанавливаю lock () в этом разделе, всегда есть не более одного пользователя в этой части, поэтому я даже могу использовать хардкорные методы для освобождения COM-объектов.
Есть ли способ узнать, какой объект или, по крайней мере, тип объекта, который не был выпущен?
Спасибо за вашу помощь.