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