1 / 36

Przetwarzanie rozproszone Domeny Aplikacji ( AppDomain )

Przetwarzanie rozproszone Domeny Aplikacji ( AppDomain ). AppDomain A. AppDomain B. Pakiet B1. Pakiet A1. Pakiet Bm. Pakiet An. tworzenie nowej domeny aplikacji // Ustawienie ApplicationBase na bi eżą cy katalog AppDomainSetup info = new AppDomainSetup();

cree
Download Presentation

Przetwarzanie rozproszone Domeny Aplikacji ( AppDomain )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Przetwarzanie rozproszone Domeny Aplikacji ( AppDomain ) AppDomain A AppDomain B Pakiet B1 Pakiet A1 . . . . . . Pakiet Bm Pakiet An

  2. tworzenie nowej domeny aplikacji • // Ustawienie ApplicationBase na bieżący katalog • AppDomainSetup info = new AppDomainSetup(); • info.ApplicationBase = @"file:\\" + System.Environment.CurrentDirectory; • // Utworzenie domeny aplikacji • AppDomain dom = AppDomain.CreateDomain("RemoteDomain", null, info);

  3. // Załadowanie pakietu Display // i utworzenie egzemplarza typu Display BindingFlags flags = (BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance); ObjectHandle objh = dom.CreateInstance("Display", "Display.Disp", // plik, klasafalse, flags, null, null, null, null, null); // Rozpakowanie obiektu Object obj = objh.Unwrap(); // Rzutowanie do aktualnego typu Disp h = (Disp)obj; // Wywołanie metody h.Show("Dobry wieczór!"); Domain

  4. Wątek AP1 Wątek AP2 Wątek BP1 Stos lokalny Stos lokalny Stos lokalny Pamięć lokalna Pamięć lokalna Pamięć lokalna • Aplikacja rozproszona AppDomain A AppDomain B Dane wspólne Dane wspólne

  5. Technologie wymiany danych pomiędzy aplikacjami • IPC ( Inter Process Communication, Named Pipes ) • DCOM, COM+ ( Distributed Common Object Model ) • MSMQ ( Microsoft Message Queuing ) • NET . Remoting • XML Web Services • NET.Networking (gniazda, klasy: transportowe, protokółów) • Peer – to – Peer WCFWindows Communication Foundation

  6. W C F : Windows Communication Foundation • udostępnianie usług (operacji), kolekcji danych, • komputer lokalny, sieć lokalna, internet • zarządzanie usługodawcą: • system Windows • IIS : Internet Information Services • WAS : Windows Activation Service (Win 7, WS) • AppFabric (Windows Server) Juval Löwy, Programowanie usług WCF, Helion – O'Reilly, 2012

  7. SingleCall, Singleton, ClientActivated NET . Remoting Obiekt zdalny Klient F1(x) F1(x) Przeźroczysty zastępca Serwer Rzeczywisty zastępca Kanał : HTTP, TCP { BIN, SOAP } pliki konfiguracyjne, konfiguracja programowa

  8. W C F : Windows Communication Foundation Klient (client) Nosiciel (host) Kontrakt (contract) Zastępca (proxy) Plik konfiguracyjny (configuration file) Plik konfiguracyjny (configuration file)

  9. ABC technologii WCF • A : adres ( address ) - lokalizacja usługi, kolekcji danych • B : powiązanie ( binding ) - protokóły, kodowanie, transport • C : kontrakt ( contract ) - definicje udostępnianych metod, kolekcji danych A + B + C  punkt końcowy ( endpoint )

  10. Adresy ( lokalizacja kontraktu ) • składnia adresu • [ adres_bazowy ] / [ opcjonalny URI ] • adres bazowy • [ rodzaj_transportu ] • [ komputer lub domena ] • [ : opcjonalny numer portu ]

  11. Rodzaje adresów • adresy TCP • net.tcp//localhost:8004/NowaUsługa • net.tcp//150.254.3.2:7000/DalekaUsługa • adresy HTTP • http://localhost // port domyślny 80 • http://libra:500/Matematyka • adresy IPC • net.pipe://localhost/DużaRura • adresy MSMQ • net.msmq://localhost/Kol_A // publiczna • net.msmq://localhost/private/Kol_B // prywatna

  12. Powiązania( protokół transportowy / kodowanie ) • powiązanie podstawowe ( interoperacyjne ) • HTTP, HTTPS / tekstowe, MTOM (SOAP Message Transmission Optimization Mechanism ) • basicHttpBinding • powiązanie TCP ( intranet, tylko WCF ) • TCP / binarne ( Microsoft specific ) • netTcpBinding

  13. powiązanie IPC ( ten sam komputer ) • IPC / binarne ( Microsoft specific ) • netNamedPipeBinding • powiązanie WS ( interoperacyjne WS-*) • HTTP, HTTPS / tekstowe, MTOM • wsHttpBinding • powiązanie MSMQ • MSMQ / binarne ( Microsoft specific ) • netMsmqBinding

  14. Rodzaje kontraktów • kontrakt usług • kontrakt danych • kontrakt komunikatów • kontrakt błędów

  15. Kontrakt usług • biblioteka .dll udostępniająca : • interfejsy realizowane przez dedykowane klasy • metody definiowane w klasach

  16. // kontrakt - udostępnianie interfejsu • using System.ServiceModel; • namespace Wyrocznia • { • [ServiceContract] // ew. nazwa usługi, domena • public interface IPorada • { • [OperationContract] • string Odpowiedz (string pytanie); • } • public class Babka : IPorada • { public string Odpowiedz (string pytanie) • { return"Tak! "; } • } } // .dll

  17. // udostępnianie metod [ServiceContract] public class WhereWhen { [OperationContract] publicstring Where ( ) { return " Miami "; } [OperationContract] public string When ( ) { return " Tomorrow "; } }

  18. using System.ServiceModel; // nosiciel using Wyrocznia; // .dll w katalogu domyślnym namespace NosicielWyroczni { class Nosiciel { static void Main(string [ ] args) { using (ServiceHost sHost = new ServiceHost ( typeof ( Babka ))) { sHost.Open(); Console.WriteLine("Nosiciel jest czynny."); Console.WriteLine("Naciśnij Enter aby zakończyć..."); Console.ReadLine( ); } } } // aplikacja konsolowa

  19. // klient // uruchomić nosiciela// AddServiceReference  Wróżka, PoradaClient ( usługa, obiekt interfejsu) // dodać referencję usługi Wróżka using KlientWyroczni.Wróżka; namespace KlientWyroczni { class Program { static void Main ( string [ ] args ) { using ( PoradaClient babka = new PoradaClient ( )) { string odp = babka.Odpowiedz ( " Jak żyć ? " ); Console.WriteLine( "Wyrocznia powiedziała : " + odp ); } } } // można użyć svcutil.exe (NET.SDK)

  20. Plik konfiguracyjny nosiciela <?xmlversion="1.0"?> <configuration> <system.serviceModel> <services> <servicename="Wyrocznia.Babka" behaviorConfiguration="WyroczniaMEXBehavior"> <endpointaddress=""binding="basicHttpBinding" contract="Wyrocznia.IPorada"/> <!-- Enable the MEX endpoint --> <endpointaddress="mex"binding="mexHttpBinding" contract="IMetadataExchange"/>

  21. <!--Add this so MEX knows the address of service --> <host> <baseAddresses> <addbaseAddress="http://localhost:8090/Babka"/> </baseAddresses> </host> </service></services> <!-- A behavior definition for MEX --> <behaviors> <serviceBehaviors> <behaviorname="WyroczniaMEXBehavior"> <serviceMetadatahttpGetEnabled="true"/> </behavior> </serviceBehaviors></behaviors></system.serviceModel> </configuration> Wyrocznia HTTP

  22. Powiązanie TCP • // plik konfiguracyjny nosiciela • <servicename="Wyrocznia.Babka"behaviorConfiguration="WyroczniaMEXBehavior"> • <endpointaddress=""binding="netTcpBinding"contract="Wyrocznia.IPorada"/> • <!-- Enable the MEX endpoint --> • <endpointaddress="mex"binding="mexTcpBinding"contract="IMetadataExchange"/> • <!-- Enable the MEX endpoint --> • <host> • <baseAddresses> • <addbaseAddress="net.tcp://localhost:8090/Babka"/> • <addbaseAddress="http://localhost:8080/Babka"/> • </baseAddresses> </host></service> Wyrocznia TCP

  23. Powiązanie IPC • // plik konfiguracyjny nosiciela • <servicename="Wyrocznia.Babka"behaviorConfiguration="WyroczniaMEXBehavior"> • <endpointaddress=""binding="netNamedPipeBinding"contract="Wyrocznia.IPorada"/> • <!-- Enable the MEX endpoint --> • <endpointaddress="mex"binding="mexTcpBinding"contract="IMetadataExchange"/> • <!-- Enable the MEX endpoint --> • <host> • <baseAddresses> • <addbaseAddress="net.pipe://localhost"/> • <addbaseAddress="http://localhost:8080/Babka"/> • </baseAddresses> </host></service> Wyrocznia IPC

  24. Asynchroniczne wywołanie usługi • kontrakt usługi, nosiciel : bez zmian • uruchomić nosiciela • po dokonaniu połączenia z nosicielem w oknie • AddService Reference wybrać Advanced i zaznaczyć • Generate asynchronous operations • w programie klienta:

  25. using (PoradaClient proxy = newPoradaClient()) { proxy.Open(); IAsyncResult result = proxy.BeginOdpowiedz( pytanie, // argument funkcji Odpowiedz // funkcja zwrotna ar => { Console.WriteLine("Wróżka odpowiedziała : " + proxy.EndOdpowiedz(ar)); }, null); // asyncState while (!result.IsCompleted) { Thread.Sleep(100); } } Wyrocznia ASY

  26. Kontrakty danych // w programie usługi .dll [ServiceContract] publicinterfaceIUniversity { [OperationContract] Student GetStudent(int album); }

  27. [DataContract] publicclassStudent { [DataMember] publicstring ForeName; [DataMember] publicstring LastName; [DataMember] publicint Album; publicdouble Score; }

  28. // nosiciel bez zmian ( .cs i .config ) // // klient  dodawanie referencji serwisu bez zmian // program : // using UnivClient.University; // UniversityClient szukacz = newUniversityClient(); string pytanie; UnivClient.University.Student st; // pytanie = Console.ReadLine(); st = szukacz.GetStudent(int.Parse(pyt)); DataContract

  29. ABC definiowane programowo • kontrakt .dll bez zmian • nosiciel • using System.ServiceModel; • using Wyrocznia; • namespace Nosiciel • { classProgram • { staticvoid Main(string[] args) • {ServiceHost serviceHost = newServiceHost(typeof(Babka)); • BasicHttpBinding basicBinding = newBasicHttpBinding(); • serviceHost.AddServiceEndpoint(typeof(IPorada), basicBinding, "http://localhost:8091/Babka"); • serviceHost.Open(); • }}}

  30. klient • // AddServiceReference jak poprzednio • using System.ServiceModel; • using Klient.Wróżka; • namespace Klient • { classProgram • { staticvoid Main(string[] args) • { BasicHttpBinding basicBinding = • newBasicHttpBinding(); • EndpointAddress address = • newEndpointAddress("http://localhost:8091/Babka"); • PoradaClient pytia = • newPoradaClient(basicBinding, address); • ...... } } } Prog

  31. Usługi współużytkowane • kontrakt .dll • namespace Liczarka • { • [ServiceContract] • publicinterfaceIDodawanie • { • [OperationContract] • int Dodaj(int start); • }

  32. [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] publicclassLicznik : IDodawanie { staticint Obiekty = 0; int Ile = 0; public Licznik() { ++Obiekty; } publicint Dodaj(int kto) { return kto + ++Ile * 10 + Obiekty * 1000; } }}

  33. nosiciel • staticvoid Main(string[] args) • { • Console.WriteLine("***** Nosiciel Single *****"); • Licznik lili = newLicznik(); • ServiceHost serviceHost = newServiceHost(lili); • // Open the host and start listening. • serviceHost.Open(); • }

  34. klient • DodawanieClient licz = newDodawanieClient(); • int odp, start = 3; • Console.WriteLine("Dodaj 1 ... "); • Console.ReadLine(); • odp = licz.Dodaj(kto); • Console.WriteLine("Kto = {0}, Licznik = {1}, • Obiekty = {2}", • (odp % 10).ToString(), (odp%1000/10).ToString(), • (odp/1000).ToString() ); Single

  35. Wydajność kanałów

  36. TimePerf

More Related