Pattern Example: Remote-Proxy
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());
}
}
Related examples in the same category