NET web szolgáltatások

Preview:

DESCRIPTION

.NET web szolgáltatások. .NET, C# áttekintés Bilicki Vilmos bilickiv@inf.u-szeged.hu 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

1

.NET web szolgáltatások

.NET, C# áttekintés

Bilicki Vilmosbilickiv@inf.u-szeged.huwww.inf.u-szeged.hu/~bilickiv

2

A mai előadás tartalma: .NET

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

3

DEMÓ:

WEB Service

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

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 …

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

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

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

9

ASP.NETASP.NET

Web űrlapok és szolgáltatások

System.WebSystem.Web

ConfigurationConfiguration SessionStateSessionState

CachingCaching SecuritySecurity

ServicesServices

DescriptionDescription

DiscoveryDiscovery

ProtocolsProtocols

UIUI

HtmlControlsHtmlControls

WebControlsWebControls

10

Névterek

System System

GlobalizationGlobalization

DiagnosticsDiagnostics

ConfigurationConfiguration

CollectionsCollections

ResourcesResources

ReflectionReflection

NetNet

IOIO

ThreadingThreading

TextText

SecuritySecurity RuntimeRuntime

ServiceProcessServiceProcess

11

.NET keretrendszer fontosabb megoldásai

Windows Forms Web Forms XML Web Services

12

DemóC#, VB

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

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

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

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

17

DemóILDASM

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

19

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

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

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ó

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

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

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

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>

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

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

28

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

29

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

30

Közös Típus Rendszer arch.

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

32

A CTS elemei

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

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

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

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

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

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

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}

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

40

Polimorfizmus Sealed Abstract New Virtual Override

41

Demó:Kutya

42

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

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

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{

...}

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{ ... }

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

}

}

47

Példa

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

public string Way{

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

}

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

..

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

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

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

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

53

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

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

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…

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…

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

Recommended