Предполагая, что вы используете ASMX здесь, а не WCF, где вы могли бы управлять временем жизни немного по-другому, каждый раз, когда приходит запрос в классе, который обслуживает запрос, он создается заново. Это стандартное поведение для ASMX.
Что вам нужно сделать, это сохранить COM-объект либо внутри коллекций Cache [] или Application []. Это может все еще быть разрушено, когда рабочий пул переработан. Вам нужен такой код:
public FooClass GetFooClassInstance()
{
FooClass instance = (FooClass)this.Context.Application["FooClassInstance"];
if (instance == null)
{
instance = new FooClass(); // Creates the RCW.
this.Context.Application["FooClassInstance"] = instance;
}
return instance;
}
FooClass - это вызываемая оболочка во время выполнения для вашего COM-объекта. Содержимое объекта приложения сохраняется между запросами. Одна вещь, которую вы должны остерегаться - это модель потоков, которую использует COM-компонент, так как некоторые могут вызвать проблемы с производительностью, поскольку они маршалируют вызовы в одном потоке.