using System; using System.Runtime.Remoting.Lifetime; using System.Runtime.Remoting; namespace Server { class DefaultLifeTimeSingleton: MarshalByRefObject { public DefaultLifeTimeSingleton() { Console.WriteLine("DefaultLifeTimeSingleton.CTOR called"); } public void doSomething() { Console.WriteLine("DefaultLifeTimeSingleton.doSomething called"); } } class LongerLivingSingleton: MarshalByRefObject { public override object InitializeLifetimeService() { ILease tmp = (ILease) base.InitializeLifetimeService(); if (tmp.CurrentState == LeaseState.Initial) { tmp.InitialLeaseTime = TimeSpan.FromSeconds(5); tmp.RenewOnCallTime = TimeSpan.FromSeconds(1); } return tmp; } public LongerLivingSingleton() { Console.WriteLine("LongerLivingSingleton.CTOR called"); } public void doSomething() { Console.WriteLine("LongerLivingSingleton.doSomething called"); } } class InfinitelyLivingSingleton: MarshalByRefObject { public override object InitializeLifetimeService() { return null; } public InfinitelyLivingSingleton() { Console.WriteLine("InfinitelyLivingSingleton.CTOR called"); } public void doSomething() { Console.WriteLine("InfinitelyLivingSingleton.doSomething called"); } } class ServerStartup { public static void Main(String[] args) { RemotingConfiguration.Configure("Server.exe.config"); Console.WriteLine("Press to exit"); Console.ReadLine(); } } }