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