基于.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