Sniper

犯强汉者,虽远必诛!

博客园 首页 新随笔 联系 订阅 管理
 在例子一中,会存在3个问题:
1.创建通道,对象注册和其他配置代码过多,如果这些细节改变,则需要重新编译
2.对于已知(Well-Known)对象,只能通过默认的构造函数来创建对象,客户端不能指定非默认的构造函数
3.客户端必须引用包含已知类型的程序集,因此需要把这个程序集部署到每个客户端上,违背了分布式的原则

本节将解决问题2

首先定义一个简单的类Customer,实现了一个非默认的构造函数和一个SayHello方法
 1using System;
 2
 3namespace MathLibrary
 4{
 5    /// <summary>
 6    /// Customer 的摘要说明。
 7    /// </summary>

 8    public class Customer:MarshalByRefObject
 9    {
10        string mName;
11        //注意,是带参数的构造函数
12        public Customer(string name)
13        {
14            //
15            // TODO: 在此处添加构造函数逻辑
16            //
17            Console.WriteLine("Customer.ctor({0}",name);
18            mName = name;
19        }

20        public string SayHello()
21        {
22            Console.WriteLine("Customer.SayHello()");
23            return "Hello"+mName;
24        }

25    }

26}
服务器端代码:
注意用到RemotingConfiguration.RegisterActivatedServiceType()方法注册服务
 1using System;
 2using System.Runtime.Remoting;
 3using System.Runtime.Remoting.Channels;
 4using System.Runtime.Remoting.Channels.Http;
 5using MathLibrary;
 6namespace MathServer
 7{
 8    /// <summary>
 9    /// ServerMain 的摘要说明。
10    /// </summary>

11    public class ServerMain
12    {
13        public ServerMain()
14        {
15            //
16            // TODO: 在此处添加构造函数逻辑
17            //
18        }

19        public static void Main(string[] args)
20        {
21            HttpChannel channel = new HttpChannel(13101);
22            ChannelServices.RegisterChannel(channel);
23            RemotingConfiguration.RegisterActivatedServiceType(typeof(MathLibrary.Customer));
24
25            Console.WriteLine("ServerStarted.Press Enter to End.");
26            Console.ReadLine();
27        }

28    }

29}
客户端代码:
 1using System;
 2using System.Runtime.Remoting;
 3using System.Runtime.Remoting.Channels;
 4using System.Runtime.Remoting.Channels.Http;
 5using MathLibrary;
 6namespace MathClient
 7{
 8    /// <summary>
 9    /// ClientMain 的摘要说明。
10    /// </summary>

11    public class ClientMain
12    {
13        public ClientMain()
14        {
15            //
16            // TODO: 在此处添加构造函数逻辑
17            //
18        }

19        public static void Main(string[] args)
20        {
21            RemotingConfiguration.RegisterActivatedClientType(typeof(MathLibrary.Customer),"http://localhost:13101");
22
23            Customer cust = new Customer("Homer");
24            Console.WriteLine(cust.SayHello());
25            Console.ReadLine();
26        }

27    }

28}
执行结果如下:
服务器端执行情况:

客户端情况:
posted on 2005-08-14 11:59  Sniper  阅读(1260)  评论(1编辑  收藏  举报