57
1 .NET web szolgáltatások .NET, C# áttekintés Bilicki Vilmos [email protected] www.inf.u-szeged.hu/~bilickiv

NET web szolgáltatások

  • Upload
    landen

  • View
    23

  • Download
    0

Embed Size (px)

DESCRIPTION

.NET web szolgáltatások. .NET, C# áttekintés Bilicki Vilmos [email protected] www.inf.u-szeged.hu/~bilickiv. A mai előadás tartalma:. .NET Architektúra Objektumok Meta Adatok Futtató környezet Szemétgyűjtő . DEMÓ: WEB Service. A .NET keretrendszer áttekintése. - PowerPoint PPT Presentation

Citation preview

Page 1: NET web szolgáltatások

1

.NET web szolgáltatások

.NET, C# áttekintés

Bilicki [email protected]/~bilickiv

Page 2: NET web szolgáltatások

2

A mai előadás tartalma: .NET

ArchitektúraObjektumokMeta AdatokFuttató környezetSzemétgyűjtő

Page 3: NET web szolgáltatások

3

DEMÓ:

WEB Service

Page 4: NET web szolgáltatások

4

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

Page 5: NET web szolgáltatások

5

A .NET keretrendszer

Win32Win32

MessageMessageQueuingQueuing

COM+COM+(Transactions, Partitions, (Transactions, Partitions,

Object Pooling)Object Pooling)IISIIS WMIWMI

Common Language RuntimeCommon Language Runtime

.NET Framework Class Library.NET Framework Class Library

ADO.NET: Data and XMLADO.NET: Data and XML

Web ServicesWeb Services User InterfaceUser Interface

VB C++ C#

ASP.NETASP.NET

Perl Python …

Page 6: NET web szolgáltatások

6

Common Language Runtime

.NET Framework Class Library Support.NET Framework Class Library Support

Thread SupportThread Support COM MarshalerCOM Marshaler

Type CheckerType Checker Exception ManagerException Manager

MSIL to NativeMSIL to NativeCompilersCompilers

CodeCodeManagerManager

GarbageGarbageCollectionCollection

Security EngineSecurity Engine DebuggerDebugger

Class LoaderClass Loader

Page 7: NET web szolgáltatások

7

A .NET osztálykönyvtár

Átfogja a használható programozási nyelveket Nyelvközi öröklődést és hibakeresést tesz

lehetőve Jól integrálódik az eszközökkel

Objektum orientált és konzisztens 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ő

Egyszerűen módosíthatjuk a keretrendszer tulajdonságait

Biztonságos Biztonságos alkalmazásokat írhatunk

Page 8: NET web szolgáltatások

8

ADO.NET: Adat és XML

ADO.NET: Data and XMLADO.NET: Data and XML

OleDbOleDb SqlClientSqlClient

CommonCommon SQLTypesSQLTypes

System.Data

XSLXSLSerializationSerialization

XPathXPath

System.Xml

Page 9: NET web szolgáltatások

9

ASP.NETASP.NET

Web űrlapok és szolgáltatások

System.WebSystem.Web

ConfigurationConfiguration SessionStateSessionState

CachingCaching SecuritySecurity

ServicesServices

DescriptionDescription

DiscoveryDiscovery

ProtocolsProtocols

UIUI

HtmlControlsHtmlControls

WebControlsWebControls

Page 10: NET web szolgáltatások

10

Névterek

System System

GlobalizationGlobalization

DiagnosticsDiagnostics

ConfigurationConfiguration

CollectionsCollections

ResourcesResources

ReflectionReflection

NetNet

IOIO

ThreadingThreading

TextText

SecuritySecurity RuntimeRuntime

ServiceProcessServiceProcess

Page 11: NET web szolgáltatások

11

.NET keretrendszer fontosabb megoldásai

Windows Forms Web Forms XML Web Services

Page 12: NET web szolgáltatások

12

DemóC#, VB

Page 13: NET web szolgáltatások

13

Menedzselt futtatás

Class LoaderClass LoaderClass LoaderClass Loader

JIT CompilerJIT Compilerwith optionalwith optionalverificationverification

JIT CompilerJIT Compilerwith optionalwith optionalverificationverification

ExecutionExecution

Security ChecksSecurity Checks

EXE/DLL(MSIL and

metadata)

EXE/DLL(MSIL and

metadata)

ClassLibraries

(MSIL and

metadata)

ClassLibraries

(MSIL and

metadata)

Trusted,pre-JITedcode only

Call to anuncompiled

method

Runtime Engine

ManagedNative Code

CompilerCompiler SourceCode

SourceCode

Page 14: NET web szolgáltatások

14

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étKód biztonság növelésétGépközeli kód generálásátReflexiót

Page 15: NET web szolgáltatások

15

Microsoft Köztes Nyelv MSIL Minden támogatott fordító erre fordít JIT fordítók fordítják gépközeli nyelvre

Page 16: NET web szolgáltatások

16

Szerelvények (Assemblies)

AssemblyAssembly

ManifestManifest

Multiple Managed Modules andResource FilesAre Compiled to Produce an Assembly

Managed Module(MSIL and Metadata)Managed Module

(MSIL and Metadata)

Managed Module(MSIL and Metadata)Managed Module

(MSIL and Metadata)

.html

.gif

Resource Files

Page 17: NET web szolgáltatások

17

DemóILDASM

Page 18: NET web szolgáltatások

18

Alkalmazás tartományok Processz határok jelentették az

alkalmazások határát A CLR-ben Alkalmazás Tartományok

jelentik eztA kód ellenőrzés miatt sokkal kisebb

költséggel menedzselhetőekTöbb alkalmazás tartomány futhat egy

processzben Egy alkalmazás meghibásodása nem hat a

másikra

Page 19: NET web szolgáltatások

19

Alkalmazások telepítése Közös koncepció Egyszerű alkalmazások Komponensre bontott alkalmazások Konfiguráció és elosztás

Page 20: NET web szolgáltatások

20

Közös Koncepció Az osztályok és típusok:

Névterekbe vannak rendezve PE fájlokba tárolódnak (DLL, EXE) Teljesen dokumentáltak (Meta Data)

Szerelvények (Assemblies): 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

Page 21: NET web szolgáltatások

21

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ó

Page 22: NET web szolgáltatások

22

Komponensre bontott alkalmazások

Saját szerelvényekTulajdonképpen az alkalmazás

Összefüggő alkalmazások szerevényei:Közös alkönyvtárba telepítve

Megosztott szerelvényekErős név és verzió információ szükségesA globális szerevény gyorstárba települnek

Page 23: NET web szolgáltatások

23

Konfiguráció és telepítés

KonfigurációEgyszerű szövegfájlok

TelepítésMSI, CAB formátumWindows 2000 IntelliMirror or Microsoft

Systems Management Server

Page 24: NET web szolgáltatások

24

Komponensek használata Mások által használt szerelvény:

Stringer.dll szerelvény a Stringer.cs –ből gyártva:

Kliens hivatkozása

csc /target:library Stringer.cs csc /target:library Stringer.cs

csc /reference:Stringer.dll Client.cscsc /reference:Stringer.dll Client.cs

Page 25: NET web szolgáltatások

25

Saját szerelvények specifikálása

Könyvtár megadásaClient.exe.config privatePath elem

<configuration>

<runtime>

<assemblyBinding

xmlns="urn:schemas-microsoft-com:asm.v1">

<probing privatePath=“MyStringer"/>

</assemblyBinding>

</runtime>

</configuration>

<configuration>

<runtime>

<assemblyBinding

xmlns="urn:schemas-microsoft-com:asm.v1">

<probing privatePath=“MyStringer"/>

</assemblyBinding>

</runtime>

</configuration>

Page 26: NET web szolgáltatások

26

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:

Verzió és kulcs információ:

Fordítás:

#if STRONG[assembly: System.Reflection.AssemblyVersion("1.0.0.0")][assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")]#endif

#if STRONG[assembly: System.Reflection.AssemblyVersion("1.0.0.0")][assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")]#endif

csc /define:STRONG /target:library /out:AReverser.dll AReverser.cs

csc /define:STRONG /target:library /out:AReverser.dll AReverser.cs

sn –k orgKey.snk sn –k orgKey.snk

Erős nevű szerelvény

Page 27: NET web szolgáltatások

27

Megosztott komponensek telepítése

A központ gyűjteménybe

Központi gyűjtemény vizsgálata

Eltávolítás

gacutil /i AReverser.dll gacutil /i AReverser.dll

gacutil /l gacutil /l

gacutil /u AReversergacutil /u AReverser

Page 28: NET web szolgáltatások

28

Demó:Verzió, Kulcs, Telepítés

Page 29: NET web szolgáltatások

29

Közös típus rendszer Common Type System Elemei OO tulajdonságok

Page 30: NET web szolgáltatások

30

Közös Típus Rendszer arch.

Page 31: NET web szolgáltatások

31

Érték típusok és Referencia típusok

Érték típusok primitív vagy a felhasználó által definiált adatstruktúrákA Stack-ben helyezkednek elAlapé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

Page 32: NET web szolgáltatások

32

A CTS elemei

Primitív típusok Objektumok Konstruktorok Tulajdonságok Saját Típusok Felsorolásos típusok Interfészek

Page 33: NET web szolgáltatások

33

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

Page 34: NET web szolgáltatások

34

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

class Accumulator{ public float Result; public void Add(float amount) { Result += amount; }}

class Accumulator{ public float Result; public void Add(float amount) { Result += amount; }}

Page 35: NET web szolgáltatások

35

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; }}

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; }}

Page 36: NET web szolgáltatások

36

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; }}

public float Start{ get { return start; } set { if (start >= 0) start = value; }}

Page 37: NET web szolgáltatások

37

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; }}

struct Employee{ public string Name; public ushort Age; public DateTime HireDate; public float Tenure() { TimeSpan ts = DateTime.Now – HireDate; return ts.Days/(float)365; }}

Page 38: NET web szolgáltatások

38

Felsorolások .NET keretrendszer felsorolások

A System.Enum-ból származnakAz enum kulcsszóval

enum SeatPreference : ushort{ Window, //Assigned value 0 Center, //Assigned value 1 Aisle //Assigned value 2}

enum SeatPreference : ushort{ Window, //Assigned value 0 Center, //Assigned value 1 Aisle //Assigned value 2}

Page 39: NET web szolgáltatások

39

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; }}

interface ICDPlayer{ void Play(short playTrackNum); void Pause(); void Skip(short numTracks); short CurrentTrack { get; set; }}

Page 40: NET web szolgáltatások

40

Polimorfizmus Sealed Abstract New Virtual Override

Page 41: NET web szolgáltatások

41

Demó:Kutya

Page 42: NET web szolgáltatások

42

Meta adatok Hordozható kód (reflexió) CORBA IDL Java bájtkód

Page 43: NET web szolgáltatások

43

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álhatunkA futtató környezet az attribútumoknak

megfelelően viselkedik

[attribute(positional_parameters,named_parameter=value, ...)]element

[attribute(positional_parameters,named_parameter=value, ...)]element

Page 44: NET web szolgáltatások

44

Használható attribútumokclass MyClass{ [Conditional ("DEBUGGING")] public static void MyMethod( ) { ... }}

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"); ...}

[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{

...}

using EnterpriseServices;...[Transaction(TransactionOption.Required)]public class MyTransactionalComponent : ServicedComponent{

...}

Page 45: NET web szolgáltatások

45

Saját attribútumok Hatókör specifikálása AttributeUsage

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]public class MyAttribute: System.Attribute{ ... }

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]public class MyAttribute: System.Attribute{ ... }

[AttributeUsage(AttributeTargets.Method)]public class MyAttribute: System.Attribute{ ... }

[AttributeUsage(AttributeTargets.Method)]public class MyAttribute: System.Attribute{ ... }

Page 46: NET web szolgáltatások

46

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;}

}

}

Page 47: NET web szolgáltatások

47

Példa

[SPEPPAttribute("Way", FieldType=FType.Enum, FieldValues = "MessageDirection")]

public string Way{

get { return this._way; }set { this._way = value; }

}

Page 48: NET web szolgáltatások

48

PéldapF.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);

..

Page 49: NET web szolgáltatások

49

Meta adatok vizsgálataMemberInfo osztály a

System.Reflection névtérbenSystem.Type.GetMembersSystem.Type

System.Reflection.MemberInfo[ ] memberInfoArray;memberInfoArray = typeof(MyClass).GetMembers( );

System.Reflection.MemberInfo[ ] memberInfoArray;memberInfoArray = typeof(MyClass).GetMembers( );

System.Reflection.MemberInfo typeInfo;typeInfo = typeof(MyClass);object[ ] attrs = typeInfo.GetCustomAttributes(false);

System.Reflection.MemberInfo typeInfo;typeInfo = typeof(MyClass);object[ ] attrs = typeInfo.GetCustomAttributes(false);

Page 50: NET web szolgáltatások

50

Memória menedzsment Memória Menedzsment alapok Erőforrás menedzsment (nem memória) Implicit erőforrás menedzsment Explicit erőforrás menedzsment

Page 51: NET web szolgáltatások

51

A .NET típusok memória menedzsmentje

Az érték típusok a vermet használjákA memória foglalás és felszabadítás

automatikus és biztonságos Menedzselt objektumok a halomba tárolódnak

(heap)New operátorSzemét gyűjtő takarít

Page 52: NET web szolgáltatások

52

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

Page 53: NET web szolgáltatások

53

Erőforrás menedzsment Implicit erőforrás kezelés Explicit erőforrás kezelés

Page 54: NET web szolgáltatások

54

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(); }}

class Foo { private System.IO.FileStream fs; //... public Foo() { fs = new System.IO.FileStream( "bar", FileMode.CreateNew); } ~Foo() { fs.Close(); }}

Page 55: NET web szolgáltatások

55

GC befejezés A futtató környezet rendelkezik egy listával

azokról az objektumokról melyek befejezést igényelnek Várakozó sor

Az elérhetetlen befejezésre váró objektumok: A referenciák hozzáadódnak az freachable sorhoz Az objektumok így elérhetőek és nem szemetek

A többi szokás szerint…

Page 56: NET web szolgáltatások

56

Befejzés Finalize szál fut

Végrehajtja az objektumok Finalize metódusátA referenciákat eltávolítja a sorbólHa nem lettek feltámasztva akkor szemétté

lesznek nyilvánítvaGC…

Page 57: NET web szolgáltatások

57

Explicit erőforrás menedzsment

Az IDisposable Interfész és a Dispose metódus

class ResourceWrapper : IDisposable{

// see code example for details}

class ResourceWrapper : IDisposable{

// see code example for details}

void DoSomething() { Resource r = new Resource(...); try { r.Foo(); } finally { if (r != null) ((IDisposable)r).Dispose(); }}

void DoSomething() { Resource r = new Resource(...); try { r.Foo(); } finally { if (r != null) ((IDisposable)r).Dispose(); }}