remoting教学三:remoting的远程对象

remoting教学三:remoting的远程对象
远程对象还是本地对象
    我们修改程序,看Person这个类的对象是从客户端生成的,还是服务器端生成。
    RemoteObject

using System;

namespace RemoteObject
{
    public class MyObject : MarshalByRefObject
    {
        private int i = 0;
        public int Add(int a, int b)
        {
            return a + b;
        }

        public int Count()
        {
            return ++i;
        }

        public Person getOnePerson()
        {
            System.Console.WriteLine(".........");              
            return new Person();
        }

        public void SaveOnePerson(Person p)
        {
            System.Console.WriteLine(p.Name + " is saved!");
        }
    }
    [Serializable]
    public class Person
    {
        private string name="ddddddfault";
        public Person()
        {
            System.Console.WriteLine("person create");            
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
 
}

server:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace RemoteServer
{
    class MyServer
    {
        [STAThread]
        static void Main(string[] args)
        {
            TcpServerChannel channel = new TcpServerChannel(9999);
              ChannelServices.RegisterChannel(channel);
              RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.MyObject),
                 "RemoteObject", WellKnownObjectMode.Singleton);
              System.Console.WriteLine("Press Any Key");
              System.Console.ReadLine();
        }
    }
}

client:
using System;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace RemoteClient
{
    class MyClient
    {
        [STAThread]
        static void Main(string[] args)
        {
            ChannelServices.RegisterChannel(new TcpClientChannel());
            RemoteObject.MyObject remoteobj = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),
           "tcp://localhost:9999/RemoteObject");
            Console.WriteLine("1 + 2 = " + remoteobj.Add(1, 2).ToString());
            Console.WriteLine("i = " + remoteobj.Count().ToString());
            RemoteObject.Person r = new RemoteObject.Person();
            r.Name = Guid.NewGuid().ToString();
            Console.WriteLine("Name = " + r.Name);
            remoteobj.SaveOnePerson(r);
            Console.ReadLine();
        }
    }
}

注意,可以看到,如果在客户端调用的是getOnePerson()的,是从服务器创建对象,然后再传送到客户端。如果是在客户端 new RemoteObject.Person()的,则是在客户端创建对象,然后通过 SaveOnePerson()保存到服务器上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值