Podstawy .net remoting i pierwsze kłopoty

0

Hej, właśnie dzisiaj zacząłem się uczyć .net remoting. Chcę napisać prostą bibliotekę do przesyłania komunikatów między serverem i klientem.

Pierwsze co wyklepałem wygląda tak:


public class MessageConnector :MarshalByRefObject
    {
        public List<string> messagesFromRouter = new List<string>();
        public List<string> messagesToRouter = new List<string>();

        private int number;
        public int Number
        {
            get
            {
                return number;
            }
            set
            {
                number = value;
                Console.WriteLine("Nowa wartosc: " + value);
            }
        }

        public void Open(int port)
        {
            TcpChannel channel = new TcpChannel(port);
            ChannelServices.RegisterChannel(channel);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(MessageConnector), "Test", WellKnownObjectMode.Singleton);
        }

        public static MessageConnector Connect(string url)
        {
            MessageConnector bufer = (MessageConnector)Activator.GetObject(typeof(MessageConnector), url);
            return bufer;
        }

        public void AddMessage(string message, bool AreUServer)
        {
            if (AreUServer)
            {
                messagesFromRouter.Add(message);
            }
            else
            {
                messagesToRouter.Add(message);
            }
        }
        public string GetMessage(bool AreUServer)
        {
            if (AreUServer && messagesToRouter.Count > 0)
            {
                return messagesToRouter[messagesToRouter.Count - 1];
            }
            else if (AreUServer == false && messagesFromRouter.Count > 0)
            {
                return messagesFromRouter[messagesFromRouter.Count - 1];
            }
            else
            {
                return "";
            }
        }
    }

Server tworzy sobie obiekt tej klasy i wywołuje Open, Klient wywołuje statyczną metodę Connect podając odpowiedni url, w moim przypadku taki: "tcp://localhost:8080/Test". Chcę zrobić tak by komunikacja była dwustronna, wysyłając i otrzymując wiadomości trzeba podać informację czy jest się serverem żeby było wiadomo do której listy dodać wiadomość. Problem w tej chwili mam taki że kiedy w kliencie dodam obiekt do którejś listy to z perspektywy servera nic się nie zmienia i obie listy mają Count == 0, jeśli jednak zmienię wartość pola Number z poziomu klienta to server tą zmianę rejestruje i wypisuje odpowiedni komunikat. Co robię nie tak? Pozdrawiam

0

Moim zdaniem nie tak jest to, że uczysz się technologii, która ma kilkanaście lat i została zastąpiona przez WCF.

0
somekind napisał(a):

Moim zdaniem nie tak jest to, że uczysz się technologii, która ma kilkanaście lat i została zastąpiona przez WCF.

Mnie raczej interesuje co jest nie tak w kontekście samego działania programu.

0

No może ktoś mi jednak doradzi, nie uporałem się z problemem. Zauważyłem że wartość zmiennej numer też nie uległa zmianie, jedynie został wypisany komunikat od strony serwera. Jak w .net remotingu od strony serwera i klienta uzyskać dostęp do tego samego obiektu? Gdy w aplikacji konsolowej (serwer) hostuję obiekt to podaję typ obiektu a nie konkretny obiekt, w kliencie mogę uzyskać dostęp do obiektu w taki sposób:

             Typ nazwa= (Typ)Activator.GetObject(
              typeof(Typ), "tcp://adress:8080/Test");

Jak od strony serwera dobrać się do tego samego obiektu? Nie odsyłajcie mnie do WCF, robię coś na mono a tam WCF średnio działa. Z góry dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0