.NET Remoting Łukasz Zawadzki
Plan prezentacji Co to jest .NET Remoting Definicja AppDomain Typy 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
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
Co to jest AppDomain?? Rodzaj abstrakcyjnego obiektu reprezentującego domenę aplikacji (zbiór procesów aplikacji)
Typy zdalnych obiektów Singlecall Singleton COA( Client Activated Object)
Sposoby przekazywania obiektów MBV( Marshal by value) MBR( Marshal by reference) serializable
Formatery serializacji Do czego służą formatery?? Interfejs IRemotingFormatter Dwa rodzaje formaterów : SoapFormatter( oparty na Simple Object Access Protocol) i BinaryFormatter
Konfiguracja Klasa obiektu zdalnego: namespace ServerClass { public class MainClass : System.MarshalByRefObject { public int add(int a, int b) { return a+b; } } }
Konfiguracja XML Nazwa pliku konfiguracyjnego : „*.cfg” Po stronie serwera : Config.cfg <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="SingleCall" objectUri="MyServer" type="ServerClass.MainClass, ServerClass„/> </service> <channels> <channel ref="tcp" port="8881"/> </channels> </application> </system.runtime.remoting> </configuration>
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(); } }
Konfiguracja XML Po stronie klienta <configuration> <system.runtime.remoting> <application> <channels> <channel ref="tcp"> <clientProviders> <formatter ref="binary"/> </clientProviders> </channel> </channels> <client> <wellknown url="tcp://localhost:8881/MyServer" type="ServerClass.MainClass, ServerClass"/> </client> </application> </system.runtime.remoting> </configuration>
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); }
Konfiguracja z poziomu kodu Serwer: 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(); } }
Konfiguracja z poziomu kodu Klient: 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); }
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)
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; }
Inicjalizacja samodzielna // kod już bezspośrednio po stronie klienta ILease lease = (ILease)RemotingServices.GetLifetimeService(ZdalnyObiekt); TimeSpan expireTime = lease.Renew(TimeSpan.FromSeconds(60));
Podsumowanie Codeguru.pl http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconnetremotingoverview.asp