Свойства в Remoting - PullRequest
       12

Свойства в Remoting

1 голос
/ 11 мая 2010

Сервер:

Host h = new Host();
h.Name = "JARR!!";
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Host), "Server",
               WellKnownObjectMode.Singleton);

Клиент:

TcpChannel chan = new TcpChannel();
            ChannelServices.RegisterChannel(chan);
            remoteHost = (Host)Activator.GetObject(typeof(Host),
"tcp://127.0.0.1:8080/Server");

Класс:

[Serializable]
    public class Host: MarshalByRefObject
    {
        public string Name{get; set;}
        public Host(){}

        public Host(string n)
        {
            Name = n;
        }

        public override string ToString()
        {
            return Name;
        }
    }

Соединение в норме, порт 8080 открыт, на стороне клиента remoteHost не нулевой, а remoteHost.Name == ""

Почему?

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Вам необходимо направить ваш конкретный экземпляр сервера (h) в канал, иначе будет создан экземпляр по умолчанию.

System.Runtime.Remoting.RemotingServices.Marshal (...);

0 голосов
/ 11 мая 2010

Вам нужно исправить свой класс, чтобы сделать фактический код для возврата свойств, как показано, я добавил переменную myHostName строковый тип, который будет использоваться для свойств Name

[Serializable]
public class Host: MarshalByRefObject
{
   private string myHostName;

   public string Name{
      get{ return this.myHostName; }
      set{ this.myHostName = value; }
   }

   public Host(string n)
   {
       this.myHostName = n;
   }
   public override string ToString()
   {           
       return this.myHostName;
   }
}
...