NET Remoting ukasz Zawadzki Plan prezentacji Co to

  • Slides: 18
Download presentation
. NET Remoting Łukasz Zawadzki

. NET Remoting Łukasz Zawadzki

Plan prezentacji Co to jest. NET Remoting n Definicja App. Domain n Typy zdalnych

Plan prezentacji Co to jest. NET Remoting n Definicja App. Domain n Typy zdalnych obiektów n Sposoby przekazywania obiektów(MBV i MBR) n Formatery serializacji n Dwa sposoby tworzenia aplikacji(konfigruacja z XML i konfiguracja z poziomu kodu) n Zarządzanie stanem zdalnego obiektu n

Co to jest. NET Remoting? ? n Sposób zdalnego wywoływania metod i dostępu do

Co to jest. NET Remoting? ? n Sposób zdalnego wywoływania metod i dostępu do obiektów znajdujących się w różnych App. Domain, procesach, komputerach

Co to jest App. Domain? ? n Rodzaj abstrakcyjnego obiektu reprezentującego domenę aplikacji (zbiór

Co to jest App. Domain? ? n Rodzaj abstrakcyjnego obiektu reprezentującego domenę aplikacji (zbiór procesów aplikacji)

Typy zdalnych obiektów Singlecall n Singleton n COA( Client Activated Object) n

Typy zdalnych obiektów Singlecall n Singleton n COA( Client Activated Object) n

Sposoby przekazywania obiektów MBV( Marshal by value) n MBR( Marshal by reference) n serializable

Sposoby przekazywania obiektów MBV( Marshal by value) n MBR( Marshal by reference) n serializable n

Formatery serializacji Do czego służą formatery? ? n Interfejs IRemoting. Formatter n Dwa rodzaje

Formatery serializacji Do czego służą formatery? ? n Interfejs IRemoting. Formatter n Dwa rodzaje formaterów : Soap. Formatter( oparty na Simple Object Access Protocol) i Binary. Formatter n

Konfiguracja n Klasa obiektu zdalnego: namespace Server. Class { public class Main. Class :

Konfiguracja n Klasa obiektu zdalnego: namespace Server. Class { public class Main. Class : System. Marshal. By. Ref. Object { public int add(int a, int b) { return a+b; } } }

Konfiguracja XML Nazwa pliku konfiguracyjnego : „*. cfg” n Po stronie serwera : Config.

Konfiguracja XML Nazwa pliku konfiguracyjnego : „*. cfg” n Po stronie serwera : Config. cfg <configuration> <system. runtime. remoting> <application> <service> <wellknown mode="Single. Call" object. Uri="My. Server" type="Server. Class. Main. Class, Server. Class„/> </service> <channels> <channel ref="tcp" port="8881"/> </channels> </application> </system. runtime. remoting> </configuration> n

Konfiguracja XML Kod aplikacji serwera: public static void Main() { try { Remoting. Configuration.

Konfiguracja XML Kod aplikacji serwera: public static void Main() { try { Remoting. Configuration. Configure("C: \config. cfg"); Console. Read. Line(); } catch(System. Runtime. Remoting. Exception e) { Console. Write. Line(e. Stack. Trace); Console. Write. Line("WYJATEK!!!"); Console. Read. Line(); } } n

Konfiguracja XML Po stronie klienta <configuration> <system. runtime. remoting> <application> <channels> <channel ref="tcp"> <client.

Konfiguracja XML Po stronie klienta <configuration> <system. runtime. remoting> <application> <channels> <channel ref="tcp"> <client. Providers> <formatter ref="binary"/> </client. Providers> </channels> <client> <wellknown url="tcp: //localhost: 8881/My. Server" type="Server. Class. Main. Class, Server. Class"/> </client> </application> </system. runtime. remoting> </configuration> n

Konfiguracja XML Kod aplikacji klienckiej: static void Main(string[] args) { //konfiguracja klienta z pliku

Konfiguracja XML Kod aplikacji klienckiej: static void Main(string[] args) { //konfiguracja klienta z pliku c: client. cfg Remoting. Configuration. Configure("C: \client. cfg"); int a, b, c; a=3; b=4; //pośrednik reprezentujący obiekt serwerowy Server. Class. Main. Class add=new Server. Class. Main. Class(); c=add. add(a, b); Console. Write. Line(c); } n

Konfiguracja z poziomu kodu Serwer: public static void Main() { try { int port

Konfiguracja z poziomu kodu Serwer: public static void Main() { try { int port = 8881; Tcp. Channel chnl = new Tcp. Channel(port); Channel. Services. Register. Channel(chnl); Remoting. Configuration. Register. Well. Known. Service. Type( typeof(Main. Class), „My. Server", Well. Known. Object. Mode. Single. Call); Console. Read. Line(); } catch(System. Runtime. Remoting. Exception e) { Console. Write. Line(e. Stack. Trace); Console. Write. Line("WYJATEK!!!"); Console. Read. Line(); } } n

Konfiguracja z poziomu kodu Klient: static void Main(string[] args) { Main. Class mk =

Konfiguracja z poziomu kodu Klient: static void Main(string[] args) { Main. Class mk = (Main. Class) Activator. Get. Object( typeof(Main. Class), „tcp: //host: port/My. Server"); int a, b, c; a=3; b=4; c= mk. add(a, b); Console. Write. Line(c); } n

Zarządzanie stanem Initial. Lease. Time(czas przy inicjalizacji) n Sponsorship. Timeout ( przedawnienie po nieudanym

Zarządzanie stanem Initial. Lease. Time(czas przy inicjalizacji) n Sponsorship. Timeout ( przedawnienie po nieudanym połączeniu) n Renew. On. Call. Time( o jaki czas przedłużamy życie obiektu przy każdym odwołaniu się do niego) n

Przykład // metoda wywoływana na rzecz zdalnego obiektu do inicjalizacji charakterystyk czasowych jego życia

Przykład // metoda wywoływana na rzecz zdalnego obiektu do inicjalizacji charakterystyk czasowych jego życia public override object Initialize. Lifetime. Service() { ILease lease = (ILease)base. Initialize. Lifetime. Service(); if (lease. Current. State == Lease. State. Initial) { lease. Initial. Lease. Time = Time. Span. From. Minutes(1); lease. Sponsorship. Timeout =Time. Span. From. Minutes(2); lease. Renew. On. Call. Time = Time. Span. From. Seconds(2); } return lease; }

Inicjalizacja samodzielna // kod już bezspośrednio po stronie klienta ILease lease = (ILease)Remoting. Services.

Inicjalizacja samodzielna // kod już bezspośrednio po stronie klienta ILease lease = (ILease)Remoting. Services. Get. Lifetime. Service(Zdalny. Obiekt); Time. Span expire. Time = lease. Renew(Time. Span. From. Seconds(60));

Podsumowanie n Codeguru. pl n http: //msdn. microsoft. com/library/default. asp? url=/lib rary/enus/cpguide/html/cpconnetremotingoverview. asp

Podsumowanie n Codeguru. pl n http: //msdn. microsoft. com/library/default. asp? url=/lib rary/enus/cpguide/html/cpconnetremotingoverview. asp