This is a very important question from practical implementation point of view. Companies who have specific requirement for Remoting projects will expect this question to be answered.
In normal .NET environment objects lifetime is managed by garbage collector. But in remoting environment remote clients can access objects which are out of control of garbage collector. Garbage collector boundary is limited to a single PC on which framework is running; any remote client across physical PC is out of control of GC (Garbage Collector).
This constraint of garbage collector leads to a new way of handling lifetime for remoting objects, by using concept called as “LeaseTime”. Every server side object is assigned by default a “LeaseTime” of five minutes. This leasetime is decreased at certain intervals. Again for every method call a default of two minutes is assigned. When i say method call means every call made from client. This is called as “RenewalOnCallTime”.
Let’s put the whole thing in equation to make the concept more clear.
Total Remoting object life time = LeaseTime + (Number of method calls) X (RenewalTime).
If we take NumberOfMethodCalls as one.
Then default Remote Object Life Time = 5 + (1) X 2 = 10 minutes (Everything is in minutes)
When total object lifetime is reduced to zero, it queries the sponsor that should the object be destroyed. Sponsor is an object which decides should object Lifetime be renewed. So it queries any registered sponsors with the object, if does not find any then the object is marked for garbage collection. After this garbage collection has whole control on the object lifetime. If we do not foresee how long a object will be needed specify the “SponsorShipTimeOut” value. SponsorShipTimeOut is time unit a call to a sponsor is timed out.
“LeaseManagerPollTime” defines the time the sponsor has to return a lease time extension.
Is it a good design practice to distribute the implementation to Remoting Client ?
It’s never advisable to distribute complete implementation at client, due to following reasons:-
- Any one can use ILDASM and decrypt your logic.
- It’s a bad architecture move to have full implementation as client side as any changes in implementation on server side you have to redistribute it again.
So the best way is to have a interface or SOAPSUDS generated meta-data DLL at client side rather than having full implementation.
No comments:
Post a Comment