<br>I did override &quot;InitializeLifetimeService&quot; in MbrBase to return null. But in my example the &quot;scope&quot; object dies at first instance, so how would overriding &quot;InitializeLifetimeService&quot; in MbrBase help. Could you please modify my code to illustrate the right usage of ISponsor on the client side. <br>
<br>My application will create objects periodically in the appdomain and execute methods implemented in IronPython. These methods may take around 20 minutes to execute. The whole application may run for a day or more. So I need to take this into consideration while implementing the lifetime service.<br>
<br>I needed to confirm one thing. Do i need to provide the lease period for all objects created in the Appdomain. As per the code given below do i need to provide the lease period for &quot;code&quot;,&quot;scope&quot;,&quot;mbr&quot;,&quot;script&quot;, &quot;ops&quot; etc.<br>
Or is it only based on how long I expect the object to be alive.<br><br>I am new to this concept of Appdomain hence my questions may sound silly.<br><br><div class="gmail_quote">On Tue, Aug 10, 2010 at 10:15 PM, Dino Viehland <span dir="ltr">&lt;<a href="mailto:dinov@microsoft.com">dinov@microsoft.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">





<div link="blue" vlink="purple" lang="EN-US">
<div>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">The trick to keeping an object alive isnít to call InitializeLifetimeService yourself but instead to return an appropriate lease.† For example if you overrode
 InitializeLifetimeService in MbrBase to always return null your object will be kept alive forever.† That will work fine as long as the app domain isnít living for an extremely long time or that you have a limited number of these MBROs that youíre creating
 in the app domain.</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">†</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">We still have this problem to solve in the DLR as well where weíre still returning null.† I think† the correct solution is that we need to use ISponsorís
 (ClientSPonsor provides an implementation of this) on the client side and then call ILease.Register so the object can call back to your sponser.</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">†</span></p>
<div style="border-width: medium medium medium 1.5pt; border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color blue; padding: 0in 0in 0in 4pt;">
<div>
<div style="border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) -moz-use-text-color -moz-use-text-color; padding: 3pt 0in 0in;">
<p class="MsoNormal"><b><span style="font-size: 10pt;">From:</span></b><span style="font-size: 10pt;"> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a> [mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>mohammad mustaq<br>
<b>Sent:</b> Tuesday, August 10, 2010 6:43 AM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> [IronPython] Query regarding Proxy Object lease period</span></p>
</div>
</div><div><div></div><div class="h5">
<p class="MsoNormal">†</p>
<p class="MsoNormal">†</p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom: 12pt;">Hi,<br>
<br>
I posted this last week and I did not get a response.Hence posting it again.<br>
<br>
I have an application that creates a python engine in a new appdomain. If I do not specify a lease period I see that the objects are disconnected when I leave it idle for a period of 5 minutes. I used &quot;InitializeLifetimeService&quot; to keep the object alive forever
 but it did not work. The &quot;dlr-spec-hosting&quot; document mentions the following in page 93 under &quot;Current Issues&quot; section : &quot;Currently if you do not use a host for 15 min, it dies, and you lose your data. We&#39;ve added InitializeLifetimeService on objects to cause
 them to stay alive forever, but we need to think through the design and the host controls here&quot;. Currently I renew the object using &quot;ILease&quot;. I do not know if this is the right thing to do. Could you please suggest me the right way to deal with this issue.
 I have provided the code below for your reference.<br>
<br>
Thanks,<br>
Mustaq<br>
<br>
using System;<br>
using Microsoft.Scripting;<br>
using IronPython.Hosting;<br>
using Microsoft.Scripting.Hosting;<br>
using System.Runtime.Remoting;<br>
using System.Runtime.Remoting.Lifetime;<br>
<br>
class Foo<br>
{<br>
††† public static void Main(string[] args)<br>
††† {<br>
††††††† AppDomain ad = AppDomain.CreateDomain(&quot;foo&quot;);<br>
††††††† ScriptEngine engine = Python.CreateEngine(ad);<br>
††††††† engine.Runtime.LoadAssembly(typeof(MbrBase).Assembly);<br>
<br>
††††††† ScriptSource code = engine.CreateScriptSourceFromString(@&quot;<br>
import MbrBase<br>
class C(MbrBase):<br>
††† def Test_C(self, log):<br>
††††††† print 0<br>
a = C()<br>
&quot;, SourceCodeKind.Statements);<br>
<br>
††††††† ScriptScope scope = engine.CreateScope();<br>
††††††† ILease lifeTime = (ILease)scope.InitializeLifetimeService(); // Is this supposed to keep the object alive forever.<br>
††††† <br>
††††††† lifeTime.Renew(TimeSpan.FromDays(1)); // Provided a lease for one day.<br>
††††††† code.Execute(scope);† // If the above lease is not mentioned then execution fails on this line after being inactive for 5 minutes.<br>
<br>
††††††† Console.WriteLine(&quot;Trying to do it... {0}&quot;, <a href="http://AppDomain.CurrentDomain.Id" target="_blank">
AppDomain.CurrentDomain.Id</a>);<br>
††††††† MbrBase mbr = (MbrBase)scope.GetVariable(&quot;a&quot;);<br>
<br>
††††††† string isSubClassCode = String.Format(&quot;issubclass({0},{1})&quot;, &quot;C&quot;, &quot;MbrBase&quot;);<br>
††††††† ScriptSource script = engine.CreateScriptSourceFromString(isSubClassCode, SourceCodeKind.Expression);<br>
††††††† bool result = (bool)script.Execute(scope);<br>
<br>
††††††† if (result == true)<br>
††††††† {<br>
††††††††††† ObjectOperations ops = engine.Operations;<br>
††††††††††† ObjectHandle subClass = scope.GetVariableHandle(&quot;C&quot;);††† // get back a handle<br>
††††††††††† ObjectHandle instance = ops.Call(subClass, new ObjectHandle[0]);† // invoke the handle to create an instance<br>
††††††††††† mbr = instance.Unwrap() as MbrBase;† // now we know we have an MBR and we can unwrap it to our local side<br>
††††††††††† <br>
††††††††††† ObjectHandle temp = ops.GetMember(instance, &quot;Test_C&quot;);<br>
††††††††††† object log = null;<br>
††††††††††† ops.Call(temp, log);<br>
††††††† }<br>
<br>
††††††† mbr.DoItVirtually();<br>
††††††† mbr.DoIt();<br>
††††††† Console.ReadKey();<br>
††† }<br>
}<br>
<br>
public class MbrBase : MarshalByRefObject<br>
{<br>
††† public virtual void DoItVirtually()<br>
††† {<br>
††††††† Console.WriteLine(&quot;Did it virtually {0}&quot;, <a href="http://AppDomain.CurrentDomain.Id" target="_blank">
AppDomain.CurrentDomain.Id</a>);<br>
††† }<br>
<br>
††† public void DoIt()<br>
††† {<br>
††††††† Console.WriteLine(&quot;Did it {0}&quot;, <a href="http://AppDomain.CurrentDomain.Id" target="_blank">
AppDomain.CurrentDomain.Id</a>);<br>
††† }<br>
}</p>
</div>
<p class="MsoNormal">†</p>
</div>
<p class="MsoNormal">†</p>
</div></div></div>
</div>
</div>

<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br></blockquote></div><br>