Remoting Client exe NET Server exe NET Klienten
- Slides: 24
Remoting Client. exe (. NET) Server. exe (. NET) • Klienten serveren som en assembly (dll) – Referencen sættes på sædvanlig vis … • Serveren gør dll’en tilgængelig på flg. måder – Tjeneste på en server, der svarer på kald fra klienter. Effektivt! – Integreret i en web-tjeneste, der kaldes via URL. ”Firewall-venligt”! 12/14/2021 bjbu & nokn - Tietgen. Skolen 1
Komponent-dll • MBR-objekter arver fra Marshal. By. Ref. Object • MBV-objekter skal være Serializable namespace Komponent { public class Beregningsobjekt : System. Marshal. By. Ref. Object { private static int Objekttæller = 0; private int Objekt. ID; // Konstruktør public Beregningsobjekt() { this. Objekt. ID = ++Objekttæller; } } public Data. Objekt Hent. Data. Object() { return new Data. Objekt(); } 12/14/2021 namespace Komponent { [System. Serializable()] public class Data. Objekt {. . . } } bjbu & nokn - Tietgen. Skolen 2
Remoting - arkitektur • Generel arkitektur – Proxy, stub, formattering og channel kan ændres. Fx er en binær formattering, der både understøttes af TCP og HTTP, mere effektiv end en tekstbaseret (XML) Server Client proxy remoting formatter 12/14/2021 stub channel bjbu & nokn - Tietgen. Skolen listener 3
Remoting - Design • Designbeslutning: MBRO eller MBVO? – Med andre ord: ”Hvor skal objekterne leve? ” • MBRO lever på serveren • MBVO lever på klienten • Gængs praksis: – Beregninger sker på serveren MBRO • Fx søgning og køb på en ehandel – Tilstande bevares på klienten MBVO • Fx indkøbskurv på en ehandel håndteres af klienten 12/14/2021 bjbu & nokn - Tietgen. Skolen 4
MBRO - muligheder • Server-activated object (SAO) også betegnet ”Wellknown objects” – Singleton: Ét serverobjekt til alle klienter • Trådproblemer – Single. Call: Ét objekt pr. metodekald • Nemmeste løsning; men mindst effektivt • Tilstand opretholdes vha. filer eller database • Client-activated object (CAO) – Activated: Ét objekt pr. klient • Levetidsproblem – Leasing understøttes ikke af IIS 12/14/2021 bjbu & nokn - Tietgen. Skolen 5
MBVO - muligheder • Egenudviklede klasser – Kan udføre special-opgaver på klienten • . NET collection og db-klasser – Eksempelvis Data. Set er en meget brugbar klasse til at overføre data … 12/14/2021 bjbu & nokn - Tietgen. Skolen 6
Minimér udrulning på klienten • Hvad skal udrulles på klienten? • Som udgangspunkt: – Konkrete implementationer af alle MBRO- og MBVO-klasser – Dette vil vi som regel gerne minimere … • Mulige tilgange: – Definér MBRO vha. interfaces og udrul Interface. dll – Definér MBVO vha. . NET-klasser som fx Data. Set 12/14/2021 bjbu & nokn - Tietgen. Skolen 7
Design - Server • Minimér antal kald fra klient til server, da: – – – Ethvert kald går via netværket Ethvert kald er et potentielt nyt server-objekt Ethvert kald involverer marshalling Enhver reference til en property er også et kald Svartider er uforudsigelige … • Retningslinjer: – Færre og større metoder – Metoder er transaktioner – Commit/Rollback før return 12/14/2021 bjbu & nokn - Tietgen. Skolen 8
Design - Klient • Anvend factory-klasser og. config-filen – Factory-klasser skjuler instantieringslogik – Konfigurationsfilen kan specificere URL, formattering, channels, osv. – Konfigurationsfilen kan redirigere new til at instantiere på serveren 12/14/2021 bjbu & nokn - Tietgen. Skolen 9
Math. Library. dll namespace Math. Library { public class Simple. Math : Marshal. By. Ref. Object { private static int class. Count = 0; private int instance. Count; public Simple. Math() { this. instance. Count = ++Simple. Math. class. Count; } public int Add(int a, int b) { return a + b; } public int Sub(int a, int b) { return a - b; } public int Count { get { return this. instance. Count; } } 12/14/2021 bjbu & nokn - Tietgen. Skolen 10
SAO - Wellknown Objects namespace Math. Server { class Program { static void Main(string[] args) { Channel. Services. Register. Channel(new Http. Channel(20001), false); Remoting. Configuration. Register. Well. Known. Service. Type(typeof(Simple. Math), "Simple. Math. soap", Well. Known. Object. Mode. Single. Call); } } } namespace Math. Klient { class Program { static void Main(string[] args) { Remoting. Configuration. Register. Well. Known. Client. Type(typeof(Simple. Math), "http: //localhost: 20001/Simple. Math. soap"); Simple. Math math = new Simple. Math(); } } } 12/14/2021 bjbu & nokn - Tietgen. Skolen 11
SAO – Activator. Get. Object namespace Math. Server { class Program { static void Main(string[] args) { Channel. Services. Register. Channel(new Http. Channel(20001), false); Remoting. Configuration. Register. Well. Known. Service. Type(typeof(Simple. Math), "Simple. Math. soap", Well. Known. Object. Mode. Single. Call); } } } namespace Math. Klient { class Program { static void Main(string[] args) { ISimple. Math math = (ISimple. Math)(Activator. Get. Object( typeof(ISimple. Math), "http: //localhost: 20001/Simple. Math. soap")); } } } 12/14/2021 bjbu & nokn - Tietgen. Skolen 12
Remoting gennem interface namespace IMath. Library { public interface ISimple. Math { int Add(int a, int b); int Sub(int a, int b); int Count {get; } } } namespace Math. Library { public class Simple. Math : Marshal. By. Ref. Object, IMath. Library. ISimple. Math private static int class. Count = 0; private int instance. Count; public Simple. Math() {this. instance. Count = ++Simple. Math. class. Count; } public int Add(int a, int b) {return a + b; } public int Sub(int a, int b) {return a - b; } public int Count { get { return this. instance. Count; } } 12/14/2021 bjbu & nokn - Tietgen. Skolen 13
CAO namespace Math. Server { class Program { static void Main(string[] args) { Channel. Services. Register. Channel(new Http. Channel(20001), false); Remoting. Configuration. Register. Activated. Service. Type(typeof(Simple. Math)); } } } namespace Math. Klient { class Program { static void Main(string[] args) { Remoting. Configuration. Register. Activated. Client. Type(typeof(Simple. Math), "http: //localhost: 20001"); Simple. Math math = new Simple. Math(); } } } 12/14/2021 bjbu & nokn - Tietgen. Skolen 14
Serveropsætning med. config-filen • Konfigurér og start serveren vha: Remoting. Configuration. Configure("? ? ? . exe. config", false); <system. runtime. remoting> <application> <service> <wellknown mode="Single. Call" object. Uri="Simple. Math. soap" type="Math. Library. Simple. Math, Math. Library" /> <!-<activated type="Math. Library. Simple. Math, Math. Library" /> --> </service> <channels> <channel ref="http" port="20001" /> </channels> </application> </system. runtime. remoting> 12/14/2021 bjbu & nokn - Tietgen. Skolen 15
Klientopsætning med. config-filen • Konfigurér klient vha. nedenstående og skab remote-objekt med new: Remoting. Configuration. Configure("? ? ? . exe. config", false); </system. runtime. remoting> <application> <client display. Name="Math. Klient. Config"> <wellknown type="Simple. Math, Math. Library" url="http: //localhost: 20001/Simple. Math. soap" /> </client> <channels> <channel ref="http" /> </channels> <!-<client url="http: //localhost: 20001"> <activated type="Simple. Math, Math. Library"></activated> </client> --> </application> </system. runtime. remoting> 12/14/2021 bjbu & nokn - Tietgen. Skolen 16
Remoting med web-server • Den letteste måde at lave remoting er vha. IIS: Klient. exe . DLL URL IIS Server 12/14/2021 bjbu & nokn - Tietgen. Skolen 17
Hvordan? • Der er fire punkter … – Lav en komponent-dll til remoting – Lav en web-applikation til at host’e dll’en – Konfigurér web-serveren – På klienten refereres til dll’en og objekterne skabes på serveren 12/14/2021 bjbu & nokn - Tietgen. Skolen 18
Design af web-serveren • Beregningsobjekter lever på serveren – Ét objekt pr. klient • Dataobjekter overføres til klienten – Marshalling Data Klient Proxy Beregn kald Stub Server 12/14/2021 bjbu & nokn - Tietgen. Skolen 19
Terminologi • Beregningsobjekter er single-call MBRO – Hvert RPC genererer et nyt beregningsobjekt på serveren • Dataobjekter er MBVO – De serialiseres og flyttes fysisk til klienten 12/14/2021 bjbu & nokn - Tietgen. Skolen 20
Konfiguration af web-serveren • Tilføj følgende til web. config: – Konfigurér IIS til at mappe til URL’ens extension, (. rem), til remoting – URL-forespørgslen mappes nu til Math. Library. Simple. Math <system. runtime. remoting> <application> <service> <wellknown mode="Single. Call" object. Uri="Simple. Math. rem" type="Math. Library. Simple. Math, Math. Library"> </wellknown> </service> </application> </system. runtime. remoting> 12/14/2021 bjbu & nokn - Tietgen. Skolen 21
Konfiguration af klienten • Sæt referencen til dll’en på sædvanlig vis • tilgå objektet vha. – Register. Well. Known. Client. Type() og new eller – Activator. Get. Object() • eller konfigurér vha. . config-filen herunder: <system. runtime. remoting> <application> <client> <wellknown type="Math. Library. Simple. Math, Math. Library" url="http: //localhost/Math. Service/Simple. Math. rem"> </wellknown> </client> </application> </system. runtime. remoting> 12/14/2021 bjbu & nokn - Tietgen. Skolen 22
Bemærk • Hosting på IIS forsimpler udviklingen • Nyt objekt for hvert kald forsimpler håndtering af hukommelse • Nyt objekt for hvert kald forhindrer bevarelse af tilstand – mere skalérbart, men tilstande skal nu bevares i en fil, database eller på klienten … 12/14/2021 bjbu & nokn - Tietgen. Skolen 23
Remoting For at bruge http connection skal man selv opsætte reference til System. Runtime. Remoting 12/14/2021 bjbu & nokn - Tietgen. Skolen 24
- Client server architecture in asp net
- Vcloud thin client
- Linux leger
- Application layer
- Create socket java
- Client server architektur definition
- Client server binding in distributed system
- Lập trình socket giao tiếp tcp client/server java
- Components of client server architecture
- Trelagsarkitektur
- Client server basics
- Str_echo
- Client server nos
- Client side and server side
- What is client server security
- Centralized vs client server architecture
- Client server architecture
- Citrix presentation server
- Arhitectura client server
- Dns server client
- Client server architettura
- Features of peer to peer network and client server network
- Client server computing examples
- Contoh component diagram sederhana
- Brpc client