基于.Net Remoting的人品计算器
这几天一直在学习.Net Remoting,关看书不实践确实有点不踏实。想想最近可能没有什么实际项目可以用到这个技术,只好臆想一个项目了。突然想过一个念头,是不是可以做个学生时代一度很流行的“人品计算器”,这次可是分布式的哦。
有人可能会想着这不是杀鸡用牛刀吗?不,这个人品计算器的核心算法可是我想了好久才设计出来的,而且通过对周围人的使用,结果就一个字:“准”。我可不想把这样核心的代码放部署在各处,只有放在我信任的服务器上我才放心。而且说不定哪天我想到了更好的算法我只想在一个地方修改,而不需要对各个客户端进行更新。最后是最关键的一点,想着哪天这个计算器得到大家认可,我还想基于每次访问收点费,所以在此之前希望大家抓紧免费试用。
1 创建共享库
定义了一个可以通过姓名和生日计算人品的接口,供服务器和客户端使用。
namespace Share
{
public interface IMoralQualityCalculator
{
int GetMoralQuality(string name, DateTime birthday);
}
}
2 服务器
通过继承MarshalByRefObject定义一个以引用的方式传递的远程对象类MoralQualityCalculator,同时还实现了IMoralQualityCalculator的接口。
namespace Server
{
class MoralQualityCalculator: MarshalByRefObject, IMoralQualityCalculator
{
public MoralQualityCalculator()
{
Console.WriteLine("MoralQualityCalculator constructor: Object created");
}
public int GetMoralQuality(string name, DateTime birthday)
{
// Hided owing to its importance!!!
}
}
class ServerStartup
{
static void Main(string[] args)
{
Console.WriteLine("Server: Started");
HttpChannel chnl = new HttpChannel(1234);
ChannelServices.RegisterChannel(chnl);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(MoralQualityCalculator),
"MoralQualityCalculator.soap",
WellKnownObjectMode.Singleton);
Console.ReadLine();
}
}
}
3 客户端
namespace Client
{
class Client
{
static void Main(string[] args)
{
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel);
IMoralQualityCalculator calculator = (IMoralQualityCalculator) Activator.GetObject(
typeof(IMoralQualityCalculator),
"http://localhost:1234/MoralQualityCalculator.soap");
Console.WriteLine("Client: Reference to MoralQualityCalculator acquired");
int moralQuality = calculator.GetMoralQuality("Lin Benjie", new DateTime(1982, 08, 01));
Console.WriteLine("Client: Your moral quality is {0}.", moralQuality);
Console.ReadLine();
}
}
}
本例中对.Net Remoting的应用是入门级的,但人品计算器还是值得大家试试的。如果大家感兴趣可以下载源码并在Client类的calculator.GetMoralQuality()部分输入自己的名字和生日算算哦!
提示:源码运行环境VS2010