Transcript Document
.NET web szolgáltatások .NET, C# áttekintés Bilicki Vilmos [email protected] www.inf.u-szeged.hu/~bilickiv 1 A mai előadás tartalma: .NET Architektúra Objektumok Meta Adatok Futtató környezet Szemétgyűjtő 2 DEMÓ: WEB Service 3 A .NET keretrendszer áttekintése A .NET keretrendszer Common Language Runtime A .NET keretrendszer osztálykönyvtára ADO.NET: Adat és XML Web szolgáltatások 4 A .NET keretrendszer VB C++ C# Perl Web Services Python … User Interface ASP.NET ADO.NET: Data and XML .NET Framework Class Library Common Language Runtime Message Queuing COM+ (Transactions, Partitions, Object Pooling) Win32 5 IIS WMI Common Language Runtime .NET Framework Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debugger MSIL to Native Compilers Code Manager Class Loader 6 Garbage Collection A .NET osztálykönyvtár Átfogja a használható programozási nyelveket Objektum orientált és konzisztens Egyszerűen módosíthatjuk a keretrendszer tulajdonságait Biztonságos 7 Növeli a produktivitást mert csökkenti a megtanulandó API-k számát A közös típus rendszeren készült Bővíthető Nyelvközi öröklődést és hibakeresést tesz lehetőve Jól integrálódik az eszközökkel Biztonságos alkalmazásokat írhatunk ADO.NET: Adat és XML ADO.NET: Data and XML System.Data 8 System.Xml OleDb SqlClient XSL Common SQLTypes XPath Serialization Web űrlapok és szolgáltatások ASP.NET System.Web Services UI Description HtmlControls Discovery WebControls Protocols 9 Caching Security Configuration SessionState Névterek System 10 Collections IO Security Configuration Net ServiceProcess Diagnostics Reflection Text Globalization Resources Threading Runtime .NET keretrendszer fontosabb megoldásai Windows Forms Web Forms XML Web Services 11 Demó C#, VB 12 Menedzselt futtatás EXE/DLL (MSIL and metadata) Compiler Class Loader Class Libraries (MSIL and metadata) JIT Compiler with optional verification Trusted, pre-JITed code only Managed Native Code Call to an uncompiled method Execution Security Checks 13 Runtime Engine Source Code Meta adat Fordításkor minden fontos információt megtart Minden .NET fájl és szerelvény tartalmazza Lehetővé teszi a futtató környezet számára: Kód megtalálását és betöltését Kód biztonság növelését Gépközeli kód generálását Reflexiót 14 Microsoft Köztes Nyelv MSIL Minden támogatott fordító erre fordít JIT fordítók fordítják gépközeli nyelvre 15 Szerelvények (Assemblies) Managed Module (MSIL and Metadata) Managed Module (MSIL and Metadata) Assembly Manifest .html .gif Resource Files 16 Multiple Managed Modules and Resource Files Are Compiled to Produce an Assembly Demó ILDASM 17 Alkalmazás tartományok Processz határok jelentették az alkalmazások határát A CLR-ben Alkalmazás Tartományok jelentik ezt A kód ellenőrzés miatt sokkal kisebb költséggel menedzselhetőek Több alkalmazás tartomány futhat egy processzben 18 Egy alkalmazás meghibásodása nem hat a másikra Alkalmazások telepítése Közös koncepció Egyszerű alkalmazások Komponensre bontott alkalmazások Konfiguráció és elosztás 19 Közös Koncepció Az osztályok és típusok: Szerelvények (Assemblies): 20 Névterekbe vannak rendezve PE fájlokba tárolódnak (DLL, EXE) Teljesen dokumentáltak (Meta Data) Egy vagy több PE fájl tartalmaznak Tartalmaz egy leíró fájlt mely megadja a benne szereplő fájlokat Specifikálja az importált és expoprtált osztályokat Az alap eleme a telepítésnek, verzió kezelésnek Egyszerű alkalmazások .NET futtató környezete szükséges Távolról és helyi gépről is futtatható Nem készítenek Registry bejegyzéseket Nem tehet tönkre más alkalmazást Megszűnik a DLL pokol A helyi fájlok törlésével eltávolítható 21 Komponensre bontott alkalmazások Saját szerelvények Összefüggő alkalmazások szerevényei: Tulajdonképpen az alkalmazás Közös alkönyvtárba telepítve Megosztott szerelvények Erős név és verzió információ szükséges A globális szerevény gyorstárba települnek 22 Konfiguráció és telepítés Konfiguráció Egyszerű szövegfájlok Telepítés MSI, CAB formátum Windows 2000 IntelliMirror or Microsoft Systems Management Server 23 Komponensek használata Mások által használt szerelvény: Stringer.dll szerelvény a Stringer.cs –ből gyártva: csc /target:library Stringer.cs Kliens hivatkozása csc /reference:Stringer.dll Client.cs 24 Saját szerelvények specifikálása Könyvtár megadása Client.exe.config privatePath elem <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath=“MyStringer"/> </assemblyBinding> </runtime> </configuration> 25 Erős nevű szerelvény Globális szerelvény gyorstár Nem összetartozó programok által közösen használt szerelvényeket tartalmazza Erős nevekre van szükség PKI használat: sn –k orgKey.snk Verzió és kulcs információ: #if STRONG [assembly: System.Reflection.AssemblyVersion("1.0.0.0")] [assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")] #endif Fordítás: csc /define:STRONG /target:library /out:AReverser.dll AReverser.cs 26 Megosztott komponensek telepítése A központ gyűjteménybe gacutil /i AReverser.dll Központi gyűjtemény vizsgálata gacutil /l Eltávolítás gacutil /u AReverser 27 Demó: Verzió, Kulcs, Telepítés 28 Közös típus rendszer Common Type System Elemei OO tulajdonságok 29 Közös Típus Rendszer arch. 30 Érték típusok és Referencia típusok Érték típusok primitív vagy a felhasználó által definiált adatstruktúrák A Stack-ben helyezkednek el Alapértelmezésben másolatként adódnak át Referencia típusok objektumok: A heap memóriában jönnek létre a new kulcsszóval Referencia szerint adódnak át 31 A CTS elemei Primitív típusok Objektumok Konstruktorok Tulajdonságok Saját Típusok Felsorolásos típusok Interfészek 32 Primitív típusok A legtöbb nyelvben közös kis típusok Elnevezési különbségek C# támogatás Konverziók 33 Objektumok Minden osztály a System.Object-ből származik Specifikálják az adatot és a viselkedést A mezők definiálják az adatot A metódusok a viselkedést 34 class Accumulator { public float Result; public void Add(float amount) { Result += amount; } } Konstruktorok Inicializálás Nulla vagy több paraméter class Rectangle { private int x1,y1,x2,y2; public Rectangle(int x1, int y1, int x2,int y2) { this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; } } 35 Tulajdonságok Hozzáférés mezőkhöz (CORBA attribute) Get/Set public float Start { get { return start; } set { if (start >= 0) start = value; } } 36 Saját típusok A System.ValueType-ből származnak A struct kulcsszóval definiáljuk (C#) Nem származtatható struct Employee { public string Name; public ushort Age; public DateTime HireDate; public float Tenure() { TimeSpan ts = DateTime.Now – HireDate; return ts.Days/(float)365; } } 37 Felsorolások .NET keretrendszer felsorolások A System.Enum-ból származnak Az enum kulcsszóval enum SeatPreference : { Window, //Assigned Center, //Assigned Aisle //Assigned } 38 ushort value 0 value 1 value 2 Interfészek Metódusok és tulajdonságok megjelölése interface ICDPlayer { void Play(short playTrackNum); void Pause(); void Skip(short numTracks); short CurrentTrack { get; set; } } 39 Polimorfizmus Sealed Abstract New Virtual Override 40 Demó: Kutya 41 Meta adatok Hordozható kód (reflexió) CORBA IDL Java bájtkód 42 Attribútumok Az attribútumok: Olyan elemek melyek a futtató környezet számára biztosítanak információkat A meta adatok között vannak tárolva .NET –ben előre definiált attribútumokat is használhatunk A futtató környezet az attribútumoknak megfelelően viselkedik [attribute(positional_parameters,named_parameter=value, ...)] element 43 Használható attribútumok class MyClass { [Conditional ("DEBUGGING")] public static void MyMethod( ) [DllImport("MyDLL.dll", EntryPoint=“MyFunction")] { ... public static extern int MyFunction(string param1); } } public class MyClass( ) { ... int result = MyFunction("Hello Unmanaged Code"); ... } using EnterpriseServices; ... [Transaction(TransactionOption.Required)] public class MyTransactionalComponent : ServicedComponent { ... }44 Saját attribútumok Hatókör specifikálása AttributeUsage [AttributeUsage(AttributeTargets.Method)] public class MyAttribute: System.Attribute { ... } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] public class MyAttribute: System.Attribute { ... } 45 Példa [AttributeUsage(AttributeTargets.Property)] public class SPEPPAttribute : System.Attribute { private String _name; private FType _ftype; private String _values; public SPEPPAttribute(String name) { _name = name; public String Name { get{return _name;} set{_name = value;} } public FType FieldType { get{return _ftype;} set{_ftype = value;} } public String FieldValues { get{return _values;} set{_values = value;} } } 46 } Példa [SPEPPAttribute("Way", FieldType=FType.Enum, FieldValues = "MessageDirection")] public string Way { get { return this._way; } set { this._way = value; } } 47 Példa pF.Text = this.GetType().Name+" Properties"; foreach(System.Reflection.PropertyInfo pinf in GetType().GetProperties()) attrs = pinf.GetCustomAttributes(typeof(SPEPPAttribute),true); foreach(SPEPPAttribute sa in attrs) { label = new Label(); label.Text = sa.Name; if(label.Text.Length > maxSizeX) maxSizeX = label.Text.Length; label.Location = p; pF.Controls.Add(label); switch(sa.FieldType) { case FType.Enum: try { typ = Type.GetType("spepp."+sa.FieldValues,true,true); } catch(Exception e) {MessageBox.Show(e.Message);} langAr = Enum.GetNames(typ); .. 48 Meta adatok vizsgálata MemberInfo osztály a System.Reflection névtérben System.Type.GetMembers System.Type System.Reflection.MemberInfo[ ] memberInfoArray; memberInfoArray = typeof(MyClass).GetMembers( ); System.Reflection.MemberInfo typeInfo; typeInfo = typeof(MyClass); object[ ] attrs = typeInfo.GetCustomAttributes(false); 49 Memória menedzsment Memória Menedzsment alapok Erőforrás menedzsment (nem memória) Implicit erőforrás menedzsment Explicit erőforrás menedzsment 50 A .NET típusok memória menedzsmentje Az érték típusok a vermet használják A memória foglalás és felszabadítás automatikus és biztonságos Menedzselt objektumok a halomba tárolódnak (heap) New operátor Szemét gyűjtő takarít 51 Egyszerű szemét gyűjtés Egyszerű szemét gyűjtő algoritmus Addig vár míg a menedzselt kód szálai várakozó állapotba nem kerülnek Az elérhető objektumokból gráfot készít Átmozgatja az elérhető objektumokat a tömörített halomba • - Az elérhetetlen objektumok területe felszabadul Frissíti az átmozgatott objektumok referenciáit Körkörös referencia hivatkozások automatikusan kezelve vannak 52 Erőforrás menedzsment Implicit erőforrás kezelés Explicit erőforrás kezelés 53 Finalizáció A Befejező kódot a GC hívja meg C#-ban destruktor class Foo { private System.IO.FileStream fs; //... public Foo() { fs = new System.IO.FileStream( "bar", FileMode.CreateNew); } ~Foo() { fs.Close(); } } 54 GC befejezés A futtató környezet rendelkezik egy listával azokról az objektumokról melyek befejezést igényelnek Az elérhetetlen befejezésre váró objektumok: Várakozó sor A referenciák hozzáadódnak az freachable sorhoz Az objektumok így elérhetőek és nem szemetek A többi szokás szerint… 55 Befejzés Finalize szál fut Végrehajtja az objektumok Finalize metódusát A referenciákat eltávolítja a sorból Ha nem lettek feltámasztva akkor szemétté lesznek nyilvánítva GC… 56 Explicit erőforrás menedzsment Az IDisposable Interfész és a Dispose metódus void DoSomething() { Resource r = new Resource(...); try { r.Foo(); } finally { if (r != null) ((IDisposable)r).Dispose(); } } class ResourceWrapper : IDisposable { // see code example for details } 57