Re: COM+ object not being released back to the pool
- From: "Willy Denoyette [MVP]" <willy.denoyette@xxxxxxxxxx>
- Date: Fri, 1 Jul 2005 16:57:50 +0200
"VinDotNet" <avlokana@xxxxxxxxx> wrote in message
news:1120220920.560358.226510@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Nick, thanks for taking time to think over my query.
> Yup I read the same about AutoComplete and put it over the methods in
> the servicedcomponent derived class. But you know what I also read
> somewhere else that If your class inherits from an interface and you
> are exposing the interface methods, then its not gonna work. I am
> implementing an interface in my servcomp derived class and these
> methods are to be called by the com clients.
>
> Yup I know the database connection has to be in activate() I've done
> that change and its fine. But my basic problem (releasing to the pool)
> is still there.
>
> Now in my mc++ winform client, I am doing an activator.createinstance()
> Then typecasting the object to the interface, then access methods on
> them.
> There is no other way I can create the com component, coz this part of
> the code is out of my scope. I am not supposed to touch it.
>
> Can I get some more ideas/resolutions from you?
>
> Willy, as I said above, at the client, I do a
> obj = (Imycominterface) activator.createinstance();
> obj.Myservermethod();
> Yup I am overriding CanBePooled() and returning true.
>
> Thanks in advance,
> Vin
>
As long as your client holds a reference to the object, the object will stay
activated. Now when the object reference gets released, that is when the
reference goes out of scope or is explicitly set to null, the object is kept
alive by it's proxy/stub pair and the COM+ object lifetime is determined by
the GC.
If you want the object to get released to the pool deterministically, you
have to call DisposeObject before you release the object reference, failing
to do this puts you at the mercy of the GC to return your objects to the
pool.
When this is done the object gets back to the pool, or is immediately
re-used by another client who had a request pending when the pool was
exhausted (max. objects reached).
So basically your client should look like this....
{
Imycominterface obj =
Activator.CreateInstance(typeof(SomeCOMPPClass)) as Imycominterface;
...
use the object
System.EnterpriseServices.ServicedComponent.DisposeObject(objas
SomeCOMPPClass)
}
CreateInstance will pull an object from the pool or create (construct) a new
one.
DisposeObject will release the proxy/stub and the COM+ infrastructure will
all or not put it back in the pool depending on the return value from
CanBePooled.
Note that when an object is picked-up from the pool that your Activate()
method is called and when it's put back in the pool that Deactivate is
called followed by a call to CanBePooled. Did you ever traced these calls?
Willy.
.
- References:
- COM+ object not being released back to the pool
- From: VinDotNet
- Re: COM+ object not being released back to the pool
- From: VinDotNet
- COM+ object not being released back to the pool
- Prev by Date: New form without a new taskbar window/icon
- Next by Date: RE: javascript problem
- Previous by thread: Re: COM+ object not being released back to the pool
- Next by thread: Windows service won't start
- Index(es):
Relevant Pages
|