1 .NET Remoting Łukasz Zawadzki
2 Plan prezentacji Co to jest .NET Remoting Definicja AppDomainTypy zdalnych obiektów Sposoby przekazywania obiektów(MBV i MBR) Formatery serializacji Dwa sposoby tworzenia aplikacji(konfigruacja z XML i konfiguracja z poziomu kodu) Zarządzanie stanem zdalnego obiektu
3 Co to jest .NET Remoting?? Sposób zdalnego wywoływania metod i dostępu do obiektów znajdujących się w różnych AppDomain, procesach, komputerach
4 Co to jest AppDomain?? Rodzaj abstrakcyjnego obiektu reprezentującego domenę aplikacji (zbiór procesów aplikacji)
5 Typy zdalnych obiektówSinglecall Singleton COA( Client Activated Object)
6 Sposoby przekazywania obiektówMBV( Marshal by value) MBR( Marshal by reference) serializable
7 Formatery serializacjiDo czego służą formatery?? Interfejs IRemotingFormatter Dwa rodzaje formaterów : SoapFormatter( oparty na Simple Object Access Protocol) i BinaryFormatter
8 Konfiguracja Klasa obiektu zdalnego: namespace ServerClass{ public class MainClass : System.MarshalByRefObject { public int add(int a, int b) { return a+b; } } }
9 Konfiguracja XML Nazwa pliku konfiguracyjnego : „*.cfg”Po stronie serwera : Config.cfg
10 Konfiguracja XML Kod aplikacji serwera: public static void Main(){ try { RemotingConfiguration.Configure("C:\\config.cfg"); Console.ReadLine(); } catch(System.Runtime.Remoting.RemotingException e) { Console.WriteLine(e.StackTrace); Console.WriteLine("WYJATEK!!!"); Console.ReadLine(); } }
11 Konfiguracja XML Po stronie klienta
12 Konfiguracja XML Kod aplikacji klienckiej:static void Main(string[] args) { //konfiguracja klienta z pliku c:\client.cfg RemotingConfiguration.Configure("C:\\client.cfg"); int a, b, c; a=3; b=4; //pośrednik reprezentujący obiekt serwerowy ServerClass.MainClass add=new ServerClass.MainClass(); c=add.add(a, b); Console.WriteLine(c); }
13 Konfiguracja z poziomu koduSerwer: public static void Main() { try { int port = 8881; TcpChannel chnl = new TcpChannel(port); ChannelServices.RegisterChannel(chnl); RemotingConfiguration.RegisterWellKnownServiceType( typeof(MainClass), „MyServer", WellKnownObjectMode.SingleCall); Console.ReadLine(); } catch(System.Runtime.Remoting.RemotingException e) { Console.WriteLine(e.StackTrace); Console.WriteLine("WYJATEK!!!"); Console.ReadLine(); } }
14 Konfiguracja z poziomu koduKlient: static void Main(string[] args) { MainClass mk = (MainClass) Activator.GetObject( typeof(MainClass), „tcp://host:port/MyServer"); "); int a, b, c; a=3; b=4; c= mk.add(a, b); Console.WriteLine(c); }
15 Zarządzanie stanem InitialLeaseTime(czas przy inicjalizacji)SponsorshipTimeout ( przedawnienie po nieudanym połączeniu) RenewOnCallTime( o jaki czas przedłużamy życie obiektu przy każdym odwołaniu się do niego)
16 Przykład // metoda wywoływana na rzecz zdalnego obiektu do inicjalizacji charakterystyk czasowych jego życia public override object InitializeLifetimeService() { ILease lease = (ILease)base.InitializeLifetimeService(); if (lease.CurrentState == LeaseState.Initial) { lease.InitialLeaseTime = TimeSpan.FromMinutes(1); lease.SponsorshipTimeout =TimeSpan.FromMinutes(2); lease.RenewOnCallTime = TimeSpan.FromSeconds(2); } return lease; }
17 Inicjalizacja samodzielna// kod już bezspośrednio po stronie klienta ILease lease = (ILease)RemotingServices.GetLifetimeService(ZdalnyObiekt); TimeSpan expireTime = lease.Renew(TimeSpan.FromSeconds(60));
18 Podsumowanie Codeguru.pl