using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; public interface IEmployee { string Design(); string StressTest(); string Mechanical(); string Performance(); } public class ChiefDesignEngineer : MarshalByRefObject, IEmployee { public string Design() { return "Design "; } public string StressTest() { return "stress"; } public string Mechanical() { return "mechanical"; } public string Performance() { return "performance"; } public ChiefDesignEngineer() { ;} } public class ProxyChiefDesignEngineer : MarshalByRefObject, IEmployee { private ChiefDesignEngineer chief; public string Design() { return this.chief.Design(); } public string StressTest() { return this.chief.StressTest(); } public string Mechanical() { return "A supplement to mechanical"; } public string Performance() { return "Performance information is in the manual."; } public ProxyChiefDesignEngineer() { this.chief = new ChiefDesignEngineer(); } } public class Server { static void Main(string[] args) { TcpServerChannel channel = new TcpServerChannel(1234); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType(typeof(ProxyChiefDesignEngineer), "RemoteProxy", WellKnownObjectMode.SingleCall); Console.WriteLine("Press [Enter] to terminate server..."); Console.ReadLine(); } } public class Client { static void Main(string[] args) { TcpClientChannel channel = new TcpClientChannel(); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownClientType (typeof(ProxyChiefDesignEngineer), "tcp://localhost:1234/RemoteProxy"); ProxyChiefDesignEngineer ukProxyChief = new ProxyChiefDesignEngineer(); Console.WriteLine("Answer: " + ukProxyChief.Performance()); Console.WriteLine("Answer: " + ukProxyChief.Design()); } }