UMEÅ UNIVERSITET 21 oktober 2003 Institutionen för Datavetenskap Laborationsrapport Laboration 1 Distribuerade system C, 5p Middleware.NET Inlämning 2 Namn E-mail Rickard Sjöström, Tomas Skott Christian Hilmersson, Ola Lundmark {c00rsm, c00tst, c00chn, c00olk}@cs.umu.se Handledare Jonny Pettersson, Magnus Janlert, Jonas Birmé
INNEHÅLL INNEHÅLL Innehåll 1 Inledning 1 2 Introduktion till.net 1 3 Distribuerade metoder - så funkar dom 2 4 Distribuerad dataöverföring 4 5 Felhantering 6 6 Säkerhet 7 7 Minneshantering 8 8 Källhänvisningar 9 i Middleware.NET
2 INTRODUKTION TILL.NET 1 Inledning Vi har valt att skriva om det middleware som används i Microsofts.NET-teknologi. Anledningen till att vi valde.net var att det kändes intressant att jobba med eftersom man har hört en hel del om det men vet ganska lite om hur det egentligen fungerar. Plattformen.NET är en hel samling med produkter som bygger på XML och branschstandarder för Internet. Vidare innehåller.net också moment i utvecklingen, hanteringen och upplevelsen av webbtjänster. Microsoft.NET öppnar dörren för att integrera informationssystem tack vare att det bygger på standarder för att få olika programvaror att fungera tillsammans. Allt detta sammanvägt gör.net till ett ofantligt stort projekt, vi kommer här att förklara hur.net-teknologin kan fungera som ett middleware vid utveckling av distribuerade system. 2 Introduktion till.net Microsoft.NET är en ny teknik som är på stor frammåtmarsch. Tekniken används idag på många stora företag och det blir att fler. Ett exempel är möjligheten för flygresenärer att kontrollera flygstatus och göra ombokningar via mobiltelefon. Microsoft menar att de har gått om Java trots att de för ett år sedan låg efter med stor marginal. Sun svarar med att de är mycket skeptiska till detta uttalande eftersom.net följer med Windows och därmed gör det mycket svårt att mäta. Vidare pekar Sun på att det finns en stor mängd UNIX-servrar idag och dessa kommer inte köra.net, vilket talar för Java-platformen. 1 Middleware.NET
3 DISTRIBUERADE METODER - SÅ FUNKAR DOM 3 Distribuerade metoder - så funkar dom Kärnan i.net middleware ligger i att kunna distribuera tjänster mellan datorer. I vanliga fall skulle man bli tvungen att utforma ett protokoll för kommunikationen i systemet. Detta har på sikt genererat ett mycket stort antal protokoll vilka ej kan kommunicera med varandra. I.NET används i grunden XML som gör att alla lätt kan förstå formatet på det som skickas. Detta i sin tur gör distribution av tjänster påtagligt enklare, vilket man kan se resultatet av i t.ex Microsoft.NET men också i andra system som använder XML för sina kommunikationsprotokoll. I ett webbtjänst-system, behöver de olika delarna finna ett sätt att upptäcka varandra och därefter också definiera hur de skall interagera och dela information med varandra över Internet. För att lösa dessa problem finns ett ramverk som heter UDDI. I detta ramverk ingår ett antal specifikationer som är en industristandard för att låta tjänster beskriva sig själva och för att låta dem bli upptäckta. UDDI-standarden är från början skapad av Microsoft, IBM och Ariba men ägs trots detta inte av något företag. I själva verket kommer standarden att överlämnas till en standardorganisation. För distribution av tjänster med XML Web Services (XML-Webbtjänster) så används en hel massa standarder, med lika många förkortningar, några av dem är WSDL (Web Services Description Language), HTTP (Hypertext Transfer Protocol), SOAP (Simple Object Access Protocol), DISCO (Discovery) och tidigare nämnda UDDI (Universal Description, Discovery, and Integration). För att få lite mer grepp om vad de olika stegen representerar så följer här en närmare beskrivning av var och en av de nyss införda begreppen. WSDL (Web Services Description Language) Ett XML-baserat format som beskriver allting en klient behöver för att interagera med en XML Web service (XMLwebbtjänst). Detta inkluderar XML Web services metoder, datatyperna som används för alla parametrar och returvärden samt de tillhandahållna metoderna för kommunikation. HTTP (Hypertext Transfer Protocol) Kommunikationsprotokollet som används för att sända XML Web service förfrågningar och svar över internet. SOAP (Simple Object Access Protocol) Ett XML-baserat format som används för att koda informationen i XML Web-services meddelanden. SOAP inkluderar ett sätt att representera vanliga datatyper över olika plattformar, t.ex. heltal, strängar och arrayer. DISCO (Discovery) DISCO är Microsofts första genombrott för att skapa enkla listor med XML Service-länkar. Detta tillåter klienter att upptäcka de tjänster som erbjuds av en särskild organisation. DISCO är planerat att bli utbytt av en annan liknande standard kallad WS-Inspection, som utvecklats tillsammans med IBM. UDDI (Universal Description, Discovery, and Integration) Den yngsta och minst utvecklade av standarderna. UDDI är en affärsverksamhets förråd av XML Web service-länkar designade för att låta en verksamhet hitta en annan baserat på servicetypen, affärsverksamhetens namn o.s.v. Denna specifikation kommer som tidigare nämnts att lämnas över till en standardorganisation där den säkerligen kommer att gå igenom många iterationer innan den blir brett accepterad. För att få lite bättre överblick på hur alla dessa standarder samverkar med varandra, för att hitta distribuerade funktioner/metoder (XML Web services) följer här ett exempel. 2 Middleware.NET
3 DISTRIBUERADE METODER - SÅ FUNKAR DOM Exemplet kan sammanfattas i fyra steg: 1. Klienten hittar XML Web servicen, antingen genom en förbestämd URL, genom att använda ett discovery-dokument eller UDDI-registret. 2. Klienten efterfrågar WSDL-dokumentet som beskriver XML Web servicen..net skapar detta dokument automatisk genom att undersöka din XML Web service. 3. Klienten genererar en proxy-klass baserad på WSDL-dokumentet. Om klienten är utvecklad i.net utförs det här steget automatiskt. 4. Klienten använder proxyklassen ungefär som om det vore en XML Web serviceklass som instantierats i den lokala processen. Bakom kulisserna, skickar proxyn ett SOAP-meddelande till XML Web servicen och tar emot ett SOAP-meddelanderesultat. Proxy-klassen hanterar Internetkommunikationen och SOAP-formateringen automatiskt. Förfarandet illustreras i figur 1 nedan. Figur 1: Illustration av hur kommunikation mellan server/klient fungerar m.h.a. SOAP (källa: Microsoft.NET Distributed Applications) 3 Middleware.NET
4 DISTRIBUERAD DATAÖVERFÖRING 4 Distribuerad dataöverföring När kommunikation sker mellan mellan olika system uppstår ett problem eftersom data i ett system inte nödvändigtvis representeras på samma sätt i ett annat. För att lösa detta så kan den som skickar datan antingen omvandlar den till mottagarens representation eller skickar med en beskrivning för hur datan ska tolkas. Dessa metoder skalar dock dåligt när ett stort antal olika system ska kommunicera. Ett tredje sätt att lösa problemet på, det som.net använder, är att alla omvandlar datan till ett format som alla kan förstå. Eftersom.NET är ett ramverk som stöder ett flertal olika sätt att implementera distribuerade tjänster så kan dataomvandlingen ske på flera sätt..net stöder dels webbtjänster för att kunna interagera med en mängd olika typer av applikationer på Internet och även objektorienterad RMI (Remote Method Invocation) i en del som kallas.net remoting. När man distribuerar en funktion som en webbtjänst så använder.net HTTP-protokollet för överföring av data. Anropsmeddelanden och returvärdet från funktionen skickas och kodas med hjälp av SOAP (Simple Object Access Protocol). SOAP-protokollet omvandlar ett lokalt anrop på klientdatorn till ett SOAP-meddelande som servern också kan förstå. När servern tar emot meddelandet omvandlar den meddelandet till ett lokalt anrop till den distribuerade funktionen. När exekveringen av funktionen har slutförts så omvandlar servern returvärdet till ett nytt SOAP-meddelande som skickas tillbaka till klienten..net remoting gör att man kan kan komma åt objekt och metoder som ligger på ett annat system eller i en annan process på samma dator..net remoting stöder överföring av objekt mellan två system på tre olika sätt: Som parametrar i ett metodanrop public int myremotemethod(myremoteobject obj) Som returvärde från ett metodanrop public MyRemoteObject myremotemethod() Som resultat av åtkomst av en medlem i en klass obj.mynestedobject När man önskar åtkomst till ett objekt på ett annat system så måste objektet på något sätt kunna förmedlas mellan de två systemen, så kallad marshalling. Det finns två typer av marshalling i.net, marshall-by-value (MBV) och marshall-by-reference (MBR). När man vill komma åt ett objekt med MBV så skickar servern över all data i objektet och all kod och sedan körs metodanropet eller attributåtkomsten lokalt i klienten. Används MBR så har klienten endast en referens till objektet på servern och när klienten begär åtkomst till objektet så skickas en förfrågan till serven som uför åkomsten och returnerar svaret. I praktiken så fungerar referensen som ett proxy-objekt som ligger lokalt på klientdatorn och detta objekt vidarbefodrar metodanrop och medlemsåtkomster via ett meddelande till servern. I.NET remoting kan man välja både vilken meddelandeformatering och vilken kommunikationskanal man vill använda. Två olika typer av formatering stöds som standard 4 Middleware.NET
4 DISTRIBUERAD DATAÖVERFÖRING i.net: SOAP, vilket är en öppen internet standard och även en egen binär formatering som endast stöds av.net applikationer. Den binära formateringen används oftast i situationer då prestanda är av hög prioritet och SOAP används när kommunikation mellan olika typer av plattformar är av viktig. De två olika kommunikationskanaler som stöds är HTTP, som normalt används med SOAP, och TCP, som normalt används med den binära meddelande formateringen. 5 Middleware.NET
5 FELHANTERING 5 Felhantering I.NET har Microsoft försökt få alla programmeringsspråk att använda strukturerade exceptions för felhantering, därför kan man nu finna samma konstruktion för felhantering i C#, Visual Basic.NET, JScript samt i Managed C++. Vidare finns CLR (Common Language Runtime) som tillhandahåller en plattform för att meddela program om fel på ett likformigt sätt. Detta ger att fel som uppstår i moduler skrivna i ett språk kan hanteras av en moduler skrivna i andra språk..net har bara ett sätt att meddela om fel, nämligen genom exceptions. Med try startar man felhantering av ett block, med catch fångar man upp de fel som inträffar, med finally körs ett block villkorslöst oavsett vilka fel som kan tänkas inträffa. 6 Middleware.NET
6 SÄKERHET 6 Säkerhet Säkerheten inom.net kan kategoriseras inom några olika områden, nämligen Evidence-based security/code access security: Systemadministratörer kan fördela vilka resurser olika typer av kod ska ha tillgång till genom Evidence-based- och Code access security. T ex kod belägen i speciella bibliotek, kod från Internet, kod med speciella hash-värden, kod med signatur eller kod med speciell nyckel. The verification process: Verification process förhindrar vanliga fel från att inträffa. Sådana fel kan t ex vara att använda Integers som pekare för att komma åt godtyckliga minnesområden, använda objekt som en annan typ för att därigenom tillåta läsning av privat minne utanför objektets gränser, referera till objekt som inte är initierade för att därigenom orsaka fel i systemet, buffer overflows, icke tillåtna minneshänvisningar samt förflyttning av exekveringen till godtyckliga delar av processen är också förhindrat med verification process. Role-based security: Role-based security innefattar både autentisering och auktorisering baserat på identitet samt vilken roll personen har i sammanhanget. I autentisering undersöks egenskaper som namn och lösenord vilket fastställer att användaren verkligen är den person den utgett sig för att vara. När autentiseringen är färdig kan applikationen avgöra vilken roll användaren har samt vilka operationer denna är tillåten att genomföra. Cryptography: Kryptografin i.net inkluderar funktioner för kryptering, digitala signaturer, hashing och slumptalsgenerering. De algoritmer det finns stöd för är DES, Triple- DES och RC2 vid symmetrisk kryptering samt RSA och DSA för asymmetrisk kryptering. För digitala signaturer används the XML digital signature specification och för för hashes används MD5 samt SHA1. Application Domains: Slutligen har.net en funktionalitet som segregerar delar av applikationer i så kallade application domains. En enskild process kan innehålla flera olika application domains med individuella bevisbaserde förtroendenivåer och tillhörande principer utan risk för någon skadlig konflikt dessa emellan. 7 Middleware.NET
7 MINNESHANTERING 7 Minneshantering Microsoft.NET använder s.k garbage collector för att komprimera minnet och därmed frigöra mer arbetsminne. För de flesta programmerare betyder detta att man inte behöver tänka på att deallokera minne för objekt. CLR n (common language runtime) tillhandahåller s.k ValueTypes, dessa liknar vanliga klasser men allokeras på runtime-stacken vilket medför att de automatiskt lämnar tillbaka allokerat minne när funktionen som de är definerade i returnerar. Med Managed Extensions i C++ kan man välja hur ett klassobjekt skall allokeras. Det man kan välja mellan är att det allokeras från garbage-collected heap eller som vanliga C++-objekt dvs att dem allokeras på C++-heapen och deallokeras med free. För att hantera garbage collection (minnesuppstädning) på den lokala maskinen kan man enkelt räkna antalet referenser till ett objekt och tabort ett objekt och frigöra dess resurser när inga referenser återstår. När det gäller minnesuppstädning för fjärrobjekt ( remote objects ) är det inte möjligt att räkna referenser till ett objekt (en frånkopplad klient kan fortfarande ha referenser kvar). Detta gör det mycket svårt att göra en effektiv garbage collector som skalar bra i en distribuerad miljö. När man designade.net Remoting valde man att använda sig av ett s.k lease based lifetime -system. Det fungerar så att man ökar eller minskar tiden för ett objekt att leva beroende på om ett metodanrop kommer eller inte. En egenskap utöver tid att leva är den s.k RenewOnCallTime vilket innebär att lease -tiden för ett objekt ökas när en metod i objektet anropas. Lease -objektet själv håller endast reda på tid att leva. Det varken ökar eller minskar detta. Lösningen på detta har implementerats i en klass som heter LeaseManager, vad den gör är att den kör en tråd i bakgrunden som hela tiden minskar objektens tid att leva (time to live). På motsvarande sätt fungerar LeaseSink som ökar ett objekts tid att leva varje gång ett metodanrop mottages. Som ett tillägg till detta TTL-system använder man s-k Sponsor-objekt. Dessa kontaktas av LeaseManager när tiden att leva börjar når noll. 8 Middleware.NET
8 KÄLLHÄNVISNINGAR 8 Källhänvisningar An Introduction to Microsoft.NET Remoting Framework http://msdn.microsoft.com/library/default.asp? url=/library/en-us/dndotnet/html/introremoting.asp Web Services Description Language (WSDL) 1.1 http://www.w3.org/tr/wsdl Simple Object Access Protocol (SOAP) 1.1 http://www.w3.org/tr/soap.net Remoting Overview http://msdn.microsoft.com/library/default.asp? url=/library/en-us/cpguide/html/cpconnetremotingoverview.asp Upplevelser - Det här är.net http://www.microsoft.com/sverige/net/thisis/experiences/default.asp Microsoft says.net usage passes Java http://www.infoworld.com/article/03/08/07/hnmicrorudder_1.html Microsoft.NET Framework FAQ http://msdn.microsoft.com/library/default.asp? url=/library/en-us/dndotnet/html/faq111700.asp Microsoft.NET Distributed Applications http://www.microsoft.com/mspress/books/sampchap/6723.asp#100 Security in the Microsoft.NET Framework http://www.microsoft.com/technet/treeview/? url=/technet/itsolutions/net/evaluate/itpronet.asp The Mysteries of Distributed Garbage Collection http://www.ingorammer.com/remotingfaq/lifetime.html 9 Middleware.NET