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