Professional Documents
Culture Documents
Nh sch t Vit
a ch: 225 Nguyn Tri Phng, Q.5, TP. H Ch Minh
in thoi: (08) 2 652 039
E-mail: datviet@dvpub.com.vn
Website: www.dvpub.com.vn
Nguyn Ngc Bnh Phng - Thi
Thanh Phong
tng hp & bin dch
http://www.dvpub.com.vn/dv/details.aspx?itemid=243
LI NI U
LI NI U
10
CU TRC CA SCH
CU TRC CA SCH
M LNH
11
12
QUY C
QUY C
Th thut
13
Gii php
Ghi ch
14
15
YU CU V H THNG
YU CU V H THNG
16
17
18
CCH S DNG A CD
CCH S DNG A CD
19
2.
3.
4.
5.
6.
7.
8.
9.
20
MC LC
MC LC
LI NI U................................................................................................................................ 7
CU TRC CA SCH..............................................................................................................10
QUY C................................................................................................................................... 12
YU CU V H THNG.......................................................................................................... 15
CCH S DNG A CD...........................................................................................................18
MC LC.................................................................................................................................... 20
Chng 1: PHT TRIN NG DNG
1. To ng dng Console........................................................................................... 31
2. To ng dng da-trn-Windows........................................................................... 33
3. To v s dng module.......................................................................................... 37
4. To v s dng th vin......................................................................................... 39
5. Truy xut cc i s dng lnh............................................................................... 40
6. Chn bin dch mt khi m vo file thc thi.......................................................... 42
7.
Truy
xut
mt
phn
t
chng
trnh
c tn trng vi mt t kha........................................................................................ 45
29
21
59
86
1. To min ng dng.................................................................................................88
2. Chuyn cc i tng qua li cc min ng dng................................................. 90
3. Trnh np cc assembly khng cn thit vo min ng dng............................... 91
4. To kiu khng th vt qua bin min ng dng................................................. 92
5. Np assembly vo min ng dng hin hnh........................................................ 92
6. Thc thi assembly min ng dng khc............................................................. 94
7. Th hin ha mt kiu trong min ng dng khc................................................. 95
8. Truyn d liu gia cc min ng dng............................................................... 101
9. Gii phng assembly v min ng dng.............................................................. 103
10. Truy xut thng tin Type..................................................................................... 104
11. Kim tra kiu ca mt i tng.........................................................................106
12. To mt i tng bng c ch phn chiu.......................................................107
13. To mt c tnh ty bin....................................................................................110
14.
S
dng
c
ch
phn
chiu
kim
tra
cc c tnh ca mt phn t chng trnh...............................................................113
Chng 4: TIU TRNH, TIN TRNH, V S NG B
1. Thc thi phng thc vi thread-pool..................................................................117
2. Thc thi phng thc mt cch bt ng b....................................................... 121
3. Thc thi phng thc bng Timer........................................................................129
4. Thc thi phng thc bng cch ra hiu i tng WaitHandle......................... 132
5. Thc thi phng thc bng tiu trnh mi............................................................135
6. iu khin qu trnh thc thi ca mt tiu trnh.................................................... 137
115
22
157
193
234
23
287
346
24
389
1. Kt ni c s d liu.............................................................................................392
2. S dng connection-pooling................................................................................. 394
3. Thc thi cu lnh SQL hoc th tc tn tr.......................................................... 397
4. S dng thng s trong cu lnh SQL hoc th tc tn tr................................. 400
5. X l kt qu ca truy vn SQL bng data-reader............................................... 403
6. Thu ly ti liu XML t truy vn SQL Server........................................................ 407
7. Nhn bit tt c cc th hin SQL Server 2000 trn mng.................................. 411
8. c file Excel vi ADO.NET................................................................................. 413
9. S dng Data Form Wizard.................................................................................. 415
10. S dng Crystal Report Wizard.......................................................................... 424
Chng 11: LP TRNH MNG
435
474
25
509
1.
Cho
php
m
lnh
c--tin-cy-mt-phn
s dng assembly tn mnh ca bn........................................................................ 512
2. V hiu bo mt truy xut m lnh....................................................................... 514
3. V hiu vic kim tra quyn thc thi..................................................................... 516
4. Bo m b thc thi cp cho assembly mt s quyn no ............................. 517
5. Gii hn cc quyn c cp cho assembly....................................................... 519
6. Xem cc yu cu quyn c to bi mt assembly...........................................520
7. Xc nh m lnh c quyn no lc thc thi hay khng.................................. 522
8.
Hn
ch
ai
tha
k
cc
lp
ca
bn
v chp cc thnh vin lp................................................................................... 523
9. Kim tra chng c ca mt assembly.................................................................. 525
10. X l chng c khi np mt assembly .............................................................. 527
11. X l bo mt b thc thi bng chng c ca min ng dng ......................... 529
12.
X
l
bo
mt
b
thc
thi
bng chnh sch bo mt ca min ng dng...........................................................531
13.
Xc
nh
ngi
dng
hin
hnh
c
l
thnh
vin
ca mt nhm Windows no hay khng............................................................... 535
14. Hn ch nhng ngi dng no thc thi m lnh ca bn........................... 538
15. Gi nhn ngi dng Windows.......................................................................... 543
Chng 14: MT M
548
584
26
605
651
27
28
29
30
31
Chng 1: Pht trin ng dng
hng ny trnh by mt s kin thc nn tng, cn thit trong qu trnh pht trin mt
ng dng C#. Cc mc trong chng s trnh by chi tit cc vn sau y:
Xy dng cc ng dng Console v Windows Form (mc 1.1 v 1.2).
To v s dng n th m lnh v th vin m lnh (mc 1.3 v 1.4).
Truy xut i s dng lnh t bn trong ng dng (mc 1.5).
S dng cc ch th bin dch ty bin vic bin dch m ngun (mc 1.6).
Truy xut cc phn t chng trnh (c xy dng trong ngn ng khc) c tn xung
t vi cc t kha C# (mc 1.7).
To ng dng Console
1.
Hin thc mt phng thc tnh c tn l Main di cc dng sau trong t nht
mt file m ngun:
public static void Main();
public static void Main(string[] args);
public static int Main();
32
Chng 1: Pht trin ng dng
S dng i s /target:exe khi bin dch assembly ca bn bng trnh bin dch
C# (csc.exe).
Mc nh trnh bin dch C# s xy dng mt ng dng Console tr khi bn ch nh loi
khc. V l do ny, khng cn ch nh /target.exe, nhng thm n vo s r rng hn, hu
ch khi to cc kch bn bin dch s c s dng bi cc ng dng khc hoc s c s
dng lp i lp li trong mt thi gian. V d sau minh ha mt lp c tn l ConsoleUtils
(c nh ngha trong file ConsoleUtils.cs):
using System;
public class ConsoleUtils {
Console.Write(msg);
return System.Console.ReadLine();
}
System.Console.WriteLine(msg);
}
33
Chng 1: Pht trin ng dng
Bn c th chy file thc thi trc tip t dng lnh. Khi chy, phng thc Main ca ng dng
ConsoleUtils.exe yu cu bn nhp tn v sau hin th thng ip cho mng nh sau:
Please enter your name : Binh Phuong
Welcome to Microsoft .NET Framework, Binh Phuong
2.
To ng dng da-trn-Windows
Hin thc mt phng thc tnh Main trong t nht mt file m ngun. Trong
Main, to mt th hin ca mt lp tha k t lp System.Windows.Forms.Form
(y l form chnh ca ng dng). Truyn i tng ny cho phng thc tnh
Run ca lp System.Windows.Forms.Application. S dng i s /target:winexe
khi bin dch assembly ca bn bng trnh bin dch C# (csc.exe).
Vic xy dng mt ng dng c giao din ngi dng ha Windows n gin hon ton
khc xa vic pht trin mt ng dng da-trn-Windows hon chnh. Tuy nhin, bt k vit
34
Chng 1: Pht trin ng dng
mt ng dng n gin nh Hello World hay vit phin bn k tip cho Microsoft Word, bn
cng phi thc hin nhng vic sau:
Khai bo mt phng thc khi dng cho lp form to cc iu kim trn form v
cu hnh trng thi ban u ca chng (kch thc, mu, ni dung). Phng thc
khi dng ny cng nn lin kt cc phng thc th l s kin ca lp vi cc s kin
tng ng ca mi iu kim.
35
Chng 1: Pht trin ng dng
// v cu hnh cc iu kim trn form).
public WelcomeForm() {
36
Chng 1: Pht trin ng dng
Application.Run(new WelcomeForm());
}
// Phng thc th l s kin
// (c gi khi ngi dng nhp vo nt Enter).
private void button1_Click(object sender, System.EventArgs e) {
// Ghi ra Console.
System.Console.WriteLine("User entered: " + textBox1.Text);
// Hin th li cho trong MessageBox.
MessageBox.Show("Welcome to Microsoft .NET Framework, "
+ textBox1.Text, "Microsoft .NET Framework");
}
}
37
Chng 1: Pht trin ng dng
To v s dng module
3.
38
Chng 1: Pht trin ng dng
Kh nng s dng nhiu ngn ng khc nhau vit cc ng dng chy trn b thc thi
ngn ng chung (Common Language RuntimeCLR) l mt th mnh ca .NET
Framework. Tuy nhin, trnh bin dch C# khng th bin dch m ngun c vit
bng Microsoft Visual Basic .NET hay COBOL .NET trong assembly ca bn. Bn phi
s dng trnh bin dch ca ngn ng bin dch m ngun thnh MSIL theo mt cu
trc m trnh bin dch C# c th hiu c l module. Tng t, nu mun lp
trnh vin ca cc ngn ng khc s dng cc kiu c pht trin bng C#, bn phi
xy dng chng thnh mt module.
39
Chng 1: Pht trin ng dng
MyFirstApp.exe: Cha manifest cng nh MSIL cho cc kiu c khai bo trong hai
file ngun SourceOne.cs v SourceTwo.cs.
To v s dng th vin
4.
40
Chng 1: Pht trin ng dng
Trc khi phn phi th vin cho ngi khc s dng, bn nn to tn mnh (strong-name)
khng ai c th chnh sa assembly ca bn. Vic t tn mnh cho th vin cn cho php
ngi khc ci t n vo Global Assembly Cache, gip vic ti s dng d dng hn (xem
mc 1.9 v cch t tn mnh cho th vin ca bn v mc 1.14 v cch ci t mt th vin
c tn mnh vo Global Assembly Cache). Ngoi ra, bn c th nh du th vin ca bn vi
ch k Authenticode ngi dng bit bn l tc gi ca th vin (xem mc 1.12 v cch
nh du th vin vi Authenticode).
bin dch mt assembly c s dng cc kiu c khai bo trong cc th vin khc, bn
phi bo cho trnh bin dch bit cn tham chiu n th vin no bng i s /reference. V
d, bin dch file HelloWorld.cs (trong mc 1.1) trong trng hp lp ConsoleUtils nm
trong th vin ConsoleUtils.dll, s dng lnh:
csc /reference:ConsoleUtils.dll HelloWorld.cs
Bn cn ch ba im sau:
5.
Khai bo phng thc Main thuc mt trong cc dng sau truy xut i s dng lnh di
dng mt mng chui:
41
Chng 1: Pht trin ng dng
Khi chy, i s args s cha mt chui cho mi gi tr c nhp trn dng lnh v nm sau
tn ng dng. Phng thc Main trong v d di y s duyt qua mi i s dng lnh c
truyn cho n v hin th chng ra ca s Console:
public class CmdLineArgExample {
six'
three
four
'five
six'
42
Chng 1: Pht trin ng dng
6.
win98
using System;
43
Chng 1: Pht trin ng dng
#if winXP
platformName = "Unknown";
#endif
Console.WriteLine(platformName);
}
}
V d
M t
==
!=
&&
44
Chng 1: Pht trin ng dng
||
()
#if (winXP ||
win2000) && release
Mt cch khc khng linh hot nhng hay hn ch th tin x l #if l s dng c tnh
System.Diagnostics.ConditionalAttribute. Nu bn p dng ConditionalAttribute cho
mt phng thc, trnh bin dch s b qua mi li gi phng thc nu k hiu do
ConditionalAttribute ch nh khng c nh ngha ti im gi. Trong on m sau,
ConditionalAttribute xc nh rng phng thc DumpState ch c bin dch vo file thc
thi nu k hiu DEBUG c nh ngha khi bin dch.
[System.Diagnostics.Conditional("DEBUG")]
public static void DumpState() {//...}
Vic thc hin php AND lun l cn s dng phng thc iu kin trung gian, khin cho
m tr nn qu phc tp, kh hiu v kh bo tr. V d di y cn phng thc trung gian
DumpState2 nh ngha c hai k hiu DEBUG v TEST.
[System.Diagnostics.Conditional("DEBUG")]
public static void DumpState() {
DumpState2();
}
[System.Diagnostics.Conditional("TEST")]
public static void DumpState2() {//...}
45
Chng 1: Pht trin ng dng
7.
.NET Framework cho php bn s dng cc thnh phn phn mm (software component)
c pht trin bng cc ngn ng .NET khc bn trong ng dng C# ca bn. Mi ngn ng
u c mt tp t kha (hoc t dnh ring) cho n v c cc hn ch khc nhau i vi cc
tn m lp trnh vin c th gn cho cc phn t chng trnh nh kiu, thnh vin, v bin.
Do , c kh nng mt thnh phn c pht trin trong mt ngn ng khc tnh c s dng
mt t kha ca C# t tn cho mt phn t no . K hiu @ cho php bn s dng mt
t kha ca C# lm nh danh v khc phc vic ng tn. on m sau to mt i tng
kiu operator v thit lp thuc tnh volatile ca n l true (c operator v volatile u l
t kha ca C#):
// To i tng operator.
@operator Operator1 = new @operator();
// Thit lp thuc tnh volatile ca operator.
Operator1.@volatile = true;
8.
46
Chng 1: Pht trin ng dng
Version 1.1.4322.573
Public key is
07020000002400005253413200040000010001008bb302ef9180bf717ace00d570dd649821f24ed578
fdccf1bc4017308659c126570204bc4010fdd1907577df1c2292349d9c2de33e49bd991a0a5bc9b69e
5fd95bafad658a57b8236c5bd9a43be022a20a52c2bd8145448332d5f85e9ca641c26a4036165f2f35
3942b643b10db46c82d6d77bbc210d5a7c5aca84d7acb52cc1654759c62aa34988...
Token ca kha cng khai l 8 byte cui ca m bm c tnh ra t kha cng khai. V kha
cng khai qu di nn .NET s dng token cho mc ch hin th, v l mt c ch ngn gn
cho cc assembly khc tham chiu kha cng khai (chng 14 s tho lun tng qut v m
bm).
Nh tn gi ca n, kha cng khai (hoc token ca kha cng khai) khng cn c gi b
mt. Khi bn to tn mnh cho assembly (c tho lun trong mc 1.9), trnh bin dch s s
dng kha ring to mt ch k s (mt m bm -c-mt-ha) ca assembly manifest.
Trnh bin dch nhng ch k s v kha cng khai vo assembly ngi dng c th kim
tra ch k s.
Vic gi b mt kha ring l cn thit v ngi truy xut vo kha ring ca bn c th thay
i assembly v to mt tn mnh mikhin cho khch hng ca bn khng bit m ngun
b sa i. Khng c c ch no loi b cc kha tn mnh b tn hi. Nu kha
ring b tn hi, bn phi to kha mi v phn phi phin bn mi ca assembly (c t
tn mnh bng cc kha mi). Bn cng cn thng bo cho khch hng bit l kha b tn
hi v h nn s dng phin bn notrong trng hp ny, bn b mt c tin bc v uy tn.
C nhiu cch bo v kha ring ca bn; s dng cch no l ty vo cc yu t nh:
Cu trc v tm c ca t chc.
Yu cu ca khch hng.
47
Chng 1: Pht trin ng dng
Cng c Strong Name cn cung cp tnh nng s dng kho cha kha CSP n gin ha
vic bo mt cc kha tn mnh. Mt khi to mt cp kha trong mt file, bn c th ci
t cc kha ny vo kho cha kha CSP v xa file i. V d, lu tr cp kha nm trong
file MyKey.snk vo mt kho cha kha CSP c tn l StrongNameKeys, s dng lnh sn -i
MyKeys.snk StrongNameKeys (mc 1.9 s gii thch cch s dng cc kha tn mnh c lu
tr trong mt kho cha kha CSP).
Mt kha cnh quan trng ca kho cha kha CSP l c cc kho cha kha da-theo ngidng v c cc kho cha kha da-theo-my. C ch bo mt ca Windows bo m ngi
dng ch truy xut c kho cha kha da-theo-ngi-dng ca chnh h. Tuy nhin, bt k
ngi dng no ca my u c th truy xut kho cha kha da-theo-my.
Theo mc nh, cng c Strong Name s dng kho cha kha da-theo-my, ngha l mi
ngi ng nhp vo my v bit tn ca kho cha kha u c th k mt assembly bng cc
kha tn mnh ca bn. cng c Strong Name s dng kho cha kha da-theo-ngidng, s dng lnh sn m n; khi mun tr li kho cha kha da-theo-my, s dng lnh sn
m y. Lnh sn m s cho bit cng c Strong Name hin c cu hnh l s dng kho cha
kha da-theo-ngi-dng hay da-theo-my.
xa cc kha tn mnh t kho StrongNameKeys (cng nh xa c kho ny), s dng lnh
sn d StrongNameKeys.
9.
Mt cp kha tn mnh nm trong mt file hoc mt kho cha kha CSP (xem mc 1.8
v cch to cp kha tn mnh).
48
Chng 1: Pht trin ng dng
49
Chng 1: Pht trin ng dng
10.
Ngoi vic to v qun l cc kha tn mnh ( c tho lun trong mc 1.8), cng c
Strong Name cn cho php xc minh cc assembly tn mnh. xc minh assembly tn mnh
HelloWorld.exe khng b sa i, s dng lnh sn -vf HelloWorld.exe. i s -v yu cu
cng c Strong Name xc minh tn mnh ca mt assembly xc nh, i s -f buc thc hin
vic xc minh tn mnh ngay c n b v hiu trc cho mt assembly no . (Bn c
th s dng i s -Vr v hiu vic xc minh tn mnh i vi mt assembly, v d sn -Vr
HelloWorld.exe; mc 1.11 s trnh by l do ti sao cn v hiu vic xc minh tn mnh).
Nu assembly ny c xc minh l khng i, bn s thy kt xut nh sau:
Microsoft (R) .NET Framework Strong Name Utility
Version 1.1.4322.573
Version 1.1.4322.573
50
Chng 1: Pht trin ng dng
11.
Trch xut v phn phi kha cng khai ca cp kha tn mnh. Lm theo
hng dn trong mc 1.9 to tn mnh cho assembly. p dng c tnh
System.Reflection.AssemblyDelaySignAttribute cho assembly ch nh n l
assembly s c k sau. S dng i s -Vr ca cng c Strong Name (sn.exe)
v hiu vic xc minh tn mnh cho assembly ny.
51
Chng 1: Pht trin ng dng
[assembly:AssemblyDelaySign(true)]
public class HelloWorld {
public static void Main() {
Console.WriteLine("Hello, world");
}
}
52
Chng 1: Pht trin ng dng
12.
K assembly vi ch k s Authenticode
Tn mnh cung cp mt nh danh duy nht cng nh chng minh tnh ton vn ca mt
assembly, nhng n khng xc minh ai l ngi pht hnh assembly ny. Do , .NET
Framework cung cp k thut Authenticode k assembly. iu ny cho php ngi dng
bit bn l ngi pht hnh v xc nhn tnh ton vn ca assembly. Ch k Authenticode cn
c s dng lm chng c (evidence) cho assembly khi cu hnh chnh sch bo mt truy
xut m lnh (Code Access Security Policyxem mc 13.9 v 13.10).
k mt assembly vi ch k Authenticode, bn cn mt SPC do mt Certificate Authority (
CA) cp. CA c trao quyn cp SPC (cng vi nhiu kiu chng ch khc) cho cc c
nhn hoc cng ty s dng. Trc khi cp mt chng ch, CA c trch nhim xc nhn nhng
ngi yu cu v bo m h k kt khng s dng sai cc chng ch do CA cp.
c c mt SPC, bn nn xem Microsoft Root Certificate Program Members ti
[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/rootcertprog.asp].
y, bn c th tm thy danh sch cc CA, nhiu CA trong s c th cp cho bn mt
SPC. Vi mc ch th nghim, bn c th to mt SPC th nghim theo qu trnh s c
m t trong mc 1.13. Tuy nhin, bn khng th phn phi phn mm c k vi chng ch
th nghim ny. V mt SPC th nghim khng do mt CA ng tin cy cp, nn hu ht
ngi dng s khng tin tng assembly c k bng SPC th nghim ny.
Khi c mt SPC, s dng cng c File Signing k assembly ca bn. Cng c File
Signing s dng kha ring ca SPC to mt ch k s v nhng ch k ny cng phn
53
Chng 1: Pht trin ng dng
cng khai ca SPC vo assembly (bao gm kha cng khai). Khi xc minh mt assembly,
ngi dng s dng kha cng khai gii mt ha m bm -c-mt-ha, tnh ton li
m bm ca assembly, v so snh hai m bm ny bo m chng l nh nhau. Khi hai m
bm ny trng nhau, ngi dng c th chc chn rng bn k assembly, v n khng b
thay i t khi bn k.
V d, k mt assembly c tn l MyAssembly.exe vi mt SPC nm trong file MyCert.spc
v kha ring nm trong file MyPrivateKey.pvk, s dng lnh:
signcode -spc MyCert.spc -v MyPrivateKey.pvk MyAssembly.exe
Hnh 1.5 Cng c File Signing yu cu nhp mt khu khi truy xut file cha kha ring
Bn cng c th truy xut kha v chng ch trong cc kho cha. Bng 1.2 lit k cc i s
thng dng nht ca cng c File Signing. Bn hy tham kho ti liu .NET Framework
SDK xem tt c cc i s.
Bng 1.2 Cc i s thng dng ca cng c File Signing
i s
M t
-k
-s
-spc
-v
54
Chng 1: Pht trin ng dng
Nu bn nhp Yes, hoc trc chn l lun tin tng SPC, cng c Certificate
Verification xc nhn tnh hp l ca ch k v assembly.
13.
55
Chng 1: Pht trin ng dng
Hnh 1.7 Cng c Certificate Creation nhc nhp mt khu bo v file cha kha ring
Nu bn ghi kha ring vo file, cng c Certificate Creation s nhc bn nhp mt khu
bo v file ny (xem hnh 1.7).
Cng c Certificate Creation h tr nhiu i s, bng 1.3 lit k mt vi i s thng dng.
Xem thm ti liu .NET Framework SDK v cng c Certificate Creation.
Bng 1.3 Cc i s thng dng ca cng c Certificate Creation
i s
M t
-e
-m
-n
-sk
-ss
-sv
56
Chng 1: Pht trin ng dng
14.
15.
.NET Framework s dng GAC ch khi thc thi, trnh bin dch C# s khng tm
trong GAC bt k tham chiu ngoi no m assembly ca bn tham chiu n.
Trong qu trnh pht trin, trnh bin dch C# phi truy xut c mt bn sao
cc b ca bt k assembly chia s no c tham chiu n. Bn c th chp
assembly chia s vo th mc m ngun ca bn, hoc s dng i s /lib ca
trnh bin dch C# ch nh th mc m trnh bin dch c th tm thy cc
assembly cn thit trong .
57
Chng 1: Pht trin ng dng
Nu vic xy dng cc gii php da-trn-server l khng ph hp, bn c hai ty chn sau
y:
Chn cc lnh dng iu khin khin cho ngi khc kh c th ln theo logic ca
ng dng.
Khng c cch tip cn no ngn c nhng ngi c k nng v quyt tm dch ngc m
ngun ca bn, nhng chng s lm cho cng vic ny tr nn kh khn ng k v ngn
c hu ht nhng k t m thng thng.
Nguy c mt ng dng b dch ngc khng ch ring cho C# hay .NET. Mt ngi quyt tm
c th dch ngc bt k phn mm no nu anh ta c k nng v thi gian.
58
Chng 1: Pht trin ng dng
59
60
61
Chng 2: Thao tc d liu
1.
62
Chng 2: Thao tc d liu
2.
63
Chng 2: Thao tc d liu
Unicode khng phi l kiu m ha duy nht, cng nh UTF-16 khng phi cch duy nht
biu din k t Unicode. Khi ng dng cn trao i d liu k t vi cc h thng bn ngoi
(c bit l cc h thng c), d liu cn phi c chuyn i gia UTF-16 v kiu m ha
m h thng h tr.
Lp tru tng Encoding, v cc lp con ca n cung cp cc chc nng chuyn k t qua
li gia nhiu kiu m ha khc nhau. Mi th hin ca lp con h tr vic chuyn i gia
UTF-16 v mt kiu m ha khc. Phng thc tnh Encoding.GetEncoding nhn vo tn hoc
s hiu trang m (code page number) ca mt kiu m ha v tr v th hin ca lp m ha
tng ng.
Bng 2.1 lit k mt vi kiu m k t v s hiu trang m m bn phi truyn cho phng
thc GetEncoding to ra th hin ca lp m ha tng ng. Bng ny cng cung cp cc
thuc tnh tnh ca lp Encoding i din cho phng thc GetEncoding tng ng.
Bng 2.1 Cc lp m ha k t
Kiu m ha
Lp
ASCII
ASCIIEncoding
Mc nh (kiu m ha
hin hnh trn h thng)
Encoding
UTF-7
UTF7Encoding
UTF-8
UTF8Encoding
UnicodeEncoding
UnicodeEncoding
Windows OS
Encoding
S dng
GetEncoding(20127)
64
Chng 2: Thao tc d liu
// To file gi cc kt qu.
using (StreamWriter output = new StreamWriter("output.txt")) {
Bytes: {0}",
BitConverter.ToString(utf8String));
output.WriteLine("ASCII
Bytes: {0}",
BitConverter.ToString(asciiString));
Text : {0}",
Encoding.UTF8.GetString(utf8String));
output.WriteLine("ASCII
Text : {0}",
Encoding.ASCII.GetString(asciiString));
65
Chng 2: Thao tc d liu
output.Close();
}
}
}
Bytes: 41-72-65-61-20-3D-20-CE-A0-72-5E-32
ASCII
Bytes: 41-72-65-61-20-3D-20-3F-72-5E-32
UTF-8
ASCII
Lp Encoding cng cung cp phng thc tnh Covert n gin ha vic chuyn mt mng
byte t kiu m ha ny sang kiu m ha khc khng phi qua trung gian UTF-16. V d,
dng m sau chuyn trc tip cc byte trong mng asciiString t ASCII sang UTF-8:
byte[] utf8String = Encoding.Convert(Encoding.ASCII, Encoding.UTF8,
asciiString);
3.
66
Chng 2: Thao tc d liu
Phng thc tnh GetBytes ca lp BitConverter cung cp nhiu phin bn np chng cho
php chuyn hu ht cc kiu gi tr c bn sang mng kiu byte. Cc kiu c h tr l
bool, char, double, short, int, long, float, ushort, uint, v ulong. Lp BitConverter cng
cung cp cc phng thc tnh cho php chuyn cc mng kiu byte thnh cc kiu gi tr
chun nh ToBoolean, ToUInt32, ToDouble,... V d sau minh ha cch chuyn cc gi tr bool
v int thnh mng kiu byte, v ngc li. i s th hai trong ToBoolean v ToUInt32 cho
bit v tr (tnh t 0) trong mng byte m BitConverter s ly cc byte k t to gi tr
d liu.
byte[] b = null;
67
Chng 2: Thao tc d liu
// To mt BinaryReader c t stream.
using (BinaryReader reader = new BinaryReader(stream)) {
// c v tr v gi tr decimal t
// BinaryReader/MemoryStream.
return reader.ReadDecimal();
}
}
}
4.
68
Chng 2: Thao tc d liu
// Tr v chui Unicode.
return Encoding.Unicode.GetString(b);
}
// M ha Base64 vi gi tr decimal.
public static string DecimalToBase64 (decimal src) {
69
Chng 2: Thao tc d liu
byte[] b = DecimalToByteArray(src);
// Tr v gi tr decimal.
return ByteArrayToDecimal(b);
}
// M ha Base64 vi gi tr int.
public static string IntToBase64 (int src) {
70
Chng 2: Thao tc d liu
5.
Khi ng dng nhn d liu t ngi dng hoc c d liu t file, bn nn gi nh d liu
ny l cha chnh xc v cn c kim tra li. Mt nhu cu kim tra kh ph bin l xc nh
cc s in thoi, s th tn dng, a ch e-mail c ng dng hay khng. Vic kim tra cu
trc v ni dung ca d liu khng m bo d liu l chnh xc nhng gip loi b nhiu d
liu sai v n gin ha vic kim tra sau ny. Biu thc chnh quy (regular expression) cung
cp mt c ch rt tt kim tra mt chui c ng vi cu trc quy nh trc hay khng,
do bn c th li dng tnh nng ny cho mc ch kim tra d liu nhp.
Trc tin, bn phi xc nh c php ca biu thc chnh quy cho ph hp vi cu trc v
ni dung ca d liu cn kim tra, y l phn kh nht khi s dng biu thc chnh quy. Biu
thc chnh quy c xy dng trn hai yu t: trc kin (literal) v siu k t
(metacharacter). Trc kin m t cc k t c th xut hin trong mu m bn mun so trng;
siu k t h tr vic so trng cc k t i din (wildcard), tm tr, nhm, lp, iu kin, v
cc c ch iu khin khc. y khng tho lun y v c php biu thc chnh quy
(tham kho ti liu .NET SDK hiu thm v biu thc chnh quy), nhng bng 2.2 s m t
cc siu k t thng dng.
Bng 2.2 Cc siu k t thng dng
Siu k t
M t
\d
\D
\s
\S
K t non-whitespace.
\w
\W
K t non-word.
\A
Bt u mt chui.
\z
Kt thc mt chui.
71
Chng 2: Thao tc d liu
[abc]
[^abc]
[a-z]
( )
{n}
{n,}
{n, m}
Khi d liu cn kim tra cng phc tp th c php ca biu thc chnh quy cng cng phc
tp. V d, d dng kim tra d liu nhp ch cha s hay c chiu di ti thiu, nhng kim
tra mt URL kh phc tp. Bng 2.3 lit k mt s biu thc chnh quy dng kim tra cc
kiu d liu thng dng.
Bng 2.3 Mt s biu thc chnh quy thng dng
Kiu d liu nhp
M t
^\d+$
PIN
^\d{4}$
Mt khu n gin
Cha t 6 n 8 k t; v d ghtd6f
hoc b8c7hogh.
^\w{6,8}$
S th tn dng
^\d{4}-?\d{4}-?\d{4}- ?
\d{4}$
72
Chng 2: Thao tc d liu
a ch e-mail
^[\w-]+@([\w- ]
+\.)+[\w-]+$
some-body@adatum.com
^https?://([\w- ]
+\.)+[\w-]+(/[\w- ./ ?
%=]*)?$
// Kim tra d liu nhp c trng vi biu thc chnh quy hay khng.
return r.IsMatch(input);
}
Bn c th s dng i tng Regex kim tra nhiu chui, nhng khng th thay i biu
thc chnh quy c gn cho n; bn phi to mt i tng Regex mi tng ng vi mt
cu trc mi. Phng thc ValidateInput trn to ra mt i tng Regex mi mi ln c
gi, thay vo bn c th s dng phng thc tnh np chng IsMatch.
public static bool ValidateInput(string regex, string input) {
// Kim tra d liu nhp c trng vi biu thc chnh quy hay khng.
return Regex.IsMatch(input, regex);
}
6.
73
Chng 2: Thao tc d liu
Theo mc nh, khi bn to i tng Regex, mu biu thc chnh quy do bn xc nh trong
phng thc khi dng c bin dch thnh mt dng trung gian (khng phi MSIL). Mi
ln bn s dng i tng Regex, b thc thi phin dch dng trung gian ny v p dng n
kim tra chui. Vi cc biu thc chnh quy phc tp c s dng thng xuyn, vic phin
dch lp lp i li c th gy tc ng xu ln hiu nng ca ng dng.
Khi ty chn RegexOptions.Compiled c ch nh, b thc thi s bin dch biu thc chnh
quy thnh MSIL. MSIL ny c gi l m just-in-time (JIT), c bin dch thnh m my
nguyn sinh trong ln thc thi u tin, ging nh m assembly thng thng. Biu thc
chnh quy c bin dch cng c s dng ging nh i tng Regex, vic bin dch ch
gip thc thi nhanh hn.
Tuy nhin, vic bin dch biu thc chnh quy cng c vi nhc im. Trc tin, trnh bin
dch JIT phi lm vic nhiu hn, dn n chm qu trnh bin dch, c bit khi to biu thc
chnh quy c bin dch khi ng dng khi ng. Th hai, biu thc chnh quy c bin
dch vn tn ti trong b nh khi khng cn c s dng na, n khng b b thu gom rc
(Garbage Collector) xa i nh cc biu thc chnh quy thng thng. Vng nh b chim ch
c gii phng khi chng trnh kt thc, hoc khi bn gii phng min ng dng.
Dng m sau minh ha cch to mt i tng Regex c bin dch thnh MSIL:
Regex reg = new Regex(@"[\w-]+@([\w-]+\.)+[\w-]+",
RegexOptions.Compiled);
Ngoi ra, phng thc tnh Regex.CompileToAssembly cho php bn to mt biu thc chnh
quy c bin dch v ghi n vo mt assembly khc. Ngha l bn c th to mt assembly
cha cc biu thc chnh quy s dng cho nhiu ng dng sau ny. bin dch mt biu
thc chnh quy v lu n vo mt assembly, thc hin cc bc sau:
1.
To mt mng System.Text.RegularExpressions.RegexCompilationInfo ln
cha cc i tng RegexCompilationInfo, mi i tng ng vi mt biu thc chnh
quy cn c bin dch.
2.
tit mc 2.5).
74
Chng 2: Thao tc d liu
3.
4.
Gi
phng
thc
Regex.CompileToAssembly,
truyn
cc
mng
Qu trnh trn to ra mt assembly cha cc khai bo lp cho tng biu thc chnh quy c
bin dch, mi lp dn xut t Regex. s dng mt biu thc chnh quy c bin dch
trong assembly, bn cn to i tng biu thc chnh quy ny v gi cc phng thc ca n
ging nh khi to n vi phng thc khi dng Regex bnh thng. Bn nh thm tham
chiu ti assembly khi s dng cc lp biu thc chnh quy nm trong n.
on m sau minh ha cch to mt assembly c tn l MyRegex.dll, cha hai biu thc chnh
quy c tn l PinRegex v CreditCardRegex:
using System.Text.RegularExpressions;
using System.Reflection;
75
Chng 2: Thao tc d liu
}
}
To ngy v gi t chui
7.
C nhiu cch m t ngy, gi; v d 1st June 2004, 1/6/2004, 6/1/2004, 1-Jun-2004 cng ch
mt ngy; 16:43 v 4:43 PM cng ch mt gi. Lp DateTime cung cp phng thc tnh
Parse rt linh hot, cho php to th hin DateTime t nhiu cch m t khc nhau trong
chui.
Phng thc Parse rt mnh trong vic to i tng DateTime t mt chui cho trc. N c
th x l mt chui ch cha mt phn thng tin hay cha thng tin sai, v thay th cc gi tr
thiu bng cc gi tr mc nh. Ngy mc nh l ngy hin ti, gi mc nh l 12:00:00
AM. Nu sau mi c gng, Parse khng th to i tng DateTime, n s nm ngoi l
System.FormatException. V d sau minh ha tnh linh hot ca Parse:
// 01/09/2004 12:00:00 AM
DateTime dt1 = DateTime.Parse("Sep 2004");
// 05/09/2004 02:15:33 PM
DateTime dt2 = DateTime.Parse("Sun 5 September 2004 14:15:33");
// 05/09/2004 12:00:00 AM
DateTime dt3 = DateTime.Parse("5,9,04");
// 05/09/2004 02:15:33 PM
DateTime dt4 = DateTime.Parse("5/9/2004 14:15:33");
// 07/10/2004 02:15:00 PM (gi s ngy hin ti l 07/10/2004)
DateTime dt5 = DateTime.Parse("2:15 PM");
Phng thc Parse linh hot v c th t sa li. Tuy nhin, mc linh hot ny khng cn
thit trong trng hp bn mun bo m cc chui phi theo mt nh dng nht nh. Khi
, s dng phng thc ParseExact thay cho Parse. Dng n gin nht ca ParseExact
nhn ba i s: chui cha ngy gi, chui nh dng xc nh cu trc m chui cha ngy
gi phi tun theo, v mt tham chiu IFormatProvider cung cp thng tin c th v bn a.
Nu IFormatProvider l null, thng tin v bn a ca tiu trnh (thread) hin hnh s c
s dng.
Nu ngy gi trong chui ang xt khng ng vi nh dng quy nh, ParseExact s nm
ngoi l System.FormatException. Chui nh dng c s dng tng t nh khi bn ch
76
Chng 2: Thao tc d liu
8.
Bn cn thc hin cc php tnh s hc c bn hay php so snh trn ngy, gi.
S dng cc cu trc DateTime v TimeSpan (h tr cc ton t s hc v so snh).
TimeSpan
DateTime
Gn (=)
V TimeSpan l mt cu trc nn
php gn tr v mt bn sao,
khng phi mt tham chiu.
V DateTime l mt cu trc nn
php gn tr v mt bn sao, khng
phi mt tham chiu.
77
Chng 2: Thao tc d liu
Cng (+)
Tr (-)
Cng
mt
DateTime.
Tr
mt
TimeSpan
DateTime
vo
mt
cho
mt
Bng (==)
Khng bng
(!=)
Ln hn (>)
Xc nh mt i tng TimeSpan
c ln hn mt i tng
TimeSpan khc hay khng.
Xc nh mt i tng DateTime
c ln hn mt i tng DateTime
khc hay khng.
Ln hoc bng
(>=)
Xc nh mt i tng TimeSpan
c ln hn hoc bng mt i
tng TimeSpan khc hay khng.
Xc nh mt i tng DateTime
c ln hn hoc bng mt i
tng DateTime khc hay khng.
Nh hn (<)
Xc nh mt i tng TimeSpan
c nh hn mt i tng
TimeSpan khc hay khng.
Xc nh mt i tng DateTime
c nh hn mt i tng DateTime
khc hay khng.
Nh hoc bng
(<=)
Xc nh mt i tng TimeSpan
c nh hn hoc bng mt i
tng TimeSpan khc hay khng.
Xc nh mt i tng DateTime
c nh hn hoc bng mt i
tng DateTime khc hay khng.
m (-)
Tr v mt gi tr o du ca mt
TimeSpan.
Khng h tr.
Tr v chnh TimeSpan.
Khng h tr.
Dng (+)
Cu trc DateTime cng hin thc cc phng thc AddTicks, AddMilliseconds, AddSeconds,
AddMinutes, AddHours, AddDays, AddMonths, v AddYears. Mi phng thc ny cho php bn
cng (hoc tr bng cc gi tr m) phn t thi gian thch hp vi i tng DateTime. Cc
phng thc ny v cc ton t c lit k trong bng 2.4 khng lm thay i DateTime gc
thay vo chng s to mt i tng mi vi gi tr c thay i. on m di y
trnh by cch s dng cc ton t thao tc cc cu trc DateTime v TimeSpan:
// To mt TimeSpan m t 2.5 ngy.
TimeSpan timespan1 = new TimeSpan(2,12,0,0);
// To mt TimeSpan m t 4.5 ngy.
TimeSpan timespan2 = new TimeSpan(4,12,0,0);
// To mt TimeSpan m t 1 tun.
TimeSpan oneWeek = timespan1 + timespan2;
78
Chng 2: Thao tc d liu
9.
// Sp xp mng.
Array.Sort(array);
// Sp xp ArrayList.
list.Sort();
79
Chng 2: Thao tc d liu
sp xp cc i tng khng hin thc IComparable, bn cn truyn cho phng thc Sort
mt i tng hin thc giao din System.Collections.IComparer. Hin thc ca IComparer
phi c kh nng so snh cc i tng nm trong mng hoc ArrayList (xem mc 16.3
bit cch hin thc IComparable v IComparer).
Chp mt tp hp vo mt mng
10.
Cc phng thc ICollection.CopyTo v ToArray c cng chc nng, chng chp cc phn t
trong mt tp hp vo mt mng. S khc bit nm ch CopyTo chp vo mt mng c,
trong khi ToArray to ra mt mng mi ri chp vo .
CopyTo nhn hai i s: mt mng v mt ch s. Mng ny l ch ca qu trnh sao chp v
phi c kiu tng thch vi cc phn t ca tp hp. Nu kiu khng tng thch hay khng
c s chuyn i ngm t kiu phn t ca tp hp sang kiu phn t ca mng th ngoi l
System.InvalidCastException s b nm. Ch s l mt v tr trong mng m bt u t cc
phn t ca tp hp s c chp vo. Nu ch s ny ln hn hoc bng chiu di ca mng,
hoc s phn t ca tp hp vt qu sc cha ca mng th ngoi l
System.ArgumentException s b nm. on m sau minh ha cch s dng CopyTo chp
ni dung ca mt ArrayList vo mt mng:
// To mt ArrayList mi v thm phn t vo.
ArrayList list = new ArrayList(5);
list.Add("Phuong");
list.Add("Phong");
list.Add("Nam");
list.Add("Tam");
list.Add("Nhan");
Cc lp ArrayList, Stack, v Queue cng hin thc phng thc ToArray, phng thc ny t
ng to mt mng vi kch thc cha cc phn t ca ca tp hp. Nu bn khng
truyn i s cho ToArray, n s tr v mt object[] bt chp kiu ca cc i tng trong
tp hp. Tuy nhin, bn c th truyn mt i tng System.Type ch nh kiu ca mng
(Bn phi p mng kiu mnh v ng kiu). V d sau minh ha cch s dng ToArray cho
ArrayList trn:
80
Chng 2: Thao tc d liu
To mt tp hp kiu mnh
11.
return this.List.Add(value);
}
81
Chng 2: Thao tc d liu
this.List.Remove(value);
}
get {
return (AssemblyName)this.List[index];
}
set {
this.List[index] = value;
}
}
return this.List.Contains(value);
}
this.List.Insert(index, value);
}
}
C hai lp CollectionBase v DictionaryBase u hin thc mt tp cc phng thc cbo-v c tip u ng On*. Cc phng thc ny (chng hn OnClear, OnClearComplete,
OnGet, OnGetComplete,) thng c chp cc lp dn xut nhm cho php bn hin
thc cc chc nng ty bin cn thit qun l tp hp kiu mnh. Cc lp CollectionBase
v DictionaryBase s gi phng thc ph hp trc v sau khi vic chnh sa c thc
hin trn tp hp nm di thng qua thuc tnh List hay Dictionary.
12.
82
Chng 2: Thao tc d liu
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
System.Runtime.Serialization.Formatters.Soap.SoapFormatter
tun-t-ha t Stream, v tr v mt tham chiu Object n i tng c-gii-tunt-ha. Bn phi p tham chiu Object ny v kiu thch hp.
gi cc phng thc Serialize v Deserialize ca lp BinaryFormatter, m lnh ca bn
phi c cp phn t SerializationFormatter ca lp System.Security.Permissions.
SecurityPermission.
gi cc phng thc Serialize v Deserialize ca lp SoapFormatter, m lnh ca bn
phi c cp quyn tin tng tuyt i (full trust) v assembly System.Runtime.
Serialization.Formatters.Soap.dll (lp SoapFormatter c khai bo bn trong assembly ny)
khng cho php cc m lnh ch c-tin-cy-mt-phn (partially trusted caller) s dng n.
Tham kho mc 13.1 c thm thng tin v m lnh c-tin-cy-mt-phn.
Lp BinarySerializationExample di y minh ha cch s dng lp BinaryFormatter
tun t ha mt System.Collections.ArrayList cha danh sch tn ngi vo mt file. Sau
, ArrayList c gii tun t ha t file v ni dung ca n s c hin th trong ca s
Console.
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
public class BinarySerializationExample {
public static void Main() {
// To v cu hnh ArrayList tun t ha.
ArrayList people = new ArrayList();
people.Add("Phuong");
83
Chng 2: Thao tc d liu
people.Add("Phong");
people.Add("Nam");
// Tun t ha i tng ArrayList.
FileStream str = File.Create("people.bin");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(str, people);
str.Close();
// Gii tun t ha i tng ArrayList.
str = File.OpenRead("people.bin");
bf = new BinaryFormatter();
people = (ArrayList)bf.Deserialize(str);
str.Close();
// Hin th ni dung ca i tng ArrayList
// -c-gii-tun-t-ha.
foreach (string s in people) {
System.Console.WriteLine(s);
}
}
}
84
Chng 2: Thao tc d liu
85
Chng 2: Thao tc d liu
86
87
88
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
c mnh v tnh linh hot ca Microsoft .NET Framework c nng cao bi kh nng
kim tra v thao tc cc kiu v siu d liu lc thc thi. Cc mc trong chng ny s
trnh by cc kha cnh thng dng ca min ng dng (application domain), c ch
phn chiu (reflection), v siu d liu (metadata), bao gm:
To min ng dng
1.
Dng thc n gin nht ca phng thc CreateDomain nhn mt i s kiu string ch nh
tn thn thin cho min ng dng mi. Cc dng thc khc cho php bn ch nh chng c
(evidence) v cc thit lp cu hnh cho min ng dng mi. Chng c c ch nh bng i
tng System.Security.Policy.Evidence; mc 13.11 trnh by cc tc ng ca chng c khi
bn to mt min ng dng. Cc thit lp cu hnh c ch nh bng i tng
System.AppDomainSetup.
Lp AppDomainSetup cha cc thng tin cu hnh cho mt min ng dng. Bng 3.1 kit k
cc thuc tnh thng c s dng nht ca lp AppDomainSetup khi to cc min ng dng.
Cc thuc tnh ny c th c truy xut sau khi to thng qua cc thnh vin ca i tng
AppDomain, v mt s c th thay i lc thc thi; bn hy tham kho ti liu .NET
Framework SDK v lp AppDomain hiu chi tit hn.
Bng 3.1 Cc thuc tnh thng dng ca lp AppDomainSetup
Thuc tnh
ApplicationBase
M t
89
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
ConfigurationFile
DisallowPublisherPolicy
PrivateBinPath
90
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
2.
H thng .NET Remoting (s c tho lun trong chng 12) gip vic gi cc i tng qua
li cc min ng dng tr nn d dng. Tuy nhin, nu bn cha quen vi .NET Remoting, kt
qu c th rt khc so vi mong i. Thc ra, vn gy kh khn khi dng nhiu min ng
dng l s tng tc vi .NET Remoting v cch thc lun chuyn i tng qua cc min
ng dng.
Tt c cc kiu d liu c th chia thnh ba loi: nonremotable, marshal-by-value (MBV), v
marshal-by-reference (MBR). Kiu nonremotable khng th vt qua bin min ng dng v
khng th dng lm cc i s hay cc gi tr tr v ca cc li gi trong mi trng lin min
ng dng. Kiu nonremotable s c tho lun trong mc 3.4.
Kiu MBV l kiu kh-tun-t-ha. Khi mt i tng kiu MBV c chuyn qua mt min
ng dng khc nh l i s hay gi tr tr v, h thng .NET Remoting s tun t ha trng
thi hin ti ca i tng, chuyn d liu sang min ng dng ch, v to mt bn sao
ca i tng vi cng trng thi nh i tng gc. Kt qu l tn ti bn sao ca i tng
c hai min ng dng. Hai i tng ny ban u ging nhau hon ton, nhng c lp
nhau, nn vic thay i i tng ny khng nh hng n i tng kia. Di y l v d
mt kiu kh-tun-t-ha c tn l Employee, c chuyn qua mt min ng dng khc bng
tr (xem mc 16.1 bit cch to kiu kh-tun-t-ha).
[System.Serializable]
public class Employee {
// Hin thc cc thnh vin y.
91
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// Hin thc cc thnh vin y.
3.
Khi bn truyn mt i tng marshal-by-value (MBV) qua cc min ng dng, b thc thi s
to mt th hin mi ca i tng ny trong min ng dng ch. iu ny c ngha l b
thc thi phi np assembly cha siu d liu m t kiu ca i tng vo cc min ng dng.
Do , vic truyn cc tham chiu MBV qua cc min ng dng trung gian s dn n vic b
thc thi np cc assembly khng cn thit vo cc min ng dng ny. Mt khi c np
th cc assembly tha ny s khng c gii phng khi min ng dng nu khng gii
phng c min ng dng cha chng (xem mc 3.9).
Lp ObjectHandle cho php bn ng gi tham chiu i tng truyn qua cc min ng
dng m b thc thi khng phi np thm assembly. Khi i tng ny n min ng dng
ch, bn c th khi phc tham chiu i tng, b thc thi s np cc assembly cn thit v
cho php bn truy xut n i tng nh bnh thng. ng gi mt i tng (v d
System.Data.DataSet), bn c th thc hin nh sau:
// To mt DataSet mi.
System.Data.DataSet data1 = new System.Data.DataSet();
// ng gi DataSet.
System.Runtime.Remoting.ObjectHandle objHandle =
new System.Runtime.Remoting.ObjectHandle(data1);
92
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
4.
Phi chc chn kiu d liu thuc dng nonremotable, tc l khng th tun t
ha cng nh khng dn xut t lp MarshalByRefObject.
i khi bn mun kiu d liu no ch c gii hn truy xut trong phm vi ca min ng
dng. to kiu d liu dng nonremotable, phi chc rng kiu ny khng phi l khtun-t-ha v cng khng dn xut (trc tip hay gin tip) t lp MarshalByRefObject.
Nhng iu kin ny s m bo rng trng thi ca i tng khng th c truy xut t
cc min ng dng khc (cc i tng ny khng th c s dng lm i s hay gi tr tr
v trong cc li gi phng thc lin min ng dng).
iu kin kiu d liu khng phi l kh-tun-t-ha c thc hin d dng do mt lp
khng tha k kh nng tun t ha t lp cha ca n. bo m mt kiu khng phi l
kh-tun-t-ha, bn phi chc chn rng c tnh System.SerializableAttribute khng
c p dng khi khai bo kiu.
Bn cn lu khi m bo mt lp khng c truyn bng tham chiu. Nhiu lp trong th
vin lp .NET dn xut trc tip hay gin tip t MarshalByRefObject; bn phi cn thn
khng dn xut lp ca bn t cc lp ny. Nhng lp c s thng dng dn xut t
MarshalByRefObject bao gm: System.ComponentModel.Component, System.IO.Stream,
System.IO.TextReader, System.IO.TextWriter, System.NET.WebRequest, v System.Net.
WebResponse (xem ti liu .NET Framework SDK c danh sch y u cc lp dn xut t
MarshalByRefObject).
5.
dng
phng
thc
System.Reflection.Assembly.
tnh
Load
hay
LoadFrom
ca
lp
93
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Khi phng thc Load c gi, b thc thi thc hin qu trnh nh v v np assembly. Di
y s tm tt qu trnh ny; bn tham kho ti liu .NET Framework SDK bit thm chi
tit.
1.
2.
3.
Nu assembly khng c tn mnh hoc khng c tm thy trong GAC, b thc thi s
tm phn t <codeBase> trong cc file cu hnh my tnh v ng dng. Phn t
<codeBase> nh x tn ca assembly thnh mt file hay mt URL. Nu assembly c tn
mnh, <codeBase> c th ch n bt k v tr no k c cc URL da-trn-Internet; nu
94
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Th mc gc ca ng dng.
6.
95
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName +
" : " + s);
}
}
}
7.
96
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Vic s dng phng thc ExecuteAssembly ( c tho lun trong mc 3.6) khng my
kh khn; nhng khi pht trin cc ng dng phc tp c s dng nhiu min ng dng, chc
chn bn mun kim sot qu trnh np cc assembly, to cc kiu d liu, v triu gi cc
thnh vin ca i tng bn trong min ng dng.
Cc phng thc CreateInstance v CreateInstanceFrom cung cp nhiu phin bn np
chng gip bn kim sot qu trnh to i tng. Cc phin bn n gin nht s dng
phng thc khi dng mc nh ca kiu, nhng c hai phng thc ny u thit t cc
phin bn cho php bn cung cp i s s dng bt k phng thc khi dng no.
Phng thc CreateInstance np mt assembly c tn xc nh vo min ng dng bng qu
trnh c m t cho phng thc Assembly.Load trong mc 3.5. Sau , CreateInstance
to i tng cho kiu v tr v mt tham chiu n i tng mi c ng gi trong
ObjectHandle (c m t trong mc 3.3). Tng t nh th i vi phng thc
CreateInstanceFrom; tuy nhin, CreateInstanceFrom np assembly vo min ng dng bng
qu trnh c m t cho phng thc Assembly.LoadFrom trong mc 3.5.
AppDomain
97
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
using System.Collections;
using System.Collections.Specialized;
98
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName +
": SimplePlugin stopping...");
}
}
// Np cc plug-in c ch nh.
foreach (string plugin in pluginList.Keys) {
this.LoadPlugin((string)pluginList[plugin], plugin);
}
}
try {
// Np assembly.
Assembly assembly = Assembly.Load(assemblyName);
// To plug-in mi.
IPlugin plugin =
99
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
(IPlugin)assembly.CreateInstance(pluginName, true);
if (plugin != null) {
return true;
} else {
return false;
}
} catch {
return false;
}
}
// Ly mt plug-in t ListDictionary v
// gi phng thc Start.
((IPlugin)plugins[plugin]).Start();
}
100
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// Ly mt plug-in t ListDictionary v
// gi phng thc Stop.
((IPlugin)plugins[plugin]).Stop();
}
// Np mt plug-in mi vo NewAppDomain1.
manager1.LoadPlugin("CreateInstanceExample", "SimplePlugin");
101
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
8.
102
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
min ng dng gi phng thc SetData hay GetData truy xut vung m d liu ca min
ng dng khc, th i tng d liu phi h tr ng ngha marshal-by-value hay marshal-byreference, nu khng th ngoi l System.Runtime.Serialization.SerializationException
s b nm (xem mc 3.3 bit thm chi tit v cch truyn i tng qua cc min ng
dng). on m sau trnh by cch s dng phng thc SetData v GetData truyn mt
System.Collections.ArrayList gia hai min ng dng.
using System;
using System.Reflection;
using System.Collections;
public class ListModifier {
public ListModifier () {
// Nhn danh sch t m d liu.
ArrayList list =
(ArrayList)AppDomain.CurrentDomain.GetData("People");
// Thay i danh sch.
list.Add("Tam");
}
}
public class PassDataExample {
public static void Main() {
// To mt min ng dng mi.
AppDomain domain = AppDomain.CreateDomain("Test");
// To mt ArrayList v thm thng tin vo.
ArrayList list = new ArrayList();
list.Add("Phuong");
list.Add("Phong");
list.Add("Nam");
// t danh sch vo vng m d liu ca min ng dng mi.
domain.SetData("People", list);
103
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// To mt ListModifier trong min ng dng mi
// s thay i ni dung ca list trong vng m d liu.
domain.CreateInstance("03-08", "ListModifier");
// Nhn li danh sch v hin th ni dung ca n.
foreach (string s in (ArrayList)domain.GetData("People")) {
Console.WriteLine(s);
}
// Nhn Enter thot.
Console.ReadLine();
}
}
9.
Cch duy nht gii phng mt assembly l gii phng c min ng dng m n c
np vo. ng tic, vic gii phng mt min ng dng cng s gii phng lun tt c cc
assembly c np vo . y l mt gii hn yu cu bn phi t chc v qun l tt cu
trc min ng dng v assembly.
Khi gii phng mt min ng dng bng phng thc tnh AppDomain.Unload, bn cn truyn
cho n mt tham chiu AppDomain n min ng dng cn gii phng. Bn khng th gii
phng min ng dng mc nh do CLR to lc startup. on m di y trnh by cch s
dng phng thc Unload.
// To mt min ng dng mi.
AppDomain newDomain = AppDomain.CreateDomain("New Domain");
// Np assembly vo min ng dng my.
104
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
10.
Ton t typeof
Phng thc tnh GetType ca lp System.Type
Phng thc GetType thuc mt th hin ca kiu
Phng thc GetNestedType hay GetNestedTypes ca lp Type
Phng thc GetType hay GetTypes ca lp Assembly
Phng thc GetType, GetTypes, hay FindTypes ca lp System.Reflection.
Module
Tn kiu khng c t trong du nhy kp v phai kha phn giai i vi trnh bin dch. V
tham chiu c phn gii lc bin dch nn assembly cha kiu ny tr thnh phn ph thuc
tnh cua assembly v s c lit k nh th trong assembly manifest ca bn.
Mt cch khc l s dng phng thc tnh Type.GetType, nhn vo mt chui cha tn kiu.
V s dng chui ch nh kiu nn bn c th thay i n lc thc thi, iu ny m ra cnh
ca n vi th gii lp trnh ng bng c ch phn chiu (xem mc 3.12). Nu bn ch nh
tn kiu, b thc thi phi tm kiu ny trong mt assembly c np. Bn cng c th ch
nh mt tn kiu theo tiu chun assembly (tham kho ti liu .NET Framework SDK v
phng thc Type.GetType bit cch kt cu tn kiu theo tiu chun assembly). Cc lnh
sau trnh by cch s dng phng thc GetType:
// C phn bit ch hoa-thng, tr v null nu khng tm thy.
Type t2 = Type.GetType("System.String");
105
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// C phn bit ch hoa-thng,
// nm ngoi l TypeLoadException nu khng tm thy.
Type t3 = Type.GetType("System.String", true);
// Khng phn bit ch hoa-thng,
// nm ngoi l TypeLoadException nu khng tm thy.
Type t4 = Type.GetType("system.string", true, true);
Bng 3.2 tm tt cc phng thc khc cng cung cp kh nng truy xut i tng Type.
Bng 3.2 Cc phng thc tr v i tng Type
Phng thc
M t
Type.GetNestedType
Type.GetNestedTypes
Assembly.GetType
Assembly.GetTypes
Module.GetType
Module.GetTypes
Module.FindTypes
106
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
11.
C# cung cp ton t is thc hin nhanh vic kim tra nh trn. Ngoi ra, is s tr v true
nu i tng cn kim tra dn xut t lp c ch nh. on m di y kim tra xem
someObject l mt th hin ca System.IO.TextReader, hay mt lp dn xut t TextReader
(nh StringReader):
// Kim tra xem someObject l TextReader,
// hay dn xut t TextReader bng ton t is.
if (someObject is System.IO.TextReader) {
// Lm g .
107
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
12.
Bc u tin trong vic to mt i tng bng c ch phn chiu l thu ly i tng Type
m t kiu ca i tng cn to (xem mc 3.10 bit thm chi tit). Khi c c i tng
Type, hy gi phng thc GetConstructor thu ly i tng ConstructorInfo m t mt
trong cc phng thc khi dng ca kiu ny. Dng thc thng dng nht ca phng thc
GetConstructor l nhn mt mng Type lm i s, v tr v i tng ConstructorInfo m
t phng thc khi dng nhn cc i s c ch nh trong mng Type. thu ly i
tng ConstructorInfo m t phng thc khi dng mc nh (khng c i s), bn hy
truyn cho phng thc GetConstructor mt mng Type rng (s dng trng tnh
Type.EmptyTypes); ng s dng null, nu khng GetConstructor s nm ngoi l
System.ArgumentNullException. Nu GetConstructor khng tm thy phng thc khi dng
no c ch k ph hp vi cc i s c ch nh th n s tr v null.
108
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
Chc nng phn chiu thng c s dng hin thc cc factory. Trong , bn s dng
c ch phn chiu th hin ha cc lp tha k mt lp c s ph bin hay hin thc mt
giao din ph bin. Thng thng, c lp c s chung v giao din chung u c s dng.
Lp c s tru tng s hin thc giao din v bt k chc nng chung no, sau mi hin
thc c th s tha k lp c s.
Khng c c ch no khai bo rng mi lp c th phi hin thc cc phng thc khi
dng vi cc ch k c th. Nu mun ngi khc (hng th ba) hin thc cc lp c th th
bn phi ch r (trong ti liu hng dn) ch k ca phng thc khi dng m factory ca
bn gi. Cch thng thng trnh vn ny l s dng phng thc khi dng mc nh
(khng c i s), sau cu hnh i tng bng phng thc v thuc tnh. V d di y
s hin thc mt factory dng to cc i tng c hin thc giao din IPlugin.
using System;
using System.Reflection;
// Giao din chung m tt c cc plug-in phi hin thc.
public interface IPlugin {
string Description { get; set; }
109
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
void Start();
void Stop();
}
// Lp c s tru tng m tt c cc plug-in phi dn xut t y.
public abstract class AbstractPlugin : IPlugin {
// Chui cha li m t plug-in.
private string description = "";
// Thuc tnh dng ly li m t plug-in.
public string Description {
get { return description; }
set { description = value; }
}
// Khai bo cc thnh vin ca giao din IPlugin.
public abstract void Start();
public abstract void Stop();
}
// Mt hin thc n gin cho giao din IPlugin
// minh ha lp PluginFactory.
public class SimplePlugin : AbstractPlugin {
// Hin thc phng thc Start.
public override void Start() {
Console.WriteLine(Description
+ ": Starting...");
}
// Hin thc phng thc Stop.
public override void Stop() {
Console.WriteLine(Description + ": Stopping...");
}
}
// Factory dng to cc i tng ca IPlugin.
public sealed class PluginFactory {
public static IPlugin CreatePlugin(string assembly,
110
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// Tn assembly
"SimplePlugin",
// Tn lp plug-in
// Li m t plug-in
);
To mt c tnh ty bin
13.
111
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
c tnh cung cp mt c ch tng qut cho vic kt hp thng tin khai bo (siu d liu) vi
cc phn t chng trnh. Siu d liu ny nm trong assembly c bin dch, cho php
cc chng trnh thu ly n thng qua c ch phn chiu lc thc thi (xem mc 3.14.) Cc
chng trnh khc, c bit l CLR, s dng thng tin ny xc nh cch thc tng tc v
qun l cc phn t chng trnh.
to mt c tnh ty bin th hy dn xut mt lp t lp c s tru tng
System.Attribute. Cc lp c tnh ty bin phi l public v c tn kt thc bng
Attribute. Mt c tnh ty bin phi c t nht mt phng thc khi dng cng khai. Cc
i s ca phng thc khi dng s tr thnh cc i s v tr (positional parameter) ca c
tnh. Nh vi bt k lp no khc, bn c th khai bo nhiu phng thc khi dng, cho
php ngi dng ty chn s dng cc tp khc nhau ca cc i s v tr khi p dng c
tnh. Bt k thuc tnh v trng c/ghi cng khai no do c tnh khai bo u tr thnh i
s c nu tn (named parameter).
iu khin cch thc ngi dng p dng c tnh, hay p dng c tnh
AttributeUsageAttribute cho c tnh ty bin ca bn. c tnh AttributeUsageAttribute
h tr mt i s v tr v hai i s c nu tn, c m t trong bng 3.3. Cc gi tr mc
nh ch nh gi tr s c p dng cho c tnh ty bin ca bn nu bn khng p dng
AttributeUsageAttribute hoc khng ch nh gi tr cho mt thng s.
Bng 3.3 Cc thnh vin thuc kiu lit k AttributeUsage
Thng s
Kiu
M t
Mc nh
v tr
AttributeTargets.All
AllowMultiple
c nu
tn
c tnh c th c ch nh nhiu
ln cho mt phn t hay khng.
false
Inherited
c nu
tn
c tnh c c tha k bi cc lp
dn xut hay cc thnh vin c
chp hay khng.
true
ValidOn
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly,
AllowMultiple = true, Inherited = false)]
public class AuthorAttribute : System.Attribute {
112
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
// Tn tc gi
113
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
}
14.
[Author("Stephen Chau")]
[Author("Square Nguyen", Company = "Goldsoft Ltd.")]
public class GetCustomAttributesExample {
114
Chng 3: Min ng dng, c ch phn chiu, v siu d liu
object[] attrs =
type.GetCustomAttributes(typeof(AuthorAttribute), true);
// Lit k cc c tnh.
foreach (AuthorAttribute a in attrs) {
Console.WriteLine(a.Name + ", " + a.Company);
}
115
116
117
Chng 4: Tiu trnh, tin trnh, v s ng b
Kim sot qu trnh thc thi ca mt tiu trnh bit c khi no n kt thc (mc
4.6 v 4.7).
1.
Khai bo mt phng thc cha m lnh cn thc thi; phng thc ny phi tr
v void v ch nhn mt i s. Sau , to mt th hin ca y nhim
System.Threading.WaitCallback tham chiu n phng thc ny. Tip tc, gi
phng thc tnh QueueUserWorkItem ca lp System.Threading.ThreadPool, v
truyn th hin y nhim to lm i s. B thc thi s xp th hin y nhim
ny vo hng i v thc thi n khi mt tiu trnh trong thread-pool sn sng.
Nu ng dng s dng nhiu tiu trnh c thi gian sng ngn hay duy tr mt s lng ln
cc tiu trnh ng thi th hiu nng c th gim st bi cc chi ph cho vic to, vn hnh v
hy cc tiu trnh. Ngoi ra, trong mt h thng h-tr-a-tiu-trnh, cc tiu trnh thng
trng thi ri sut mt khong thi gian di ch iu kin thc thi ph hp. Vic s dng
thread-pool s cung cp mt gii php chung nhm ci thin tnh quy m v hiu nng ca cc
h thng h-tr-a-tiu-trnh.
.NET Framework cung cp mt hin thc n gin cho thread-pool m chng ta c th truy
xut thng qua cc thnh vin tnh ca lp ThreadPool. Phng thc QueueUserWorkItem cho
php bn thc thi mt phng thc bng mt tiu trnh trong thread-pool (t cng vic vo
hng i). Mi cng vic c m t bi mt th hin ca y nhim WaitCallback (tham
chiu n phng thc cn thc thi). Khi mt tiu trnh trong thread-pool sn sng, n nhn
cng vic k tip t hng i v thc thi cng vic ny. Khi hon tt cng vic, thay v kt
thc, tiu trnh ny quay v thread-pool v nhn cng vic k tip t hng i.
Vic s dng thread-pool ca b thc thi gip n gin ha vic lp trnh h-tr-a-tiu-trnh.
Tuy nhin, cn lu y l thread-pool c hin thc n gin, ch nhm mc ch s dng
chung. Trc khi quyt nh s dng thread-pool ny, cn xem xt cc im sau:
118
Chng 4: Tiu trnh, tin trnh, v s ng b
Cng nh vic cho php bn s dng thread-pool thc thi m lnh mt cch trc
tip, b thc thi cn s dng thread-pool cho nhiu mc ch bn trong, bao gm vic
thc thi phng thc mt cch bt ng b (xem mc 4.2) v thc thi cc s kin nh
thi (xem mc 4.3). Tt c cc cng vic ny c th dn n s tranh chp gia cc tiu
trnh trong thread-pool; ngha l hng i c th tr nn rt di. Mc d di ti a
ca hng i ch b gii hn bi s lng b nh cn li cho tin trnh ca b thc thi,
nhng hng i qu di s lm ko di qu trnh thc thi ca cc cng vic trong hng
i.
Bn khng nn s dng thread-pool thc thi cc tin trnh chy trong mt thi gian
di. V s tiu trnh trong thread-pool l c gii hn, nn ch mt s t tiu trnh thuc
cc tin trnh loi ny cng s nh hng ng k n ton b hiu nng ca threadpool. c bit, bn nn trnh t cc tiu trnh trong thread-pool vo trng thi i
trong mt thi gian qu di.
// Phng thc khi dng nhn cc thit lp cu hnh cho tiu trnh.
public MessageInfo(int iterations, string message) {
this.iterations = iterations;
119
Chng 4: Tiu trnh, tin trnh, v s ng b
this.message = message;
}
} else {
120
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.WriteLine(config.Message);
ThreadPool.QueueUserWorkItem(workMethod, info);
121
Chng 4: Tiu trnh, tin trnh, v s ng b
2.
Bn cn thc thi mt phng thc v tip tc thc hin cc cng vic khc trong
khi phng thc ny vn chy trong mt tiu trnh ring bit. Sau khi phng
thc hon tt, bn cn ly tr tr v ca n.
Khi cho gi mt phng thc, chng ta thng thc hin mt cch ng b; ngha l m lnh
thc hin li gi phi i vo trng thi dng (block) cho n khi phng thc c thc hin
xong. y l cch cn thit khi m lnh yu cu qu trnh thc thi phng thc phi hon tt
trc khi n c th tip tc. Tuy nhin, trong mt s trng hp, bn li cn thc thi phng
thc mt cch bt ng b; ngha l bn cho thc thi phng thc ny trong mt tiu trnh
ring trong khi vn tip tc thc hin cc cng vic khc.
.NET Framework h tr ch thc thi bt ng b, cho php bn thc thi bt k phng
thc no mt cch bt ng b bng mt y nhim. Khi khai bo v bin dch mt y nhim,
trnh bin dch s t ng sinh ra hai phng thc h tr ch thc thi bt ng b:
BeginInvoke v EndInvoke. Khi bn gi phng thc BeginInvoke ca mt th hin y nhim,
phng thc c tham chiu bi y nhim ny c xp vo hng i thc thi bt ng
b. Quyn kim sot qu trnh thc thi c tr v cho m gi BeginInvoke ngay sau , v
phng thc c tham chiu s thc thi trong ng cnh ca tiu trnh sn sng trc tin
trong thread-pool.
Cc i s ca phng thc BeginInvoke gm cc i s c ch nh bi y nhim, cng
vi hai i s dng khi phng thc thc thi bt ng b kt thc. Hai i s ny l:
122
Chng 4: Tiu trnh, tin trnh, v s ng b
Blockingdng qu trnh thc thi ca tiu trnh hin hnh cho n khi phng thc
thc thi bt ng b kt thc. iu ny rt ging vi s thc thi ng b. Tuy nhin,
nu linh hot chn thi im chnh xc a m lnh ca bn vo trng thi dng
(block) th bn vn cn c hi thc hin thm mt s vic trc khi m lnh i vo
trng thi ny.
Pollinglp i lp li vic kim tra trng thi ca phng thc thc thi bt ng b
xc nh n kt thc hay cha. y l mt k thut rt n gin, nhng nu xet v mt
x ly thi khng c hiu qua. Bn nn trnh cc vng lp cht lm lng ph thi gian
ca b x l; tt nht l nn t tiu trnh thc hin polling vo trng thi ngh (sleep)
trong mt khong thi gian bng cch s dng Thread.Sleep gia cc ln kim tra
trng thi. Bi ky thut polling oi hoi bn phai duy tri mt vong lp nn hot ng cua
tiu trnh ch se bi gii hn, tuy nhin bn co th d dng cp nht tin cng vic.
123
Chng 4: Tiu trnh, tin trnh, v s ng b
// M phng vic x l tn nhiu thi gian.
Thread.Sleep(delay);
Console.WriteLine(Environment.NewLine +
"*** Running Blocking Example ***");
124
Chng 4: Tiu trnh, tin trnh, v s ng b
DateTime.Now.ToString("HH:mm:ss.ffff"));
Thread.Sleep(200);
}
Console.WriteLine(Environment.NewLine +
"*** Running Polling Example ***");
125
Chng 4: Tiu trnh, tin trnh, v s ng b
// th i vo trng thi ch trong 300 mini-giy
// trc khi thc hin polling ln na.
Console.WriteLine("{0} : Poll repeatedly until method is " +
"complete...", DateTime.Now.ToString("HH:mm:ss.ffff"));
while(!asyncResult.IsCompleted) {
Console.WriteLine("{0} : Polling...",
DateTime.Now.ToString("HH:mm:ss.ffff"));
Thread.Sleep(300);
}
Console.WriteLine(Environment.NewLine +
"*** Running Waiting Example ***");
126
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.WriteLine(Environment.NewLine +
"*** Running WaitAll Example ***");
// Gi ba ln LongRunningMethod mt cch bt ng b.
// Truyn null cho c y nhim callback v i tng
// trng thi bt ng b. Thm th hin IAsyncResult
// cho mi phng thc vo ArrayList.
AsyncExampleDelegate longRunningMethod =
127
Chng 4: Tiu trnh, tin trnh, v s ng b
new AsyncExampleDelegate(LongRunningMethod);
asyncResults.Add(longRunningMethod.BeginInvoke(3000,
"WaitAll 1", null, null));
asyncResults.Add(longRunningMethod.BeginInvoke(2500,
"WaitAll 2", null, null));
asyncResults.Add(longRunningMethod.BeginInvoke(1500,
"WaitAll 3", null, null));
128
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.WriteLine(Environment.NewLine +
"*** Running Callback Example ***");
129
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.WriteLine("{0} : Continue processing...",
DateTime.Now.ToString("HH:mm:ss.ffff"));
Thread.Sleep(200);
}
}
// Phng thc x l vic kt thc bt ng b bng callbacks.
public static void CallbackHandler(IAsyncResult result) {
// Trch tham chiu n th hin AsyncExampleDelegate
// t th hin IAsyncResult.
AsyncExampleDelegate longRunningMethod =
(AsyncExampleDelegate)result.AsyncState;
3.
Bn cn thc thi mt phng thc trong mt tiu trnh ring theo chu k hay
mt thi im xc nh.
130
Chng 4: Tiu trnh, tin trnh, v s ng b
Sau khi to i tng Timer, bn cng c th thay i cc thi khong c s dng bi Timer
bng phng thc Change, nhng bn khng th thay i phng thc s c gi. Khi
dng xong Timer, bn nn gi phng thc Timer.Depose gii phng ti nguyn h thng
b chim gi bi Timer. Vic hy Timer cng hy lun phng thc c nh thi thc
thi.
Lp TimerExample di y trnh by cch s dng Timer gi mt phng thc c tn l
TimerHandler. Ban u, Timer c cu hnh gi TimerHandler sau hai giy v lp li sau
mt giy. V d ny cng trnh by cch s dng phng thc Timer.Change thay i cc
thi khong.
using System;
using System.Threading;
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"), state);
}
131
Chng 4: Tiu trnh, tin trnh, v s ng b
TimerCallback handler = new TimerCallback(TimerHandler);
try {
period = Int32.Parse(Console.ReadLine());
} catch {
period = 0;
}
132
Chng 4: Tiu trnh, tin trnh, v s ng b
Mc d Timer thng c s dng gi thc thi cc phng thc nhng thi khong,
nhng n cng cung cp cch thc thc thi mt phng thc mt thi im xc nh.
Bn cn phi tnh ton khong thi gian t thi im hin ti n thi im cn thc thi. V d
di y s thc hin iu ny:
public static void RunAt(DateTime execTime) {
// Tnh khong thi gian t thi im hin ti
// n thi im cn thc thi.
TimeSpan waitTime = execTime - DateTime.Now;
if (waitTime < new TimeSpan(0)) waitTime = new TimeSpan(0);
// To mt th hin y nhim TimerCallback mi
// tham chiu n phng thc tnh TimerHandler.
// TimerHandler s c gi khi Timer ht hiu lc.
TimerCallback handler = new TimerCallback(TimerHandler);
// To mt Timer ch pht sinh mt ln ti thi im
// c ch nh. Ch nh thi khong th hai l -1
// ngn Timer thc thi lp li phng thc.
new Timer(handler, null, waitTime, new TimeSpan(-1));
}
133
Chng 4: Tiu trnh, tin trnh, v s ng b
Unregister ca i tng System.Threading.RegisteredWaitHandle (c tr v bi phng
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"), state);
}
}
134
Chng 4: Tiu trnh, tin trnh, v s ng b
WaitOrTimerCallback handler =
new WaitOrTimerCallback(EventHandler);
135
Chng 4: Tiu trnh, tin trnh, v s ng b
5.
Bn mun thc thi m lnh trong mt tiu trnh ring, v mun kim sot hon
ton qu trnh thc thi v trng thi ca tiu trnh .
tng linh hot v mc kim sot khi hin thc cc ng dng h-tr-a-tiu-trnh, bn
phi trc tip to v qun l cc tiu trnh. y l cch tip cn phc tp nht trong vic lp
trnh h-tr-a-tiu-trnh, nhng cng l cch duy nht vt qua nhng hn ch c hu
trong cc cch tip cn s dng cc tiu trnh trong thread-pool, nh c tho lun trong
bn mc trc. Lp Thread cung cp mt c ch m qua bn c th to v kim sot cc
tiu trnh. to v chy mt tiu trnh mi, bn hy tin hnh theo cc bc sau:
1.
2.
3.
Gi thc thi phng thc Start ca i tng Thread chuyn trng thi ca n sang
ThreadState.Running v bt u thc thi phng thc c tham chiu bi th hin y
nhim ThreadStart (nu bn gi phng thc Start qu mt ln, n s nm ngoi l
System.Threading.ThreadStateException).
V y nhim ThreadStart khai bo khng c i s, bn khng th truyn d liu trc tip cho
phng thc c tham chiu. truyn d liu cho tiu trnh mi, bn phi cu hnh d liu
l kh truy xut i vi m lnh ang chy trong tiu trnh mi. Cch tip cn thng thng l
to mt lp ng gi c d liu cn cho tiu trnh v phng thc c thc thi bi tiu trnh.
Khi mun chy mt tiu trnh mi, bn hy to mt i tng ca lp ny, cu hnh trng thi
cho n, v ri chy tiu trnh. Di y l mt v d:
using System;
using System.Threading;
public class ThreadExample {
// Cc bin gi thng tin trng thi.
private int iterations;
private string message;
private int delay;
136
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"), message);
Thread.Sleep(delay);
}
}
137
Chng 4: Tiu trnh, tin trnh, v s ng b
6.
138
Chng 4: Tiu trnh, tin trnh, v s ng b
M t
Abort
Interrupt
Resume
Start
Khi chy tiu trnh mi; xem mc 4.5 bit cch s dng phng
thc Start.
Suspend
Tm hon qu trnh thc thi ca mt tiu trnh cho n khi phng thc
Resume c gi. Vic tm hon mt tiu trnh b tm hon s khng
c hiu lc, nhng vic gi Suspend trn mt tiu trnh cha khi chy
hoc kt thc s sinh ra ngoi l ThreadStateException trong tiu
trnh ang gi.
using System;
using System.Threading;
public class ThreadControlExample {
private static void DisplayMessage() {
// Lp i lp li vic hin th mt thng bo ra ca s Console.
139
Chng 4: Tiu trnh, tin trnh, v s ng b
while (true) {
try {
Console.WriteLine("{0} : Second thread running. Enter"
+ " (S)uspend, (R)esume, (I)nterrupt, or (E)xit.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
// Ngh 2 giy.
Thread.Sleep(2000);
} catch (ThreadInterruptedException) {
// Mc d ThreadAbortException c th l,
// b thc thi s nm n ln na bo m
// tiu trnh kt thc.
}
}
}
140
Chng 4: Tiu trnh, tin trnh, v s ng b
switch (command) {
case 'S':
// Tm hon tiu trnh th hai.
Console.WriteLine("{0} : Suspending second thread.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
thread.Suspend();
break;
case 'R':
// Phc hi tiu trnh th hai.
try {
Console.WriteLine("{0} : Resuming second " +
"thread.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
thread.Resume();
141
Chng 4: Tiu trnh, tin trnh, v s ng b
} catch (ThreadStateException) {
Console.WriteLine("{0} : Thread wasn't " +
"suspended.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
}
break;
case 'I':
// Gin on tiu trnh th hai.
Console.WriteLine("{0} : Interrupting second " +
"thread.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
thread.Interrupt();
break;
case 'E':
// Hy b tiu trnh th hai v truyn mt i tng
// trng thi cho tiu trnh ang b hy,
// trong trng hp ny l mt thng bo.
Console.WriteLine("{0} : Aborting second thread.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
thread.Abort("Terminating example.");
142
Chng 4: Tiu trnh, tin trnh, v s ng b
7.
Cch d nht kim tra mt tiu trnh kt thc hay cha l kim tra thuc tnh
Thread.IsAlive. Thuc tnh ny tr v true nu tiu trnh c khi chy nhng cha kt
thc hay b hy.
Thng thng, bn s cn mt tiu trnh i mt tiu trnh khc hon tt vic x l ca n.
Thay v kim tra thuc tnh IsAlive trong mt vng lp, bn c th s dng phng thc
Thread.Join. Phng thc ny khin tiu trnh ang gi dng li (block) cho n khi tiu
trnh c tham chiu kt thc. Bn c th ty chn ch nh mt khong thi gian (gi tr int
hay TimeSpan) m sau khong thi gian ny, Join s ht hiu lc v qu trnh thc thi ca tiu
trnh ang gi s phc hi li. Nu bn ch nh mt gi tr time-out, Join tr v true nu tiu
trnh kt thc, v false nu Join ht hiu lc.
V d di y thc thi mt tiu trnh th hai v ri gi Join i tiu trnh th hai kt thc.
V tiu trnh th hai mt 5 giy thc thi, nhng phng thc Join ch nh gi tr time-out
l 3 giy, nn Join s lun ht hiu lc v v d ny s hin th mt thng bo ra ca s
Console.
using System;
using System.Threading;
// Ngh 1 giy.
Thread.Sleep(1000);
}
}
143
Chng 4: Tiu trnh, tin trnh, v s ng b
public static void Main() {
8.
144
Chng 4: Tiu trnh, tin trnh, v s ng b
Bo m cc tiu trnh ch thc thi khi tht s cn thit v phi m bo rng chng ch
c thc thi vi chi ph ti thiu khi chng ri.
145
Chng 4: Tiu trnh, tin trnh, v s ng b
hai ngi dng nhn Enter, Monitor.PulseAll s c gi gii phng tt c cc tiu trnh
ang ch cn li.
using System;
using System.Threading;
Monitor.Enter(consoleGate);
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"),
"Acquired consoleGate lock, waiting...");
} finally {
Monitor.Exit(consoleGate);
}
}
146
Chng 4: Tiu trnh, tin trnh, v s ng b
Thread.Sleep(1000);
Console.ReadLine();
Console.ReadLine();
147
Chng 4: Tiu trnh, tin trnh, v s ng b
lock (consoleGate) {
M t
WaitAny
WaitAll
WaitOne
148
Chng 4: Tiu trnh, tin trnh, v s ng b
S dng lnh lock ng b ha cc tiu trnh truy xut n tp hp, hoc truy
xut tp hp thng qua mt v bc c tnh cht an-ton-v-tiu-trnh (threadsafe).
149
Chng 4: Tiu trnh, tin trnh, v s ng b
10.
150
Chng 4: Tiu trnh, tin trnh, v s ng b
Lp Process cung cp mt dng biu din c-qun-l cho mt tin trnh ca h iu hnh
v cung cp mt c ch n gin m thng qua , bn c th thc thi c ng dng cqun-l ln khng-c-qun-l. Lp Process hin thc bn phin bn np chng cho
phng thc Start (bn c th s dng phng thc ny khi chy mt tin trnh mi).
Hai trong s ny l cc phng thc tnh, cho php bn ch nh tn v cc i s cho tin
trnh mi. V d, hai lnh di y u thc thi Notepad trong mt tin trnh mi:
// Thc thi notepad.exe, khng c i s.
Process.Start("notepad.exe");
// Thc thi notepad.exe, tn file cn m l i s.
Process.Start("notepad.exe", "SomeFile.txt");
M t
Arguments
ErrorDialog
FileName
WindowStyle
thnh
vin
thuc
kiu
lit
System.Diagnostics.
Tn y ca th mc lm vic.
151
Chng 4: Tiu trnh, tin trnh, v s ng b
152
Chng 4: Tiu trnh, tin trnh, v s ng b
11.
M t
GetCurrentProcess
GetProcessById
GetProcesses
GetProcessesByName
153
Chng 4: Tiu trnh, tin trnh, v s ng b
ngi dng ng ca s chnh bng trnh n h thng, v n cho c hi ng dng thc hin
vic tt mt cch bnh thng. CloseMainWindow s khng kt thc cc ng dng khng c ca
s chnh hoc cc ng dng c ca s chnh b v hiu (c th v mt hp thoi hin ang
c m). Vi nhng tnh hung nh th, CloseMainWindow s tr v false.
CloseMainWindow tr v true nu thng ip c gi thnh cng, nhng khng bo m tin
trnh tht s kt thc. V d, cc ng dng dng son tho d liu thng s cho c hi
ngi dng lu li cc d liu cha c lu nu nhn c thng ip ny. Ngi dng
thng c c hi hy b vic ng ca s vi nhng tnh hung nh th. iu ny ngha l
CloseMainWindow s tr v true, nhng ng dng vn c chy khi ngi dng hy b. Bn c
th s dng phng thc Process.WaitForExit bo hiu vic kt thc tin trnh v thuc
tnh Process.HasExited kim tra tin trnh kt thc hay cha. V bn cng c th s
dng phng thc Kill.
Phng thc Kill kt thc mt tin trnh ngay lp tc; ngi dng khng c c hi dng vic
kt thc, v tt c cc d liu cha c lu s b mt. Kill l ty chn duy nht kt thc
cc ng dng da-trn-Windows khng p li CloseMainWindow v kt thc cc ng dng
khng-da-trn-Windows.
V d di y khi chy mt th hin mi ca Notepad, i 5 giy, sau kt thc tin trnh
Notepad. Trc tin, v d ny kt thc tin trnh bng CloseMainWindow. Nu
CloseMainWindow tr v false, hoc tin trnh Notepad vn c chy sau khi CloseMainWindow
c gi, v d ny s gi Kill v buc tin trnh Notepad kt thc; bn c th buc
CloseMainWindow tr v false bng cch b mc hp thoi File Open m.
using System;
using System.Threading;
using System.Diagnostics;
154
Chng 4: Tiu trnh, tin trnh, v s ng b
if (!process.CloseMainWindow()) {
12.
Bo m ch c th chy
mt th hin ca ng dng ti mt thi im
155
Chng 4: Tiu trnh, tin trnh, v s ng b
Console.ReadLine();
} else {
156
Chng 4: Tiu trnh, tin trnh, v s ng b
}
}
157
Chng 5:XML
158
159
Chng 5: XML
Cc k thut dng c, phn tch, v thao tc d liu XML (mc 5.1, 5.2, 5.3, v
5.7).
Bin i mt ti liu XML thnh mt ti liu khc bng XSLT stylesheet (mc 5.12).
1.
.NET Framework cung cp nhiu cch khc nhau x l cc ti liu XML. Cch m bn s
dng ty thuc vo tc v cn lp trnh. Mt trong s l lp XmlDocument. Lp ny cung
cp mt dng biu din trong-b-nh cho mt ti liu XML, tun theo W3C Document Object
Model (DOM); cho php bn duyt qua cc nt theo bt k hng no, chn v loi b nt, v
thay i ng cu trc lc chy. Bn hy vo [http://www.w3c.org] bit thm chi tit v
DOM.
s dng lp XmlDocument, bn ch vic to mt th hin ca lp ny ri gi phng thc
Load cng vi mt tn file, mt Stream, mt TextReader, hay mt XmlReader (bn cng c th
cung cp mt URL ch n mt ti liu XML). Th hin XmlDocument s cha tt c cc nt
(dng cy) c trong ti liu ngun. im nhp (entry point) dng truy xut cc nt ny l
phn t gc, c cp thng qua thuc tnh XmlDocument.DocumentElement. y l mt i
tng XmlElement, c th cha nhiu i tng XmlNode lng bn trong, cc i tng ny c
th cha nhiu i tng XmlNode na, v c tip tc nh th. Mt XmlNode l phn cu thnh
c bn ca mt file XML. Mt nt XML c th l mt phn t (element), mt c tnh
(attribute), li ch thch, hay text.
160
Chng 5: XML
Name l tn ca nt.
NodeType l mt thnh vin thuc kiu lit k System.Xml.XmlNodeType, cho bit kiu
trong.
V d di y duyt qua tt c cc nt ca mt XmlDocument (bng thuc tnh ChildNodes v
mt phng thc quy) ri hin th chng trong mt TreeView.
using System;
using System.Windows.Forms;
using System.Xml;
public class XmlTreeDisplay : System.Windows.Forms.Form{
private System.Windows.Forms.Button cmdLoad;
private System.Windows.Forms.Label lblFile;
private System.Windows.Forms.TextBox txtXmlFile;
private System.Windows.Forms.TreeView treeXml;
// (B qua phn m designer.)
private void cmdLoad_Click(object sender, System.EventArgs e) {
// Xa cy.
treeXml.Nodes.Clear();
// Np ti liu XML.
XmlDocument doc = new XmlDocument();
try {
doc.Load(txtXmlFile.Text);
}catch (Exception err) {
161
Chng 5: XML
MessageBox.Show(err.Message);
return;
}
// d liu vo TreeView.
ConvertXmlNodeToTreeNode(doc, treeXml.Nodes);
// M rng tt c cc nt.
treeXml.Nodes[0].ExpandAll();
}
private void ConvertXmlNodeToTreeNode(XmlNode xmlNode,
TreeNodeCollection treeNodes) {
// Thm mt TreeNode m t XmlNode ny.
TreeNode newTreeNode = treeNodes.Add(xmlNode.Name);
162
Chng 5: XML
break;
}
// Gi phng thc ny mt cch quy cho mi c tnh
// (XmlAttribute l mt lp con ca XmlNode).
if (xmlNode.Attributes != null) {
163
Chng 5: XML
</product>
</products>
</productCatalog>
164
Chng 5: XML
2.
// To mt ti liu mi rng.
XmlDocument doc = new XmlDocument();
XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(docNode);
165
Chng 5: XML
XmlNode productsNode = doc.CreateElement("products");
doc.AppendChild(productsNode);
// Lu ti liu.
doc.Save(Console.Out);
Console.ReadLine();
}
}
166
Chng 5: XML
3.
Chn mt nt vo XmlDocument cn nhiu m lnh. C nhiu cch thu ngn m lnh ny. Mt
cch l to mt lp tr gip (helper) gm cc phng thc mc-cao chn nt vo ti liu.
V d, bn c th vit phng thc AddElement to mt phn t mi, chn n vo, v thm
text (y l ba thao tc cn thit khi chn phn t).
V d di y l mt lp tr gip nh th:
using System;
using System.Xml;
167
Chng 5: XML
if (textContent != null) {
XmlNode content;
content = parent.OwnerDocument.CreateTextNode(textContent);
node.AppendChild(content);
}
return node;
}
public static XmlNode AddAttribute(string attributeName,
string textContent, XmlNode parent) {
XmlAttribute attribute;
attribute = parent.OwnerDocument.CreateAttribute(attributeName);
attribute.Value = textContent;
parent.Attributes.Append(attribute);
return attribute;
}
}
168
Chng 5: XML
// Lu ti liu.
doc.Save(Console.Out);
Console.ReadLine();
}
}
// iu chnh d liu.
product.Attributes[0].Value = "1002";
product.ChildNodes[0].ChildNodes[0].Value = "Blue China Tea Pot";
product.ChildNodes[1].ChildNodes[0].Value = "102.99";
169
Chng 5: XML
Tm mt nt khi bit tn ca n
4.
Bn
cng
th
tm
mt
phn
ti
liu
XML
bng
phng
thc
170
Chng 5: XML
trng khp). s dng phng thc ny, trc ht ly mt XmlNode tng ng vi mt phn
t, k p i tng ny thnh mt XmlElement. V d di y trnh by cch tm nt price
bn di phn t product u tin:
// Thu ly tham chiu n product u tin.
XmlNode product = doc.GetElementsByTagName("products")[0];
5.
dng
phin
bn
np
chng
ca
phng
thc
XmlDocument.
<cli:client>
171
Chng 5: XML
<cli:firstName>Sally</cli:firstName>
<cli:lastName>Sergeyeva</cli:lastName>
</cli:client>
<ord:orderItem itemNumber="3211"/>
<ord:orderItem itemNumber="1155"/>
</ord:order>
chng
trnh
di
chn
tt
cc
th
trong
http://mycompany/OrderML:
using System;
using System.Xml;
// Np ti liu.
XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
// Thu ly tt c cc th t hng.
XmlNodeList matches = doc.GetElementsByTagName("*",
"http://mycompany/OrderML");
Console.Write(node.Name + "\t");
foreach (XmlAttribute attribute in node.Attributes) {
Console.Write(attribute.Value + "
}
Console.WriteLine();
}
");
khng
gian
tn
172
Chng 5: XML
Console.ReadLine();
}
}
Attributes
*******
**********
ord:order
http://mycompany/OrderML
ord:orderItem
3211
ord:orderItem
1155
http://mycompany/ClientML
6.
Thc thi mt biu thc XPath bng phng thc SelectNodes hay
SelectSingleNode ca lp XmlDocument.
Lp XmlNode nh ngha hai phng thc dng tm kim da vo biu thc Xpath l
SelectNodes v SelectSingleNode. Hai phng thc ny thao tc trn tt c cc nt con. V
XmlDocument tha k t XmlNode nn bn c th gi XmlDocument.SelectNodes d tm ton
b mt ti liu.
Xt ti liu XML m t mt n t hng gm hai item:
<?xml version="1.0"?>
<Order id="2004-01-30.195496">
<Client id="ROS-930252034">
<Name>Remarkable Office Supplies</Name>
</Client>
<Items>
<Item id="1001">
<Name>Electronic Protractor</Name>
<Price>42.99</Price>
</Item>
<Item id="1002">
<Name>Invisible Ink</Name>
173
Chng 5: XML
<Price>200.25</Price>
</Item>
</Items>
</Order>
// Np ti liu.
XmlDocument doc = new XmlDocument();
doc.Load("orders.xml");
// Thu ly tn ca tt c cc item.
// Vic ny khng th hon tt d dng vi phng thc
// GetElementsByTagName(), v cc phn t Name c s dng
// bn trong cc phn t Item v cc phn t Client, v do
// c hai kiu ny u s c tr v.
XmlNodeList nodes = doc.SelectNodes("/Order/Items/Item/Name");
Console.ReadLine();
}
}
174
Chng 5: XML
biu thc XPath v cc v d m t cch lm vic ca chng vi ti liu XML trn. hiu
chi tit hn, bn hy tham kho ti liu W3C XPath ti [http://www.w3.org/TR/xpath].
Bng 5.1 C php ca biu thc XPath
Biu thc
M t
Kt hp nhiu ng dn.
|
..
starts-with
175
Chng 5: XML
position
count
dung text.
v gi tr.
S dng cc phng thc ny thng cn t m lnh hn l to mt XmlDocument bng tay,
nh c trnh by trong mc 5.2 v 5.3.
c XML, bn s dng phng thc Read ca XmlTextReader. Phng thc ny tin reader
n nt k tip, v tr v true. Nu khng cn nt no na, n s tr v false. Bn c th thu
ly thng tin v nt hin ti thng qua cc thuc tnh ca XmlTextReader (bao gm Name,
Value, v NodeType).
176
Chng 5: XML
nhn bit mt phn t c cc c tnh hay khng, bn phi kim tra thuc tnh
HasAttributes v ri s dng phng thc GetAttribute thu ly cc c tnh theo tn hay
theo ch s. Lp XmlTextReader ch c th truy xut mt nt ti mt thi im, v n khng
th dch chuyn ngc hay nhy sang mt nt bt k. Do , tnh linh hot ca n km hn
lp XmlDocument.
ng dng di y ghi v c mt ti liu XML bng lp XmlTextWriter v XmlTextReader.
Ti liu ny ging vi ti liu c to trong mc 5.2 v 5.3 bng lp XmlDocument.
using System;
using System.Xml;
using System.IO;
using System.Text;
// To file v writer.
FileStream fs = new FileStream("products.xml", FileMode.Create);
XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
// Khi ng ti liu.
w.WriteStartDocument();
w.WriteStartElement("products");
// Ghi mt product.
w.WriteStartElement("product");
w.WriteAttributeString("id", "1001");
w.WriteElementString("productName", "Gourmet Coffee");
w.WriteElementString("productPrice", "0.99");
w.WriteEndElement();
177
Chng 5: XML
w.WriteEndElement();
// Kt thc ti liu.
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
// c tt c cc nt.
while (r.Read()) {
if (r.NodeType == XmlNodeType.Element) {
Console.WriteLine();
Console.WriteLine("<" + r.Name + ">");
if (r.HasAttributes) {
178
Chng 5: XML
8.
Mt XML Schema (gin XML) nh ngha cc quy tc m mt kiu ti liu XML cho trc
phi tun theo. Cc quy tc ny nh ngha:
V v d di y l gi sn phm:
<xsd:element name="productPrice" type="xsd:decimal" />
179
Chng 5: XML
<xsd:element name="products">
180
Chng 5: XML
<xsd:complexType>
<xsd:sequence>
<xsd:element name="product" type="product"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
181
Chng 5: XML
public bool ValidateXml(string xmlFilename, string schemaFilename) {
// To validator.
XmlTextReader r = new XmlTextReader(xmlFilename);
XmlValidatingReader validator = new XmlValidatingReader(r);
validator.ValidationType = ValidationType.Schema;
// Np Schema vo validator.
XmlSchemaCollection schemas = new XmlSchemaCollection();
schemas.Add(null, schemaFilename);
validator.Schemas.Add(schemas);
failed = false;
try {
// c tt c d liu XML.
while (validator.Read())
{}
}catch (XmlException err) {
// iu ny xy ra khi ti liu XML c cha k t bt
// hp l hoc cc th lng nhau hay ng khng ng.
Console.WriteLine("A critical XML error has occurred.");
Console.WriteLine(err.Message);
failed = true;
}finally {
validator.Close();
}
return !failed;
}
182
Chng 5: XML
failed = true;
// Hin th li validation.
Console.WriteLine("Validation error: " + args.Message);
Console.WriteLine();
}
}
Console.ReadLine();
}
}
183
Chng 5: XML
<products>
<product id="1001">
<productName>Magic Ring</productName>
<productPrice>$342.10</productPrice>
<inStock>true</inStock>
</product>
<product id="1002">
<productName>Flying Carpet</productName>
<productPrice>982.99</productPrice>
<inStock>Yes</inStock>
</product>
</products>
</productCatalog>
Nu bn kim tra ti liu ny, bin success s c thit lp thnh false v kt xut s cho
bit cc li:
Validating ProductCatalog_Invalid.xml.
Validation error: The 'expiryDate' element has an invalid value according to its
data type. An error occurred at file:///I:/CSharp/Chuong05/05-08/
bin/Debug/ProductCatalog_Invalid.xml, (4, 30).
Validation error: The 'productPrice' element has an invalid value according to its
data type. An error occurred at file:///I:/CSharp/Chuong05/05-08/
bin/Debug/ProductCatalog_Invalid.xml, (9, 36).
Validation error: The 'inStock' element has an invalid value according to its data
type. An error occurred at file:///I:/CSharp/Chuong05/05-08/
bin/Debug/ProductCatalog_Invalid.xml, (15, 27).
Validation failed.
// Np Schema vo validator.
validator.ValidationType = ValidationType.Schema;
184
Chng 5: XML
9.
Lp XmlSerializer cho php chuyn cc i tng thnh d liu XML, v ngc li. Lp ny
thng minh to ng cc mng khi n tm thy cc phn t lng bn trong.
Cc yu cu khi s dng XmlSerializer:
185
Chng 5: XML
XmlElementcho bit tn phn t dng cho mt thuc tnh hay bin cng khai. Theo
XmlAttributecho bit mt thuc tnh hay bin cng khai s c tun t ha thnh
XmlIgnorecho bit mt thuc tnh hay bin cng khai s khng c tun t ha.
[XmlRoot("productCatalog")]
public class ProductCatalog {
[XmlElement("catalogName")]
public string CatalogName;
// S dng kiu d liu ngy (b qua phn gi).
[XmlElement(ElementName="expiryDate", DataType="date")]
public DateTime ExpiryDate;
// Cu hnh tn th.
[XmlArray("products")]
[XmlArrayItem("product")]
public Product[] Products;
public ProductCatalog() {
// Phng thc khi dng mc nh (dng khi gii tun t ha).
}
186
Chng 5: XML
this.ExpiryDate = expiryDate;
}
}
[XmlElement("productName")]
public string ProductName;
[XmlElement("productPrice")]
public decimal ProductPrice;
[XmlElement("inStock")]
public bool InStock;
[XmlAttributeAttribute(AttributeName="id", DataType="integer")]
public string Id;
public Product() {
// Phng thc khi dng mc nh (dng khi gii tun t ha).
}
187
Chng 5: XML
tun t ha i tng thnh ti liu XML, gii tun t ha ti liu thnh i tng, v ri hin
th ti liu ny:
using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
// To danh mc sn phm.
ProductCatalog catalog = new ProductCatalog("New Catalog",
DateTime.Now.AddYears(1));
Product[] products = new Product[2];
products[0] = new Product("Product 1", 42.99m);
products[1] = new Product("Product 2", 202.99m);
catalog.Products = products;
catalog = null;
188
Chng 5: XML
10.
Mc 5.9 trnh by cch s dng XmlSerializer tun t ha i tng .NET thnh XML,
v gii tun t ha XML thnh i tng .NET. Nhng nu mun s dng XML nh mt
phng cch tng tc vi cc ng dng khc, quy trnh nghip v, hay cc ng dng phiFramework, bn s cn xc nhn tnh hp l ca XML trc khi gii tun t ha n. Bn cng
s cn to mt ti liu XML Schema nh ngha cu trc v cc kiu d liu c s dng
trong nh dng XML ca bn, cc ng dng khc c th lm vic vi n. Mt gii php l
s dng tin ch dng lnh xsd.exe.
Tin ch xsd.exe i km vi .NET Framework. Nu ci t Microsoft Visual Studio .NET,
bn s tm thy n trong th mc C:\Program Files\Microsoft Visual Studio
.NET\FrameworkSDK\Bin. Tin ch xsd.exe c th to ra XML Schema t mt assembly
c bin dch. Bn ch cn cung cp tn file v cho bit lp m t ti liu XML vi i s
/t:[TypeName].
V d, xt cc lp ProductCatalog v Product c trnh by trong mc 5.9. Bn c th to
XML Schema cho mt danh mc sn phm vi dng lnh sau:
xsd 05-09.exe /t:ProductCatalog
11.
To lp t mt XML Schema
189
Chng 5: XML
12.
<xsl:template match="Order">
<html><body><p>
Order <b><xsl:value-of select="Client/@id"/></b>
for <xsl:value-of select="Client/Name"/></p>
<table border="1">
190
Chng 5: XML
<td>ID</td><td>Name</td><td>Price</td>
<xsl:apply-templates select="Items/Item"/>
</table></body></html>
</xsl:template>
<xsl:template match="Items/Item">
<tr>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="Price"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
191
Chng 5: XML
<td>Price</td>
<tr>
<td>1001</td>
<td>Electronic Protractor</td>
<td>42.99</td>
</tr>
<tr>
<td>1002</td>
<td>Invisible Ink</td>
<td>200.25</td>
</tr>
</table>
</body>
</html>
// Np XSL stylesheet.
transform.Load("orders.xslt");
192
Chng 5: XML
193
194
195
Chng 6: Windows Form
Cch khai thc trit cc iu kim, bao gm thm chng vo form lc thc thi (mc
6.1), lin kt chng vi d liu no (mc 6.2), v x l chng mt cch tng qut
(mc 6.3).
Cch lm vic vi form, bao gm theo vt chng trong mt ng dng (mc 6.4), s
dng MDI (mc 6.5), v lu tr thng tin v kch thc v v tr (mc 6.6). Bn cng s
bit cch to form a ngn ng (mc 6.13) v form khng ng vin (mc 6.14 v
6.15).
TextBox (mc 6.8), ComboBox (mc 6.9), ListView (mc 6.10), v Menu (mc 6.11 v
mc 6.12).
1.
196
Chng 6: Windows Form
2.
3.
4.
197
Chng 6: Windows Form
"Pasta", "Rice", "Fish", "Beef"};
int topPosition = 10;
foreach (string food in foods)
{
// To mt CheckBox mi.
CheckBox checkBox = new CheckBox();
checkBox.Left = 10;
checkBox.Top = topPosition;
topPosition += 30;
checkBox.Text = food;
// Thm CheckBox vo form.
panel.Controls.Add(checkBox);
}
}
}
2.
198
Chng 6: Windows Form
using System.IO;
199
Chng 6: Windows Form
3.
200
Chng 6: Windows Form
4.
.NET khng cung cp cch xc nh form no ang c hin th trong mt ng dng (ngoi
tr ng dng MDI, s c m t trong mc 6.5). Nu mun xc nh form no ang tn ti,
form no ang c hin th, hoc bn mun mt form c th gi cc phng thc v thit lp
cc thuc tnh ca mt form khc th bn cn phi gi li vt ca cc i tng form.
thc hin yu cu trn, hy to mt lp gm cc thnh vin tnh; lp ny c th theo vt
cc form ang m bng mt tp hp, hay cc thuc tnh chuyn bit. V d, lp di y c
th theo vt hai form:
public class OpenForms {
public static Form MainForm;
public static Form SecondaryForm;
}
201
Chng 6: Windows Form
5.
.NET Framework c hai li tt thun li cho vic qun l cc ng dng MDI: thuc tnh
MdiChildren v MdiParent ca lp Form. Bn c th xt thuc tnh MdiParent ca bt k form
202
Chng 6: Windows Form
get {
return label.Text;
}
}
private void cmdShowAllWindows_Click(object sender,
System.EventArgs e) {
label.Text = DateTime.Now.ToString();
}
203
Chng 6: Windows Form
}
Ch rng, khi on m duyt qua tp hp cc form con, n phi chuyn (p kiu) tham
chiu Form thnh MDIChild c th s dng thuc tnh LabelText.
6.
Windows Registry l ni l tng lu tr thng tin v v tr v kch thc cho form. C th,
bn s lu tr thng tin v mi form trong mt kha c lp (c th s dng tn ca form lm
kha). Cc kha ny s c lu tr ngay di kha ng dng.
Bn cn to mt lp chuyn bit lu v ly cc thit lp cho form. Lp FormSettingStore
c trnh by di y cung cp hai phng thc: SaveSettingsnhn vo mt form v ghi
thng tin v kch thc v v tr ca n vo Registry; v ApplySettingsnhn vo mt form
v p dng cc thit lp t Registry. ng dn ca kha v tn ca kha con c lu tr
thnh cc bin thnh vin lp.
using System;
using System.Windows.Forms;
using Microsoft.Win32;
public class FormSettingStore {
private string regPath;
private string formName;
private RegistryKey key;
204
Chng 6: Windows Form
205
Chng 6: Windows Form
7.
206
Chng 6: Windows Form
int counter = 0;
counter++;
listBox1.Items.Add("Item " + counter.ToString());
}
listBox1.TopIndex = listBox1.Items.Count - 1;
}
}
8.
207
Chng 6: Windows Form
if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)) {}
else if (e.KeyChar == decimalString &&
textBox1.Text.IndexOf(decimalString) == -1) {}
else {
e.Handled = true;
}
9.
208
Chng 6: Windows Form
C nhiu bin th khc nhau i vi iu kim c tnh nng auto-complete. i lc, iu kim
lp y cc gi tr da trn danh sch cc phn va chn (nh Microsoft Excel thng lm khi
bn nhp gi tr cho cell) hoc x xung mt danh sch cc gi tr gn ging (nh Microsoft
Internet Explorer thng lm khi bn g URL). Bn c th to mt ComboBox c tnh nng
auto-complete bng cch th l s kin KeyPress v TextChanged, hoc bng cch to mt lp
ty bin dn xut t ComboBox v chp phng thc OnKeyPress v OnTextChanged.
Trong phng thc OnKeyPress, ComboBox xc nh c thc hin mt thay th auto-complete
hay khng. Nu ngi dng nhn mt phm k t (mt mu t chng hn) th vic thay th c
th c thc hin, nhng nu ngi dng nhn mt phm iu khin (phm backspace hoc
phm mi tn chng hn) th khng thc hin g c. Phng thc OnTextChanged thc hin
vic thay th sau khi vic x l phm hon tt. Phng thc ny tm item trng khp u tin
i vi phn text hin thi, ri thm vo phn cn li ca text trng khp. Sau khi text c
thm vo, ComboBox s chn (bi en) cc k t gia im chn hin ti v im cui ca text.
Vic ny cho php ngi dng tip tc g v thay th auto-complete nu n khng phi l
nhng g ngi dng mun.
Di y l phn m cho lp AutoCompleteComboBox:
using System;
using System.Windows.Forms;
public class AutoCompleteComboBox : ComboBox {
// Bin c dng khi mt phm c bit c nhn
// (trong trng hp ny, thao tc thay th text s b b qua).
private bool controlKey = false;
// Xc nh xem phm c bit c c nhn hay khng.
protected override void OnKeyPress(
System.Windows.Forms.KeyPressEventArgs e) {
base.OnKeyPress(e);
if (e.KeyChar == (int)Keys.Escape) {
// Xa text.
this.SelectedIndex = -1;
this.Text = "";
controlKey = true;
209
Chng 6: Windows Form
}
else if (Char.IsControl(e.KeyChar)) {
controlKey = true;
}
else {
controlKey = false;
}
}
// Thc hin thay th text.
protected override void OnTextChanged(System.EventArgs e) {
base.OnTextChanged(e);
this.SelectedIndex = match;
210
Chng 6: Windows Form
211
Chng 6: Windows Form
Hnh 6.5 ComboBox c tnh nng auto-complete
Sp xp ListView theo ct bt k
10.
ListView cung cp phng thc Sort sp cc item theo th t alphabet da trn phn text
212
Chng 6: Windows Form
if (Numeric) {
try {
listYVal = Decimal.Parse(listY.SubItems[Column].Text);
}
catch {
listYVal = 0;
}
213
Chng 6: Windows Form
string listXText = listX.SubItems[Column].Text;
string listYText = listY.SubItems[Column].Text;
11.
214
Chng 6: Windows Form
Thc ra, logic dng hin th menu ng cnh hon ton ging nhau, khng quan tm n
iu kim g. Mi iu kim u h tr thuc tnh ContextMenu (c tha k t lp c s
Control), ngha l bn c th d dng vit c mt phng thc th l s kin chung hin
th cc menu ng cnh cho tt c cc iu kim.
V d, xt mt form gm mt Label, mt PictureBox, v mt TextBox. Bn c th vit mt
phng thc th l s kin MouseDown cho tt c cc i tng ny. on m di y kt ni
tt c cc s kin ny vo mt phng thc th l s kin tn l Control_MouseDown:
this.label1.MouseDown += new MouseEventHandler(this.Control_MouseDown);
this.pictureBox1.MouseDown += new
MouseEventHandler(this.Control_MouseDown);
this.textBox1.MouseDown += new MouseEventHandler(this.Control_MouseDown);
Phn m th l s kin hon ton c dng chung. N ch p kiu sender thnh Control,
kim tra menu ng cnh, v hin th n.
private void Control_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
if (e.Button == MouseButtons.Right) {
// Ly iu kim ngun.
Control ctrl = (Control)sender;
if (ctrl.ContextMenu != null) {
12.
215
Chng 6: Windows Form
Trong nhiu ng dng, menu ng cnh ca mt iu kim sao li mt phn ca menu chnh.
Tuy nhin, .NET khng cho php bn to mt i tng MenuItem cng lc nm trong nhiu
menu.
Gii php l to bn sao ca mt phn menu chnh bng phng thc CloneMenu. Phng thc
ny khng ch chp cc item MenuItem (v cc submenu), m cn ng k mi i tng
MenuItem vi cng phng thc th l s kin. Do , khi ngi dng nhp vo mt item
trong menu ng cnh (bn sao), phng thc th l s kin tng ng s c thc thi nh
th ngi dng nhp vo item trong menu chnh.
V d, xt ng dng th nghim trong hnh 6.6. Trong v d ny, menu ng cnh cho TextBox
hin th cc item ging nh trong menu File. y chnh l bn sao ca cc i tng
MenuItem, nhng khi ngi dng nhp vo mt item, phng thc th l s kin tng ng s
c thc thi.
Di y l phn m cho form to v d ny. N s sao li cc item trong menu chnh khi
form c np (ng tic l khng th thao tc vi cc item bn sao lc thit k).
using System;
using System.Windows.Forms;
using System.Drawing;
public class ContextMenuCopy : System.Windows.Forms.Form {
// (B qua phn m designer.)
private void ContextMenuCopy_Load(object sender,
System.EventArgs e) {
ContextMenu mnuContext = new ContextMenu();
216
Chng 6: Windows Form
if (e.Button == MouseButtons.Right){
217
Chng 6: Windows Form
13.
To form a ngn ng
Trc tin, thit lp thuc tnh Localizable ca form l true trong ca s Properties.
2.
Thit lp thuc tnh Language ca form l bn a bn mun nhp thng tin cho n (xem
hnh 6.7). K , cu hnh cc thuc tnh c th bn a ha ca tt c cc iu kim
trn form. Thay v lu tr nhng thay i ny trong phn m thit k form, Visual
Studio .NET to mt file resource mi lu tr d liu ca bn.
3.
218
Chng 6: Windows Form
219
Chng 6: Windows Form
Thread.CurrentThread.CurrentUICulture = new CultureInfo("vi");
Application.Run(new MultiLingualForm());
}
}
14.
220
Chng 6: Windows Form
15.
Ngi dng thng s dng thanh tiu di chuyn form. Tuy nhin, form khng c
ng vin cng khng c thanh tiu . Bn c th b vo thiu ht ny bng cch thm mt
iu kim vo form phc v cng mc ch. V d, form trong hnh 6.10 cha mt Label
h tr vic ko r. Ngi dng c th nhp vo Label ny, v ri ko r form n mt v tr
khc trn mn hnh trong lc gi chut. Khi ngi dng di chuyn chut, form t ng c
di chuyn tng ng (form c gn vi con tr chut).
2.
Khi ngi dng nhp vo Label, c s c thit lp cho bit form ang ch
ko r. Cng lc ny, v tr hin thi ca chut c ghi li. Bn cn thm logic ny
vo phng thc th l s kin Label.MouseDown.
3.
Khi ngi dng di chuyn chut trn Label, form c di chuyn tng ng v tr
ca chut trn Label vn khng thay i. Bn cn thm logic ny vo phng thc th
l s kin Label.MouseMove.
4.
221
Chng 6: Windows Form
using System;
using System.Windows.Forms;
using System.Drawing;
public class DragForm : System.Windows.Forms.Form {
if (e.Button == MouseButtons.Left) {
dragging = true;
pointClicked = new Point(e.X, e.Y);
}
else {
dragging = false;
}
}
222
Chng 6: Windows Form
pointMoveTo.Offset(-pointClicked.X, -pointClicked.Y);
// Di chuyn form.
this.Location = pointMoveTo;
}
}
private void lblDrag_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e) {
dragging = false;
}
private void cmdClose_Click(object sender, System.EventArgs e) {
this.Close();
}
}
16.
Bn cn to mt icon ng trong khay h thng (chng hn, cho bit tnh trng
ca mt tc v ang chy).
223
Chng 6: Windows Form
public class AnimatedSystemTrayIcon : System.Windows.Forms.Form {
// Np vo tm icon.
images = new Icon[8];
images[0] = new Icon("moon01.ico");
images[1] = new Icon("moon02.ico");
images[2] = new Icon("moon03.ico");
images[3] = new Icon("moon04.ico");
images[4] = new Icon("moon05.ico");
images[5] = new Icon("moon06.ico");
images[6] = new Icon("moon07.ico");
images[7] = new Icon("moon08.ico");
}
// Thay i icon.
// Phng thc th l s kin ny pht sinh mi giy mt ln.
notifyIcon.Icon = images[offset];
offset++;
if (offset > 7) offset = 0;
}
}
17.
224
Chng 6: Windows Form
C mt s cch bn c th thc hin vic xc nhn tnh hp l trong mt ng dng datrn-Windows. Mt cch tip cn l p ng cc s kin iu khin vic xc nhn tnh hp l
v khng cho ngi dng thay i focus t iu kim ny sang iu kim khc nu li xy ra.
Mt cch tip cn khc l dng c cho iu kim c li theo mt cch no ngi dng
c th nhn thy tt c li mt lt. Bn c th s dng cch tip cn ny trong .NET vi iu
kim ErrorProvider.
ErrorProvider l mt iu kim provider c bit, c s dng hin th icon li k bn
225
Chng 6: Windows Form
Regex regex;
regex = new Regex(@"\S+@\S+\.\S+");
if (errProvider.GetError(ctrl) != "")
{
errorText += "
invalidInput = true;
}
}
if (invalidInput) {
MessageBox.Show(
"The form contains the following unresolved errors:\n\n" +
errorText, "Invalid Input", MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
else {
this.Close();
}
226
Chng 6: Windows Form
}
}
18.
Bn cn s dng tnh nng ko-v-th trao i thng tin gia hai iu kim
(cng c th trong cc ca s hoc cc ng dng khc nhau)
Thao tc ko-v-th cho php ngi dng chuyn thng tin t ni ny n ni khc bng cch
nhp vo mt item v r n n mt v tr khc. Thao tc ko-v-th gm ba bc c bn sau
y:
1.
2.
3.
. Nu
.
227
Chng 6: Windows Form
txt.SelectAll();
txt.DoDragDrop(txt.Text, DragDropEffects.Copy);
}
if (e.Data.GetDataPresent(DataFormats.Text)) {
e.Effect = DragDropEffects.Copy;
}
else {
e.Effect = DragDropEffects.None;
}
}
228
Chng 6: Windows Form
19.
2.
3.
Nu ngi dng nhn phm F1 trong khi mt iu kim no ang nhn focus, file tr gip
s c m mt cch t ng v ch lin kt vi iu kim ny s c hin th trong ca
229
Chng 6: Windows Form
s tr gip. Nu ngi dng nhn phm F1 trong khi ang trn mt iu kim khng c ch
tr gip (v d, GroupBox hoc Panel), cc thit lp tr gip cho iu kim nm bn trong
s c s dng. Nu khng c iu kim no nm bn trong hoc iu kim nm bn trong
khng c thit lp tr gip no, cc thit lp tr gip cho form s c s dng. Nu cc thit
lp tr gip cho form cng khng c, HelpProvider s m bt k file tr gip no c nh
ngha mc d n. Bn cng c th s dng cc phng thc ca HelpProvider thit lp
hoc sa i nh x tr gip cm-ng-cnh lc thc thi.
20.
Nu ang s dng .NET Framework phin bn 1.0, bn khng c s tr gip ca phng thc
Application.EnableVisualStyles. Tuy nhin, bn vn c th s dng phong cch ny bng
cch to mt file manifest cho ng dng ca bn. File manifest ny (ch l mt file vn bn
thng thng vi ni dung XML) s bo vi Windows XP rng ng dng ca bn yu cu
phin bn mi ca file comctl32.dll (file ny c trn tt c cc my tnh Windows XP).
Windows XP s c v p dng cc thit lp t file manifest mt cch t ng, nu file
manifest c t trong th mc ng dng v c tn trng vi tn file thc thi ng dng cng
230
Chng 6: Windows Form
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
Phong cch Windows XP s khng xut hin trong mi trng thit k ca Visual Studio
.NET. Do , th nghim k thut ny, bn cn phi chy ng dng. Tuy nhin, bn vn c
th lm cho mi trng thit k ca Visual Studio .NET hin th theo phong cch Windows XP
bng cch thm file devenv.exe.manifest vo th mc \Program Files\Microsoft Visual Studio
.NET 2003\Common7\IDE.
231
Chng 6: Windows Form
Thay i c ca form
21.
232
Chng 6: Windows Form
Nu ch mun trong sut nhng vng no trn form, bn hy s dng thuc tnh
TransparencyKey. Bn nh ngha thuc tnh ny l mt mu no . Nu bt k phn no ca
form trng vi mu , n s tr nn trong sut. Hnh 6.15 trnh by mt form vi c
80%. Chng ta t mt iu kim Panel ln form v thit lp mu nn ca Panel l mu m ta
nh ngha trong thuc tnh TransparencyKey ca form. Nh th, form s trong sut trn
vng thuc Panel.
233
Chng 6: Windows Form
6.15. Trn y l mt cch to form c hnh dng bt thng, mt cch khc s c trnh
by trong mc 8.3.
234
235
236
Chng 7: ASP.NET v Web Form
To ng iu kim web (mc 7.11), hnh nh (mc 7.12), v iu kim ngi dng
(mc 7.13).
1.
237
Chng 7: ASP.NET v Web Form
Cch d nht chuyn ngi dng t mt trang ny n mt trang khc l s dng phng
thc HttpResponse.Redirect v cp mt URL mi. Bn c th truy xut i tng
HttpResponse hin ti thng qua i tng HttpContext hoc s dng thuc tnh Reponse ca
i tng Page hoc Control. Phng thc th l s kin di y (p ng cho mt c nhp
chut vo Button) s chuyn ngi dng n mt trang ASP.NET mi:
private void cmdRedirect_Click(object sender, System.EventArgs e) {
Response.Redirect("newpage.aspx");
}
Phng thc Redirect c th lm vic vi URL tng i (ch n nhng ti nguyn trong
cng th mc o), v vi URL y . URL c th ch n trang ASP.NET khc, kiu ti liu
khc (nh trang HTML hoc hnh nh), v web-server khc.
Phng thc Redirect gi ch th chuyn hng n trnh duyt. K , trnh duyt s yu cu
trang mi. Kt qu l trnh duyt phi thc hin hai chuyn n web-server, v web-server
phi x l thm mt yu cu na. Mt ty chn hiu qu hn l s dng phng thc
HttpServerUtility.Transfer, phng thc ny s chuyn s thc thi n mt trang ASP.NET
khc trn cng web-server. V d:
private void cmdRedirect_Click(object sender, System.EventArgs e) {
Server.Transfer("newpage.aspx");
}
Phng thc Transfer khng cn thm mt chuyn n client, nhng n s khng lm vic
nu bn cn chuyn s thc thi n mt server khc hoc mt kiu ti nguyn khc vi Web
Form (bao gm trang ASP c in).
2.
S dng view state (trng thi nhn), query string argument (i s chui truy
vn), session state (trng thi phin lm vic), hoc cookie, ty thuc vo nhu cu
ca bn.
ASP.NET l mt m hnh lp trnh phi trng thi (stateless programming model). Mi khi mt
postback c pht sinh, m s np vo b nh, thc thi, v c gii phng khi b nh.
Nu mun gi li vt ca thng tin sau khi m hon tt vic x l, bn phi s dng cc
kiu qun l trng thi (state management).
238
Chng 7: ASP.NET v Web Form
ASP.NET cung cp nhiu cch lu tr thng tin, hay trng thi, gia cc yu cu (request).
Kiu trng thi m bn s dng cho bit: thng tin s sng bao lu, s c lu tr u, v
s c bo mt nh th no. Bng 7.1 lit k nhng ty chn trng thi khc nhau c cp
bi ASP.NET. Bng ny khng cha i tng Cache, i tng ny cung cp kho lu tr tm
thi v s c m t trong mc 7.5.
C php cho cc phng php lu tr d liu l nh nhau. D liu c lu tr trong mt i
tng tp hp v c nh ch mc bng mt tn chui.
Bng 7.1 Cc kiu qun l trng thi
Kiu
trng thi
D liu
c php
View state
Tt c cc
kiu d liu
kh-tunt-ha
.NET.
V tr lu tr
Bo mt
Mt trng n
trong trang web
hin hnh.
B mt khi ngi
dng chuyn sang
mt trang khc.
Mc nh l khng
an ton. Tuy nhin,
bn c th s dng
cc ch th trang
thc hin mt ha
v bm ngn d
liu b ph.
Ngi dng c th
nhn thy c v
chnh sa d dng.
Query
string
D liu
chui.
Chui URL ca
trnh duyt.
B mt khi ngi
dng nhp mt URL
mi hoc ng trnh
duyt. Tuy nhin, n
c th c lu tr
trong mt
bookmark.
Session
state
Tt c cc
kiu d liu
kh-tunt-ha
.NET.
B nh server
(c th c cu
hnh cho mt
tin trnh hoc
c s d liu
bn ngoi).
Ht hiu lc sau mt
khong thi gian
c nh ngha
trc (thng l 20
pht, nhng khong
thi gian ny c th
thay i c).
An ton v d liu
khng bao gi c
chuyn cho client.
D liu
chui.
My tnh client
(trong b nh
hoc mt file
text, ty thuc
vo cc thit lp
cho thi gian
sng ca n).
c thit lp bi
lp trnh vin. C
th c s dng
trong nhiu trang v
c th vn cn gia
cc ln ving thm.
Khng an ton, v
c th b ngi
dng chnh sa.
Cookie
239
Chng 7: ASP.NET v Web Form
Applicatio
n state
Tt c cc
kiu d liu
kh-tunt-ha
.NET.
B nh server.
An ton v d liu
khng bao gi c
chuyn cho client.
Hnh 7.1 trnh by mt trang web th nghim cc kiu qun l trng thi khc nhau. Khi
ngi dng nhp vo nt Store Data, mt i tng System.DateTime s c to ra v c
lu tr trong view state, session state, v mt cookie ty bin. Khi ngi dng nhp vo nt
Get Data, thng tin ny s c ly ra v hin th. Cui cng, nt Clear Data s xa thng tin
ny trong tt c cc trng thi.
240
Chng 7: ASP.NET v Web Form
// To i tng th nghim.
DateTime now = DateTime.Now;
// To cookie.
HttpCookie cookie = new HttpCookie("07-02");
// Gn cookie vo p ng.
// N s c cung cp vi tt c cc yu cu n
// site ny cho n khi ht hiu lc.
Response.Cookies.Add(cookie);
241
Chng 7: ASP.NET v Web Form
}
}
lblData.Text = "";
}else {
}else {
242
Chng 7: ASP.NET v Web Form
cookieData + "<br>";
}else {
ViewState["TestData"] = null;
Session["TestData"] = null;
// (Bn cng c th s dng Session.Abandon xa tt c
//
Mt kiu trng thi m trang ny khng th hin l query string (chui truy vn). Query string
i hi mt chuyn hng trang, l tng cho vic chuyn thng tin t trang ny n trang
khc. thit lp thng tin, bn phi chuyn hng ngi dng n mt trang mi v thm
cc i s query string vo cui URL. Bn c th s dng phng thc
HttpServerUtility.UrlEncode v UrlDecode bo m d liu chui l URL hp l.
DateTime now = DateTime.Now;
string data = Server.UrlEncode(now.ToString());
Response.Redirect("newPage.aspx?TestData=" + data);
243
Chng 7: ASP.NET v Web Form
lblData.Text += "<b>Found query string data:</b> " + data + "<br>";
}
3.
244
Chng 7: ASP.NET v Web Form
}
}
// Hin th gi tr.
lblCurrent.Text = memberValue.ToString();
}
4.
... />
245
Chng 7: ASP.NET v Web Form
Trong trng hp ny, bn s dng hm JavaScript alert (ni ti) v s kin JavaScript
onBlur (pht sinh khi mt iu kim mt focus). Hu ht cc phn t HTML u h tr cc s
kin sau y:
246
Chng 7: ASP.NET v Web Form
";}" +
"</script>";
string unhighlightScript =
"<script language=JavaScript> " +
"function UnHighlightCell(cell) {" +
"cell.bgColor = '#FFFFFF';" +
"}" +
"</script>";
// Chn hm JavaScript vo trang (n s xut hin
// ngay sau th <form runat=server>).
// Ch rng mi khi kch bn c kt hp vi mt tn chui.
// iu ny cho php nhiu iu kim ng k cng khi kch bn,
// trong khi vn bo m n s c tr v ch mt ln
// trong trang cui cng.
if (!this.IsClientScriptBlockRegistered("Highlight")) {
Page.RegisterClientScriptBlock("Highlight", highlightScript);
}
if (!this.IsClientScriptBlockRegistered("UnHighlight")) {
Page.RegisterClientScriptBlock("UnHighlight",
unhighlightScript);
}
// Thit lp c tnh cho mi trong bng.
foreach (TableRow row in Table1.Rows) {
foreach (TableCell cell in row.Cells) {
cell.Attributes.Add("onMouseOver", "HighlightCell(this);");
cell.Attributes.Add("onMouseOut", "UnHighlightCell(this);");
}
}
}
247
Chng 7: ASP.NET v Web Form
5.
248
Chng 7: ASP.NET v Web Form
V y l on m (trong phng thc th l s kin Page.Load) dng hin th ca s popup mt cch t ng khi trang c hin th:
string popupScript = "<script language='javascript'>" +
"window.open('PopUp.aspx', " +
"'CustomPopUp', " +
"'width=200, height=200, menubar=yes, resizable=no')" +
"</script>";
249
Chng 7: ASP.NET v Web Form
Page.RegisterStartupScript("PopupScript", popupScript);
6.
iu kim web ASP.NET khng cung cp cch thit lp focus cho iu kim, m ch cung
cp thuc tnh TabIndex thit lp th t tab. Nhng thuc tnh ny ch p dng cho
Microsoft Internet Explorer v khng th c s dng thit lp focus cho iu kim do
bn chn. vt qua hn ch ny, bn cn s dng n m JavaScript.
Phng thc di y s thc hin cng vic ny. N nhn vo mt tham chiu n bt k i
tng iu kim no, thu ly ClientID kt giao (m JavaScript phi s dng ID ny tm
n iu kim), ri to dng v ng k kch bn thit lp focus.
private void SetFocus(Control ctrl) {
if (!this.IsPostBack) {
// Chuyn focus n mt TextBox c th.
SetFocus(TextBox1);
}
}
250
Chng 7: ASP.NET v Web Form
7.
V ASP.NET thc thi trn server nn khng c cch no truy xut cc ti nguyn trn my
client, bao gm file. Tuy nhin, bn c th s dng iu kim System.Web.UI.
HtmlControls.HtmlInputFile cho php ngi dng upload mt file. iu kim ny tr v
phn t HTML <input type="file">, hin th mt nt Browse v mt hp cha tn file.
Ngi dng nhp vo nt Browse v chn mt file. Bc ny din ra mt cch t ng v
khng i hi bt k on m ty bin no. Sau , ngi dng phi nhp vo mt nt khc
(bn phi to nt ny) bt u qu trnh upload.
to mt trang cho php upload file, bn cn thc hin cc bc sau y:
251
Chng 7: ASP.NET v Web Form
private void cmdUpload_Click(object sender, System.EventArgs e) {
if (FileInput.PostedFile.FileName == "") {
// Khng file no c ch nh.
lblInfo.Text = "No file specified.";
} else {
try {
if (FileInput.PostedFile.ContentLength > 1048576) {
// Cm cc file ln hn 1 megabyte.
lblInfo.Text = "File is too large.";
}else {
// File c lu vn gi li tn file gc ca n.
string fileName =
Path.GetFileName(FileInput.PostedFile.FileName);
// Tin trnh ASP.NET phi c quyn i vi
// v tr n thc hin lu file, nu khng
// ngoi l "access denied" s xy ra.
FileInput.PostedFile.SaveAs(fileName);
lblInfo.Text = "File " + fileName + " uploaded.";
}
}catch (Exception err) {
lblInfo.Text = err.Message;
}
}
}
}
252
Chng 7: ASP.NET v Web Form
253
Chng 7: ASP.NET v Web Form
8.
IIS thc hin vic xc thc ngi dng. Nu Anonymous access c kch hot, IIS s
t ng ng nhp ngi dng vi ti khon nc danh (IUSR_[ServerName]). Nu
khng, n s yu cu thng tin xc thc ng nhp ngi dng vi mt ti khon
Windows khc.
2.
3.
254
Chng 7: ASP.NET v Web Form
Bn c th kch hot nhiu phng php xc thc, trong trng hp ny client s s dng
phng php c h tr mnh nht. Nu Anonymous access c kch hot th n lun c
s dng. Cc phng php xc thc khc nhau c m t trong bng 7.2.
Bng 7.2 Cc kiu xc thc
255
Chng 7: ASP.NET v Web Form
Ch
M t
Anonymous
Basic
Digest
Integrated
256
Chng 7: ASP.NET v Web Form
</authorization>
</system.web>
</configuration>
ASP.NET xt qua cc quy tc phn quyn theo th t chng xut hin v dng khi tm thy
mt trng khp. Trong v d ny, ngi dng trong cc nhm Guest hoc Associate s t
ng b t chi. Ngi dng nnbphuong81 s c php (tr khi anh ta l thnh vin ca mt
trong hai nhm b cm trn). Tt c cc ngi dng khc s b t chi. Trong trng hp
ny, y l cc nhm v ti khon ngi dng cc b. Nu mun ni n mt ti khon min,
bn hy s dng c php [DomainName]\[UserName].
trong v d ny, file Web.config khng cha phn <authentication>. l v phn ny
c cu hnh trong file Web.config thuc th mc ng dng Web. Cc th mc con c th
thit lp cc quy tc phn quyn ca chng, nhng chng khng th thay i ch xc thc.
Mt ty chn khc khng cho truy xut n cc trang c th l s dng c tnh <location>:
<configuration>
<system.web>
<!-- B qua cc thit lp khc. -->
</system.web>
<location path="SecurePage.aspx">
<system.web>
<authorization>
<deny roles="Guest" />
</authorization>
</system.web>
</location>
</configuration>
Cui cng, bn c th vit logic xc thc bng cch kim tra identity ca ngi dng trong
phn m trang web (s dng thuc tnh Page.User, thuc tnh ny cung cp i tng
WindowsPrincipal).
Bn
c
th
ly
tn
ngi
dng
t
thuc
tnh
WindowsPrincipal.Identity.Name, v bn c th kim tra vai tr thnh vin trong nhm bng
phng thc WindowsPrincipal.IsInRole. Phn m cho trang web di y s trnh by cc
k thut ny:
using System;
using System.Web;
using System.Web.UI.WebControls;
257
Chng 7: ASP.NET v Web Form
using System.Web.Security.Principal;
9.
Forms authentication l mt m hnh bo mt linh hot, cho php ngn ngi dng cha c
xc thc truy xut vo trang no . Bn cn vit m thc hin xc thc, v ASP.NET cp
258
Chng 7: ASP.NET v Web Form
mt cookie cho ngi dng c xc thc. Ngi dng khng c cookie s b chuyn
hng sang trang ng nhp khi truy xut mt trang c bo v.
hin thc Forms authentication, bn phi thc hin cc bc sau y:
S dng cc thit lp trong file Web.config hn ch ngi dng nc danh truy xut
vo mt trang hoc th mc c th.
K n, bn cn thm quy tc phn quyn t chi ngi dng nc danh. Cch d nht
bo ton cc trang l to mt th mc con cng vi file Web.config ca n. File Web.config
ny s t chi vic truy xut ca cc ngi dng nc danh, nh c trnh by di y:
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
<!-- B qua cc thit lp khc. -->
</system.web>
</configuration>
259
Chng 7: ASP.NET v Web Form
Bn cng c th t chi cc ngi dng c th bng cch nhp danh sch tn ngi dng
(phn cch bng du phy) thay vo k t ? (? ngha l tt c cc ngi dng nc danh).
K tip, bn cn to trang ng nhp. Trang ng nhp c th xc thc ngi dng bng
password c vit cng (ph hp cho cc th nghim n gin), c s d liu pha server,
hoc bt k kiu logic xc thc ty bin no. Mt khi ngi dng c xc thc thnh
cng, bn cn gi phng thc tnh FormsAuthentication.RedirectFromLoginPage. Phng
thc ny s thit lp authentication cookie v chuyn hng ngi dng n trang c yu
cu lc u.
Di y l trang ng nhp s b, ch kim tra mt password c th khi ngi dng nhp
vo nt Login:
using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.Security;
public class LoginPage : System.Web.UI.Page {
protected System.Web.UI.WebControls.Label lblStatus;
protected System.Web.UI.WebControls.Button cmdLogin;
protected System.Web.UI.WebControls.TextBox txtPassword;
protected System.Web.UI.WebControls.TextBox txtName;
260
Chng 7: ASP.NET v Web Form
}else {
lblStatus.Text = "Try again.";
}
}
}
10.
261
Chng 7: ASP.NET v Web Form
262
Chng 7: ASP.NET v Web Form
if (!Page.IsValid) {
lblCustomSummary.Text = "";
foreach (BaseValidator validator in this.Validators) {
if (!validator.IsValid) {
lblCustomSummary.Text +=
"The page contains the following error: <b>" +
validator.ErrorMessage + "</b>.<br>" +
"The invalid input is: <b>" +
invalidControl.Text + "</b>." + "<br><br>";
}
}
}else {
lblCustomSummary.Text = "Validation succeeded.";
}
}
}
263
Chng 7: ASP.NET v Web Form
11.
K thut thm iu kim web vo trang web tng t nh k thut thm iu kim Windows
vo form, nhng c mt vi im khc, bao gm:
264
Chng 7: ASP.NET v Web Form
nhp (input) s dng view state, thng tin view state s c tr li cho iu kim sau khi s
kin Page.Load pht sinh. Tng t, v s kin Page.Load lun pht sinh trc khi s kin no
khc din ra, bn c th ti to mt iu kim dng nn cc s kin pha server, v phn m
th l s kin ca n s din ra ngay sau s kin Page.Load.
V d di y (xem hnh 7.9) s to ng ba iu kim (hai Button v mt TextBox) v nh
v chng bng iu kim trc kin (ng vai tr l du phn cch). Hai Button c kt ni
vi cc phng thc th l s kin ring bit. TextBox c cp mt nh danh duy nht
phn text ca n c th c thu ly sau ny (trong p ng cho c nhp chut vo Button).
265
Chng 7: ASP.NET v Web Form
private void Page_Load(object sender, System.EventArgs e) {
// To Button.
Button dynamicButton = new Button();
dynamicButton.Text = "Dynamic Button A";
// To Button th hai.
dynamicButton = new Button();
dynamicButton.Text = "Dynamic Button B";
dynamicButton.Click += new EventHandler(cmdDynamicB_Click);
pnl.Controls.Add(dynamicButton);
// To TextBox.
TextBox dynamicText = new TextBox();
pnl.Controls.Add(dynamicText);
// Gn ID cho TextBox.
dynamicText.ID = "DynamicText";
}
266
Chng 7: ASP.NET v Web Form
12.
Tr v ng mt bc hnh
To dng bc hnh bng GDI+ v mt i tng System.Drawing.Bitmap trongb-nh. K , bn c th ghi n ra dng kt xut (output stream), hoc lu n
vo a cng ca server v hin th n vi iu kim web Image.
267
Chng 7: ASP.NET v Web Form
rng ch c phn text ca banner l do ngi dng cung cp (thng qua chui truy vn).
Font, mu, v kch thc c vit m cng (mc d chng c th c thit lp d dng da
vo cc i s chui truy vn khc hoc da vo file Web.config).
on m di y s trnh by cch tip cn ny:
using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Drawing2D;
268
Chng 7: ASP.NET v Web Form
Response.Redirect(Request.Url + "?image=" +
Server.UrlEncode("This is a test image"));
}
else {
text = Server.UrlDecode(Request.QueryString["image"]);
}
// V mt hnh ch nht.
graphics.FillRectangle(new SolidBrush(Color.Olive), 5, 5,
width - 10, height - 10);
// V text.
graphics.DrawString(text, fontBanner,
new SolidBrush(Color.LightYellow),
new Rectangle(0, 0, width, height), stringFormat);
269
Chng 7: ASP.NET v Web Form
graphics.Dispose();
bitmap.Dispose();
}
}
270
Chng 7: ASP.NET v Web Form
// Thit lp tn file.
// Gi s chui truy vn cha cc k t hp l cho tn file.
string fileName = Request.QueryString["image"] + ".gif";
Bitmap bitmap = null;
// Kim tra bc hnh vi phn text ny tn ti hay cha.
if (File.Exists(fileName)) {
// Np bc hnh hin c.
try {
bitmap = new Bitmap(fileName);
}catch {
bitmap = GenerateBanner();
}
}
else {
bitmap = GenerateBanner();
// Lu bc hnh.
bitmap.Save(fileName,
System.Drawing.Imaging.ImageFormat.Gif);
}
// Hin th bc hnh.
imageControl.ImageUrl = fileName;
}
}
13.
271
Chng 7: ASP.NET v Web Form
iu kim ngi dng l cc nhm iu kim c lp. Nh Web Form, iu kim ngi dng
bao gm phn layout nh ngha cc iu kim bn trong (file .ascx) v phn code-behind
cng vi logic th l s kin (file .cs). iu kim ngi dng cho php bn s dng li cc
phn t giao din thng thng trn nhiu trang v to dng cc giao din phc tp t cc
khi nh hn. Mt c im hu ch ca iu kim ngi dng l chng c th c np bng
m lnh, iu ny cho php bn to mt giao din cu hnh cao do bn thit k ng y theo
ngi dng. Bn ch cn np iu kim, cu hnh cc thuc tnh ca n, v ri thm n vo
mt iu kim container.
V d, xt trang web to ng cc bc hnh trong mc 7.12. Mt gii php theo cch hng
i tng hn c th hin thc c l to mt iu kim ngi dng ty bin ng gi bc
hnh c-to-ng. iu kim ngi dng ny cho php trang thit lp text, font, mu...
thng qua cc thuc tnh khc nhau.
using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Drawing2D;
public class DynamicGraphicControl : System.Web.UI.UserControl {
// (B qua phn m designer.)
private string imageText = "";
public string ImageText {
get {
return imageText;
}
set {
imageText = value;
}
}
private Font textFont;
public Font TextFont {
get {
return textFont;
}
set {
textFont = value;
}
272
Chng 7: ASP.NET v Web Form
273
Chng 7: ASP.NET v Web Form
return borderColor;
}
set {
borderColor = value;
}
}
if (ImageText == "")
return;
// V mt hnh ch nht.
graphics.FillRectangle(new SolidBrush(BackColor), 5, 5,
ImageSize.Width - 10, ImageSize.Height - 10);
// V text.
graphics.DrawString(ImageText, TextFont,
new SolidBrush(ForeColor),
new Rectangle(0, 0, ImageSize.Width, ImageSize.Height),
stringFormat);
274
Chng 7: ASP.NET v Web Form
graphics.Dispose();
bitmap.Dispose();
}
}
Web Form np iu kim ngi dng ny trong phng thc th l s kin Page.Load. iu
kim ngi dng c t trong mt Panel. Phng thc LoadControl tr v mt i tng
Control, v n c p kiu thnh lp iu kim ngi dng thch hp.
using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Drawing;
public class DynamicControlTest : System.Web.UI.Page {
protected System.Web.UI.WebControls.Panel pnl;
// (B qua phn m designer.)
private void Page_Load(object sender, System.EventArgs e) {
// Np iu kim.
DynamicGraphicControl ctrl;
ctrl = (DynamicGraphicControl)
Page.LoadControl("DynamicGraphicControl.ascx");
// Cu hnh cc thuc tnh ca iu kim.
ctrl.ImageText = "This is a new banner test";
ctrl.ImageSize = new Size(300, 200);
ctrl.TextFont = new Font("Verdana", 24, FontStyle.Bold);
ctrl.BackColor = Color.Olive;
ctrl.ForeColor = Color.LightYellow;
ctrl.BorderColor = Color.OrangeRed;
275
Chng 7: ASP.NET v Web Form
Trong Visual Studio .NET, lp iu kim ngi dng lun c hiu lc v cc lp c bin
dch thnh .dll. Tuy nhin, nu iu kim ngi dng khng phi mt b phn ca d n, bn
s khng c lp iu kim ngi dng v bn s khng th truy xut bt k thuc tnh hay
phng thc no ca iu kim ngi dng. khc phc vn ny, bn c th to mt lp
c s hoc mt giao din nh ngha cc chc nng c bn c th truy xut vo bt k iu
kim ngi dng ty bin no.
14.
Vic s dng caching va phi c th gim bt hiu ng tht c chai (chng hn, truy xut c
s d liu) v tng ton b hiu nng ca mt website. Caching c hiu qu ln trong mt site
c lu lng cao. V d, xt xem iu g s xy ra khi bn lu gi mt trang hin th kt qu
ca mt truy vn c s d liu. Nu bn lu gi trang ny trong 1 pht, v trang ny nhn
c 10 yu cu trong khong thi gian , bn s gim c 10 ln chi ph truy xut c s
d liu.
Bn c th hin thc caching mt cch d dngch cn thm ch th OutputCache vo trang
web. Ch th ny phi c thm vo file .aspx, ch khng phi file .cs. V d di y lu
gi mt trang trong 20 giy:
<%@ OutputCache Duration="20" VaryByParam="None" %>
276
Chng 7: ASP.NET v Web Form
Trang ca bn cn thc hin mt hnh ng khc (nh ghi ra file nht k, nhp thng
tin vo c s d liu, hoc thay i mt bin ng dng). Mt trang c lu gi s s
dng li ton b HTML c tr v; phn m cho trang b b qua.
15.
Ht hiu lc trt (sliding expiration) g b cc i tng sau mt khong thi gian khng
dng n. Trong trng hp ny, mi khi i tng c truy xut, thi gian sng ca n s
c reset. Ht hiu lc trt lm vic tt khi bn c cc thng tin lun c hiu lc nhng
lun khng c s dng (nh d liu thuc v qu kh). Thng tin ny khng cn c lm
ti, nhng khng nn gi n trong cache nu n khng c s dng.
277
Chng 7: ASP.NET v Web Form
// Lu gi ObjectToCache nu n c s dng t nht
// mt ln mi 10 pht (vi kha l "Catalog").
// DateTime.MaxValue cho bit "khng s dng absolute expiration".
Cache.Insert("Catalog", ObjectToCache, null,
DateTime.MaxValue, TimeSpan.FromMinutes(10));
Bn c th ly cc item t cache bng tn kha. Tuy nhin, bn phi lun kim tra trc xem
item c tn ti hay khng v ri p n thnh kiu nh mong mun.
Khi thm cc i tng vo cache, cch tt nht l to mt hm c lp c th ti to i
tng khi cn. V d, nu ang lu gi mt DataSet, bn cn to mt hm kim tra cache v
ch truy vn li c s d liu khi khng tm thy DataSet. iu ny cho php bn trnh i
phn x l tn nhiu thi gian nhttruy vn c s d liutrong khi vn cho php m lnh
ca bn thay i hin th (chng hn, ngi dng yu cu sp th t) hoc thc hin cc hnh
ng khc.
V d di y s hin th mt bng cha thng tin v khch hng c ly t mt DataSet.
Phn then cht l lp CustomerDatabase, ng gi cc chc nng cn thit d liu vo
DataSet v qun l cache. V lp ny khng tha k t Page nn n cn s dng thuc tnh
tnh HttpContext.Current ly tham chiu n i tng Cache.
using System;
using System.Data;
using System.Web;
using System.Configuration;
using System.Diagnostics;
using System.Web.Caching;
using System.Data.SqlClient;
public CustomerDatabase() {
278
Chng 7: ASP.NET v Web Form
DataSet customersDS;
// Ly DataSet t c s d liu.
customersDS = GetCustomersFromDatabase();
}else {
// Ly item.
customersDS = (DataSet)cache["Customers"];
}
// Tr v DataSet.
return customersDS;
}
// To DataSet.
DataSet customersDS = new DataSet();
279
Chng 7: ASP.NET v Web Form
// d liu vo DataSet.
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
try {
con.Open();
adapter.Fill(customersDS, "Customers");
}catch {
customersDS = null;
}
finally {
con.Close();
}
280
Chng 7: ASP.NET v Web Form
16.
Li Unable to start debugging on the Web server cho bit rng Visual Studio .NET c th
bin dch ng dng Web nhng khng th thc thi n ch g ri (debug mode). Vn
ny pht sinh v nhiu l do:
Ngi dng ang chy Visual Studio .NET khng phi l thnh vin ca nhm
Debugger Users trn web-server.
Ngi dng ang chy Visual Studio .NET khng c quyn (permission) g ri tin
trnh ASP.NET. V d, nu tin trnh ASP.NET ang chy di ti khon h thng cc
b, ngi dng phi c c quyn Administrator th mi c th g ri n.
ng dng Web khng c file Web.config, hoc file Web.config khng kch hot g ri.
Bn ang chy Visual Studio .NET, v bn khng kch hot Integrated Windows
authentication cho th mc o.
281
Chng 7: ASP.NET v Web Form
Nu ci t IIS sau khi ci t Visual Studio .NET hoc .NET Framework, bn cn phi "sa"
.NET Framework bng a ci t gc. bt u qu trnh ny, bn hy g lnh sau y vo
ca s dng lnh (hoc ca s Run), nu ang dng phin bn DVD ca Visual Studio .NET:
<DVD Drive>:\wcu\dotNetFramework\dotnetfx.exe /t:c:\temp
/c:"msiexec.exe /fvecms c:\temp\netfx.msi"
Nu ang dng phin bn CD ca Visual Studio .NET, bn hy s dng dng lnh sau y
cng vi a Windows Component Update:
<CD Drive>:\dotNetFramework\dotnetfx.exe /t:c:\temp
/c:"msiexec.exe /fvecms c:\temp\netfx.msi"
</system.web>
</configuration>
282
Chng 7: ASP.NET v Web Form
Mt vn khc v cu hnh IIS c th xy ra trong Visual Studio .NET l khng thc hin
xc thc. Visual Studio .NET truy xut web-server cc b bng Integrated Windows
authentication, ngay c khi bn kch hot Anonymous authentication cho th mc o. iu
ny ngha l th mc o ca bn phi cho php c Anonymous authentication v Integrated
Windows authentication. cho php c hai phng php ny, bn cn thc hin cc bc
sau y:
1.
2.
3.
4.
5.
Nhp OK.
283
Chng 7: ASP.NET v Web Form
284
Chng 7: ASP.NET v Web Form
17.
M ASP.NET khng chy di ti khon ngi dng c IIS xc thc hoc ti khon nc
danh IUSR_[ServerName]. Mt phn l do l ti khon ny thng khng c c quyn
i vi m ASP.NET (c th to v xa cc file tm qun l tin trnh bin dch trang web).
Theo mc nh, cc trang ASP.NET chy bng ti khon ASPNET cc b, ti khon ny c
mt tp cc c quyn b gii hn. Nu cn m ASP.NET ca bn thc hin iu g khng
c php theo mc nh i vi ti khon cc b (chng hn, ghi ra a cng trn server),
bn c th cp cc quyn ny cho tin trnh ASPNET. Bn cng c th thay i thit lp ny
bng cch m file machine.config (nm trong th mc <Windows directory>\Microsoft.NET\
Framework\<version>\CONFIG\) v chnh sa th <processModel>.
285
Chng 7: ASP.NET v Web Form
</system.web>
</configuration>
Nh rng, i vi kiu gi nhn ny, ti khon ngi dng s yu cu truy xut c/ghi n
th mc Temporary ASP.NET Files (ni lu tr cc file ASP.NET c bin dchc
nh v ti \[WindowsDirectory]\Microsoft.NET\Framework\ [version]\Temporary ASP.NET
Files).
Cui cng, bn cng c th s dng k thut gi nhn bng m lnh (vn ny s c m
t chi tit trong mc 13.15). Tuy vy, v d di y s lm vic cng vi Windows
authentication. Nu IIS xc thc ngi dng (c m t trong mc 7.8), identity s
c tha nhn khi s dng phng thc WindowsIdentity.Impersonate. s dng on
m ny, bn phi nhp khng gian tn System.Security.Principal.
if (User.GetType() == typeof(WindowsPrincipal)) {
WindowsIdentity id = (WindowsIdentity)User.Identity;
WindowsImpersonationContext impersonate = id.Impersonate();
// Tr li ID.
impersonate.Undo();
} else {
286
Chng 7: ASP.NET v Web Form
287
288
289
Chng 8: ha, a phng tin, v in n
Chi cc file audio v video (bao gm WAV, MP3, v MPEG) bng th vin Quartz c
trong Windows Media Player (mc 8.9, 8.10, v 8.11).
Tm tt c cc font c ci t
1.
290
Chng 8: ha, a phng tin, v in n
// To tp hp font.
InstalledFontCollection fontFamilies =
new InstalledFontCollection();
// Duyt qua tt c cc font.
int offset = 10;
foreach (FontFamily family in fontFamilies.Families) {
try {
// To mt Label hin th text (vit font ny).
Label fontLabel = new Label();
fontLabel.Text = family.Name;
fontLabel.Font = new Font(family, 14);
fontLabel.Left = 10;
fontLabel.Width = pnlFonts.Width;
fontLabel.Top = offset;
// Thm Label vo Panel cun c.
pnlFonts.Controls.Add(fontLabel);
offset += 30;
}catch {
// Li s xy ra nu font c chn khng
// h tr normal style (mc nh c s dng khi
// to i tng Font). Vn ny c th
// c b qua m khng sao c.
}
}
}
}
291
Chng 8: ha, a phng tin, v in n
2.
292
Chng 8: ha, a phng tin, v in n
// nh ngha cc bt v.
Brush highlightBrush = Brushes.HotPink;
Brush defaultBrush = Brushes.LightBlue;
// To cc shape.
path = new GraphicsPath();
path.AddEllipse(10, 10, 100, 60);
path.AddCurve(new Point[] {new Point(50, 50),
new Point(10,33), new Point(80,43)});
path.AddLine(50, 120, 250, 80);
path.AddLine(120, 40, 110, 50);
path.CloseFigure();
293
Chng 8: ha, a phng tin, v in n
rectangle = new Rectangle(100, 170, 220, 120);
}
Graphics g = e.Graphics;
g.FillPath(highlightBrush, path);
g.FillRectangle(defaultBrush, rectangle);
}else if (inRectangle) {
g.FillRectangle(highlightBrush, rectangle);
g.FillPath(defaultBrush, path);
}else {
g.FillPath(defaultBrush, path);
g.FillRectangle(defaultBrush, rectangle);
}
g.DrawPath(Pens.Black, path);
g.DrawRectangle(Pens.Black, rectangle);
}
Graphics g = this.CreateGraphics();
if (!inRectangle) {
294
Chng 8: ha, a phng tin, v in n
inRectangle = true;
// i mu nn hnh ch nht.
g.FillRectangle(highlightBrush, rectangle);
g.DrawRectangle(Pens.Black, rectangle);
}
}else if (inRectangle) {
inRectangle = false;
if (!inPath) {
inPath = true;
// i mu nn path.
g.FillPath(highlightBrush, path);
g.DrawPath(Pens.Black, path);
}
}else if (inPath) {
inPath = false;
// Phc hi path.
g.FillPath(defaultBrush, path);
295
Chng 8: ha, a phng tin, v in n
g.DrawPath(Pens.Black, path);
}
g.Dispose();
}
}
Ch rng hot ng ny din ra trc tip bn trong phng thc th l s kin MouseMove.
Vic v ch c thc hin nu phn chn hin ti thay i. i vi mt on m n gin,
bn c th lm mt hiu lc ton b form mi khi con tr chut di chuyn vo trong hoc ra
khi mt vng v th l tt c vic v trong phng thc th l s kin Form.Paint, nhng
iu ny dn n vic phi v nhiu hn v to nn hin tng rung hnh (flicker) khi ton b
form c v li.
3.
to mt form hoc iu kim khng phi hnh ch nht, trc ht bn cn nh ngha hnh
dng mnh mun. Cch tip cn d nht l s dng i tng
System.Drawing.Drawing2D.GraphicsPath, n c th iu tit bt k s kt hp no ca cc
hnh ellipse, ch nht, v cung khp kn. Bn c th thm cc shape vo mt i tng
GraphicsPath bng cc phng thc nh AddEllipse, AddRectangle, v AddClosedCurve. Mt
khi hon tt vic nh ngha hnh dng nh mong mun, bn c th to mt i tng
Region t GraphicsPath nych cn trnh ra GraphicsPath trong phng thc khi dng ca
296
Chng 8: ha, a phng tin, v in n
297
Chng 8: ha, a phng tin, v in n
Point[] pointsB = new Point[]
{new Point(this.Width - 40, this.Height - 60),
new Point(this.Width, this.Height),
new Point(10, this.Height)};
path.AddCurve(pointsB);
path.CloseAllFigures();
this.Region = new Region(path);
}
this.Close();
}
}
4.
298
Chng 8: ha, a phng tin, v in n
using System.Drawing.Drawing2D;
base.OnResize(e);
RefreshPath();
this.Invalidate();
}
base.OnPaint(e);
if (path != null) {
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillPath(new SolidBrush(this.BackColor), path);
e.Graphics.DrawPath(new Pen(this.ForeColor, 4), path);
}
}
}
299
Chng 8: ha, a phng tin, v in n
thit k. Tuy nhin, ngay c khng thc hin bc ny, cng d dng to c mt ng dng
th nghim n gin. V d di y to hai ellipse v cho php ngi dng ko r c hai
vng quanh form bng cch gi chut xung v di chuyn con tr.
300
Chng 8: ha, a phng tin, v in n
ellipseB.BackColor = Color.Azure;
this.Controls.Add(ellipseB);
if (e.Button == MouseButtons.Left) {
}else {
isDraggingB = true;
}
}
}
isDraggingA = false;
isDraggingB = false;
301
Chng 8: ha, a phng tin, v in n
}
// Ly offset.
Point point = (Point)control.Tag;
// Di chuyn iu kim.
control.Left = e.X + control.Left - point.X;
control.Top = e.Y + control.Top - point.Y;
}
}
}
5.
302
Chng 8: ha, a phng tin, v in n
Hnh 8.5 Thm tnh nng cun cho bc hnh vi ni dung ty bin
using System;
using System.Windows.Forms;
using System.Drawing;
string text = "The quick brown fox jumps over the lazy dog.";
Font font = new Font("Tahoma", 20);
303
Chng 8: ha, a phng tin, v in n
g.DrawString(text, font, Brushes.Black, 50, 50 + i*60);
}
6.
.NET Framework khng cung cp lp no thc hin vic chp ton b mn hnh (thng c
cp l ca s Desktop). Tuy nhin, bn c th truy xut cc c tnh ny bng cch s dng
P/Invoke vi Win32 API.
Bc u tin l to mt lp ng gi cc hm Win32 API bn cn s dng. Lp di y s
khai bo cc hm ny v s dng chng trong phng thc cng khai Capture tr v mt
i tng .NET Image cha ca s Desktop:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class DesktopCapture {
[DllImport("user32.dll")]
private extern static IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
private extern static IntPtr GetDC(IntPtr windowHandle);
[DllImport("gdi32.dll")]
private extern static IntPtr GetCurrentObject(IntPtr hdc,
ushort objectType);
[DllImport("user32.dll")]
private extern static void ReleaseDC( IntPtr hdc );
304
Chng 8: ha, a phng tin, v in n
305
Chng 8: ha, a phng tin, v in n
Bc k tip l to mt client c th s dng chc nng ny. Form di y (xem hnh 8.6) s
hin th bc hnh chp c trong mt PictureBox (nm trong mt Panel cun c, nh
c m t trong mc 8.5).
public class ScreenCapture : System.Windows.Forms.Form {
pictureBox1.Image = DesktopCapture.Capture();
pictureBox1.Size = pictureBox1.Image.Size;
}
}
7.
Biu din hnh nh dng hnh bitmap trong-b-nh, ri chp hnh bitmap
hon chnh vo form.
306
Chng 8: ha, a phng tin, v in n
307
Chng 8: ha, a phng tin, v in n
}else {
imageSize++;
}
// V li form.
this.Invalidate();
}
Graphics g;
Bitmap drawing = null;
if (chkUseDoubleBuffering.Checked) {
}else {
308
Chng 8: ha, a phng tin, v in n
g.SmoothingMode = SmoothingMode.HighQuality;
// V nn.
g.FillRectangle(Brushes.Yellow,
new Rectangle(new Point(0, 0), this.ClientSize));
// V bc hnh logo.
g.DrawImage(image, 50, 50, 50 + imageSize, 50 + imageSize);
e.Graphics.DrawImageUnscaled(drawing, 0, 0);
g.Dispose();
}
}
// Khng lm g c.
}
}
8.
bc
hnh
file
bng
phng
thc
tnh
FromFile
ca
lp
thc Image.GetThumbnailImage.
309
Chng 8: ha, a phng tin, v in n
Lp Image cung cp chc nng to thumbnail thng qua phng thc GetThumbnailImage. Bn
ch cn truyn chiu rng v chiu cao ca hnh thumbnail bn mun (tnh bng pixel), v lp
Image s to mt i tng Image mi ph hp vi tiu chun ny. Vic kh mo dng rng
ca (antialiasing) c s dng khi thu nh bc hnh bo m cht lng bc hnh tt nht
c th c, mc d mt s vt m v thiu ht mt vi tiu tit l khng th trnh khi (kh
mo dng rng ca l qu trnh loi b cc ra lm chm, thng c trong cc bc hnh
c thay i kch thc, bng cch t bng vi mt mu trung gian). Ngoi ra, bn c th
cung cp mt callback to thumbnail mt cch bt ng b.
Khi to mt thumbnail, vic quan trng l phi bo m t s gia hai chiu vn nh c (hng
s). V d, nu bn thu nh mt bc hnh kch thc 200x100 thnh mt thumbnail kch thc
50x50, chiu rng s b nn cn mt phn t v chiu cao b nn cn mt na, iu ny lm
mo bc hnh. bo m t l ny vn nh c, bn c th thay i chiu rng hoc chiu cao
thnh mt kch thc c nh ri iu chnh chiu cn li cho cn xng.
V d di y c mt file bitmap v to mt thumbnail kch thc khng ln hn 50x50
(vn bo ton t l gc):
using System;
using System.Drawing;
using System.Windows.Forms;
Image thumbnail;
thumbnailWidth = 50;
thumbnailHeight = Convert.ToInt32(((50F / img.Width) *
img.Height));
310
Chng 8: ha, a phng tin, v in n
}else {
thumbnailHeight = 50;
thumbnailWidth = Convert.ToInt32(((50F / img.Height) *
img.Width));
}
thumbnail = img.GetThumbnailImage(thumbnailWidth,
thumbnailHeight, null, IntPtr.Zero);
}
9.
.NET Framework khng cha bt k lp c-qun-l no thc hin vic chi cc file m
thanh, ngay c ting beep ca h thng cng khng. Tuy nhin, bn c th d dng vt qua
tr ngi ny bng Win32 API hoc Visual Basic .NET (cp hm Beep thng qua lp
Microsoft.VisualBasic.Interaction). Trong trng hp th hai, bn phi thm mt tham
chiu n Microsoft.VisualBasic.dll (c trong tt c cc phin bn ca .NET Framework).
V d sau y s dng c hm API Beep v hm Visual Basic Beep. Ch l hm API s dng
loa gn trong ca my tnh v pht m thanh vi tn s (tnh bng Hertz, nm trong khong t
37 n 32,767) v thi gian (tnh bng mili-giy) cho trc. Cch ny s khng pht bt k
m thanh no nu my tnh khng c loa gn trong. Mt khc, hm Visual Basic Beep pht
ting beep chun ca h thng (l mt file WAV). Cch ny s khng pht bt k m thanh
no nu my tnh khng c card m thanh, nu card m thanh khng c kt ni vi loa gn
ngoi, hoc nu Windows c cu hnh l khng pht m thanh (thng qua phn Sounds and
Audio Devices trong Control Panel).
311
Chng 8: ha, a phng tin, v in n
using System;
using System.Runtime.InteropServices;
using Microsoft.VisualBasic;
[DllImport("kernel32.dll")]
private static extern bool Beep(int freq, int dur);
[STAThread]
private static void Main(string[] args) {
10.
312
Chng 8: ha, a phng tin, v in n
Th vin Quartz cung cp mt thnh phn COM c th chi nhiu kiu file audio, gm
cc nh dng WAV v MP3. Th vin Quartz c cp thng qua quartz.dll v n l
mt phn ca Microsoft DirectX cho Windows Media Player v h iu hnh Windows.
313
Chng 8: ha, a phng tin, v in n
Hnh 8.7 Chn ActiveMovie control type library trong hp thoi Add Reference
class PlayAudio {
11.
314
Chng 8: ha, a phng tin, v in n
315
Chng 8: ha, a phng tin, v in n
// Gi tham chiu mc-form n giao din Media Control,
// on m c th iu khin playback cho
// movie c np hin ti.
private IMediaControl mc = null;
if (DialogResult.OK == openFileDialog.ShowDialog()) {
// Np file movie.
FilgraphManager graphManager = new FilgraphManager();
graphManager.RenderFile(openFileDialog.FileName);
videoWindow = (IVideoWindow)graphManager;
videoWindow.Owner = (int) pictureBox1.Handle;
videoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;
videoWindow.SetWindowPosition(
pictureBox1.ClientRectangle.Left,
pictureBox1.ClientRectangle.Top,
pictureBox1.ClientRectangle.Width,
pictureBox1.ClientRectangle.Height);
316
Chng 8: ha, a phng tin, v in n
} catch {
// Li c th xy ra nu file khng c
// video source (chng hn, file MP3).
// Bn c th b qua li ny v vn cho php
// playback tip tc (khng c hnh).
}
if (videoWindow != null) {
try {
videoWindow.SetWindowPosition(
pictureBox1.ClientRectangle.Left,
pictureBox1.ClientRectangle.Top,
pictureBox1.ClientRectangle.Width,
pictureBox1.ClientRectangle.Height);
} catch {
317
Chng 8: ha, a phng tin, v in n
Ly thng tin v cc my in c ci t
12.
318
Chng 8: ha, a phng tin, v in n
// Hin th tn my in.
Console.WriteLine("Printer: {0}", printerName);
// Ly cc thit lp my in.
PrinterSettings printer = new PrinterSettings();
printer.PrinterName = printerName;
{0}", resolution);
}
Console.WriteLine();
if (Enum.IsDefined(size.Kind.GetType(), size.Kind)) {
319
Chng 8: ha, a phng tin, v in n
Console.WriteLine("
{0}", size);
}
}
Console.WriteLine();
}
}
Console.ReadLine();
}
}
320
Chng 8: ha, a phng tin, v in n
[PrinterResolution Draft]
[PrinterResolution X=72 Y=72]
[PrinterResolution X=144 Y=144]
[PrinterResolution X=300 Y=300]
[PrinterResolution X=600 Y=600]
[PrinterResolution X=1200 Y=1200]
[PrinterResolution X=2400 Y=2400]
[PrinterResolution X=3600 Y=3600]
[PrinterResolution X=4000 Y=4000]
Bn khng cn thc hin cch lm ny khi to mt ng dng cung cp chc nng in. Theo
mc 8.13, bn c th s dng PrintDialog nhc ngi dng chn mt my in v cc thit
lp cho n. Lp PrintDialog c th t ng p dng cc thit lp ca n cho PrintDocument
m khng cn vit thm m lnh.
321
Chng 8: ha, a phng tin, v in n
In vn bn n gin
13.
in
mt
vn
bn,
bn
cn
to
mt
i
tng
System.Drawing.Printing.PrintDocument, cu hnh cc thuc tnh ca n, v ri gi phng
thc Print thc hin tc v in. B thc thi s pht sinh cc s kin BeginPrint, PrintPage,
v EndPrint ca lp PrintDocument trn mt tiu trnh mi. Bn th l cc s kin ny v s
dng i tng System.Drawing.Graphics xut d liu ra trang. Hnh v text c ghi ra
trang theo cng cch nh bn v ln ca s bng GDI+. Tuy nhin, bn c th cn phi theo
vt v tr ca bn trn trang, v mi phng thc ca lp Graphics u yu cu ta ch nh
ni cn v.
Cc
thit
lp
cho
my
322
Chng 8: ha, a phng tin, v in n
323
Chng 8: ha, a phng tin, v in n
}
private void Doc_PrintPage(object sender, PrintPageEventArgs e) {
// nh ngha font.
Font font = new Font("Tahoma", 30);
// Xc nh v tr trn trang.
// Trong trng hp ny, chng ta c cc thit lp l
// (mc d khng c g ngn chng ta vt qua bin l).
float x = e.MarginBounds.Left;
float y = e.MarginBounds.Top;
// Xc nh chiu cao ca mt dng (da trn font c s dng).
float lineHeight = font.GetHeight(e.Graphics);
// In nm dng text.
for (int i=0; i < 5; i++) {
// V text vi bt v en, s dng font v
// ta m chng ta xc nh.
e.Graphics.DrawString("Thp Din Mai Phc " + i.ToString(),
font, Brushes.Black, x, y);
// Dch xung mt dng.
y += lineHeight;
}
y += lineHeight;
// V hnh.
e.Graphics.DrawImage(Image.FromFile(Application.StartupPath +
"\\test.bmp"), x, y);
}
}
324
Chng 8: ha, a phng tin, v in n
In vn bn c nhiu trang
14.
325
Chng 8: ha, a phng tin, v in n
private int pageNumber;
private int offset;
326
Chng 8: ha, a phng tin, v in n
printText[i] = i.ToString();
printText[i] +=
": Thp Din Mai Phc (House of Flying Daggers)";
}
PrintDocument doc = new TextDocument(printText);
doc.PrintPage += new PrintPageEventHandler(this.Doc_PrintPage);
PrintDialog dlgSettings = new PrintDialog();
dlgSettings.Document = doc;
327
Chng 8: ha, a phng tin, v in n
// To cc bin lu gi v tr trn trang.
float x = e.MarginBounds.Left;
float y = e.MarginBounds.Top;
// Tng bin m cho trang (cho bit s trang c in).
doc.PageNumber += 1;
// In tt c thng tin va kht trn trang.
// Vng lp ny kt thc khi dng k tip vt qu bin l,
// hoc khng cn dng no in.
while ((y + lineHeight) < e.MarginBounds.Bottom &&
doc.Offset <= doc.Text.GetUpperBound(0)) {
e.Graphics.DrawString(doc.Text[doc.Offset], font,
Brushes.Black, x, y);
// Dch n dng d liu k tip.
doc.Offset += 1;
// Dch xung mt dng trn trang.
y += lineHeight;
}
if (doc.Offset < doc.Text.GetUpperBound(0)) {
// Vn cn t nht mt trang na.
// Cho bit s kin ny s pht sinh ln na.
e.HasMorePages = true;
}else {
// Thao tc in hon tt.
doc.Offset = 0;
}
}
}
328
Chng 8: ha, a phng tin, v in n
15.
Bn cn phn tch mt khi text ln thnh cc dng ring bit sao cho va kht
trn mt trang.
329
Chng 8: ha, a phng tin, v in n
330
Chng 8: ha, a phng tin, v in n
Hin th print-preview
16.
331
Chng 8: ha, a phng tin, v in n
332
Chng 8: ha, a phng tin, v in n
// To vn bn gm 100 dng.
string[] printText = new string[100];
for (int i=0; i < 100; i++) {
printText[i] = i.ToString();
printText[i] +=
": The quick brown fox jumps over the lazy dog.";
}
lstZoom.Text = "100";
printPreviewControl.Zoom = 1;
printPreviewControl.Document = doc;
printPreviewControl.Rows = 2;
333
Chng 8: ha, a phng tin, v in n
}
// Thit lp zoom.
printPreviewControl.Zoom = Single.Parse(lstZoom.Text) / 100;
// Gn li PrintDocument lm ti preview.
printPreviewControl.Document = doc;
}
}
Qun l tc v in
17.
334
Chng 8: ha, a phng tin, v in n
cmdRefresh_Click(null, null);
}
335
Chng 8: ha, a phng tin, v in n
try {
// Chn tc v in ph hp.
string query = "SELECT * FROM Win32_PrintJob " +
"WHERE JobID='" + lstJobs.Text + "'";
ManagementObjectSearcher jobQuery =
new ManagementObjectSearcher(query);
ManagementObjectCollection jobs = jobQuery.Get();
IEnumerator enumerator = jobs.GetEnumerator();
enumerator.MoveNext();
return (ManagementObject)enumerator.Current;
}catch (InvalidOperationException){
336
Chng 8: ha, a phng tin, v in n
jobInfo += Environment.NewLine;
jobInfo += "PagesPrinted: " +
job["PagesPrinted"].ToString();
jobInfo += Environment.NewLine;
jobInfo += "TotalPages: " + job["TotalPages"].ToString();
if (job["JobStatus"] != null) {
txtJobInfo.Text += Environment.NewLine;
txtJobInfo.Text += "JobStatus: " +
job["JobStatus"].ToString();
}
if (job["StartTime"] != null) {
jobInfo += Environment.NewLine;
jobInfo += "StartTime: " + job["StartTime"].ToString();
}
txtJobInfo.Text = jobInfo;
}
private void cmdPause_Click(object sender, System.EventArgs e) {
if (lstJobs.SelectedIndex == -1) return;
ManagementObject job = GetSelectedJob();
if (job == null) return;
// Tm dng tc v.
int returnValue = Int32.Parse(
job.InvokeMethod("Pause", null).ToString());
}else {
MessageBox.Show(
"Unrecognized return value when pausing job.");
337
Chng 8: ha, a phng tin, v in n
}
}
if ((Int32.Parse(job["StatusMask"].ToString()) & 1) == 1) {
// Phc hi tc v.
int returnValue = Int32.Parse(
job.InvokeMethod("Resume", null).ToString());
}else if (returnValue == 5) {
MessageBox.Show("Access denied.");
}else {
MessageBox.Show(
"Unrecognized return value when resuming job.");
}
}
}
}
338
Chng 8: ha, a phng tin, v in n
18.
Microsoft Agent l mt k thut dng thm cc nhn vt hot hnh c tnh tng tc vo
ng dng hay trang web. Tnh tng tc l chc nng chnh yu ca k thut Microsoft Agent:
cc nhn vt Microsoft Agent c th ni v p li u vo ca ngi dng thng qua vic
nhn dng v tng hp ging ni. Microsoft s dng k thut ny trong cc ng dng nh
Word, Excel, v PowerPoint; gip ngi dng tm cu tr li cho nhng cu hi v hiu cch
thc hot ng ca ng dng. Microsoft cung cp thng tin v k thut Microsoft Agent ti
[www.microsoft.com/msagent].
iu kim Microsoft Agent cho php ngi dng tng tc vi cc ng dng v trang web
thng qua ging nidng giao tip t nhin nht ca con ngi. Khi ngi dng ni vo
micro, iu kim ny s dng mt b my nhn dng ging niy l ng dng dch m
thanh u vo t micro thnh ngn ng m my tnh hiu c. iu kim Microsoft Agent
339
Chng 8: ha, a phng tin, v in n
Hnh 8.15 Chn Microsoft Agent Control 2.0 trong ca s Customize Toolbox
public class FrmAgent : System.Windows.Forms.Form
340
Chng 8: ha, a phng tin, v in n
{
// (B qua phn m designer.)
if (e.KeyCode == Keys.Enter)
{
// Thit lp ni lu tr nhn vt vo txtLocation.
string location = txtLocation.Text;
341
Chng 8: ha, a phng tin, v in n
mSpeaker.Show(0);
}
catch (FileNotFoundException)
{
MessageBox.Show("Invalid character location", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
342
Chng 8: ha, a phng tin, v in n
{
ChangeCharacter(characterCombo.Text);
}
// Xa actionsCombo.
actionsCombo.Items.Clear();
mSpeaker.Commands.RemoveAll();
343
Chng 8: ha, a phng tin, v in n
voiceString = voiceString.Replace("_", "underscore");
actionsCombo.Items.Add(enumerator.Current);
mSpeaker.Commands.Add(Convert.ToString(enumerator.Current), ""
voiceString, true, false);
}
344
Chng 8: ha, a phng tin, v in n
{
ChangeCharacter(command.Voice);
return;
}
// Gi agent n chut.
if (command.Name == "MoveToMouse")
{
mSpeaker.MoveTo(Convert.ToInt16(Cursor.Position.X - 60),
Convert.ToInt16(Cursor.Position.Y - 60), null);
return;
}
345
Chng 8: ha, a phng tin, v in n
Hnh 8.16 ng dng th nghim Microsoft Agent
346
347
348
Chng 9: File, th mc, v I/O
c lp I/O ca Microsoft .NET gm hai loi chnh. Loi th nht truy xut thng tin
t h thng file v cho php thc hin cc thao tc trn h thng file (nh chp file,
chuyn th mc). Hai lp tiu biu l FileInfo v DirectoryInfo. Loi th hai quan
trng hn, gm rt nhiu lp cho php c v ghi d liu t mi kiu stream. Stream c th
tng ng vi mt file nh phn hay vn bn, mt file trong khng gian lu tr ring, mt kt
ni mng, hoc mt vng m b nh. Trong mi trng hp, cch thc tng tc vi stream
u nh nhau. Trong chng ny, chng ta s xem xt cc lp h thng file v cc lp datrn-stream.
Cc mc trong chng ny trnh by cc vn sau:
Truy xut v sa i cc thng tin ca mt file hay mt th mc (cc mc 9.1, 9.2, 9.4,
9.5, v 9.16).
c v ghi file vn bn (mc 9.7) v file nh phn (mc 9.8), cng nh to file tm
(mc 9.15) v file trong mt khng gian lu tr ring ca ngi dng (mc 9.18).
1.
To
tng
System.IO.FileInfo
cho
file
hay
tng
mc trong phng thc khi dng. Cc thng tin cn thit s c truy xut
thng qua cc thuc tnh ca i tng.
to mt i tng FileInfo hay DirectoryInfo, bn cn truyn ng dn tng i hay
y trong phng thc khi dng ca n. Bn c th ly cc thng tin v file hay th mc
thng qua cc thuc tnh ca i tng tng ng. Bng 9.1 lit k cc thnh vin ca lp
FileInfo v DirectoryInfo:
Bng 9.1 Cc thnh vin ca FileInfo v DirectoryInfo
Thnh vin
Thuc lp
M t
349
Chng 9: File, th mc, v I/O
Exists
FileInfo v
DirectoryInfo
Attributes
FileInfo v
DirectoryInfo
FileInfo v
DirectoryInfo
FileInfo v
DirectoryInfo
Tr v mt chui cha tn y , tn th mc
hay tn file (cng phn m rng), v phn m
rng.
CreationTime,
LastAccessTime, v
LastWriteTime
FullName, Name, v
Extension
Length
FileInfo
DirectoryName v
Directory
FileInfo
Parent v Root
DirectoryInfo
Tr v i tng DirectoryInfo m t th
mc cha hay th mc gc.
CreateSubdirectory
DirectoryInfo
To mt th mc bn trong th mc c m
t bi i tng DirectoryInfo, tn th mc
cn to c truyn cho phng thc. Tr v
i tng DirectoryInfo m t th mc con
va to.
GetDirectories
DirectoryInfo
GetFiles
DirectoryInfo
350
Chng 9: File, th mc, v I/O
351
Chng 9: File, th mc, v I/O
using System;
using System.IO;
if (args.Length == 0) {
if (file.Exists) {
}
Console.WriteLine();
352
Chng 9: File, th mc, v I/O
if (dir.Exists) {
Console.Write("Directory created: ");
Console.WriteLine(dir.CreationTime.ToString());
Console.Write("Directory last updated: ");
Console.WriteLine(dir.LastWriteTime.ToString());
Console.Write("Directory last accessed: ");
Console.WriteLine(dir.LastAccessTime.ToString());
Console.Write("Directory attribute list: ");
Console.WriteLine(dir.Attributes.ToString());
Console.WriteLine("Directory contains: " +
dir.GetFiles().Length.ToString() + " files");
}
Console.ReadLine();
}
}
353
Chng 9: File, th mc, v I/O
Directory last updated: 2003-05-26 2:25:25 PM
Directory last accessed: 2003-05-26 2:25:25 PM
Directory attribute list: Directory
Directory contains: 147 files
2.
tng
System.IO.FileInfo
cho
file
hay
to
tng
354
Chng 9: File, th mc, v I/O
}
// iu kin di y ng, v n ch lc ra
// thuc tnh read-only.
if ((file.Attributes & FileAttributes.ReadOnly) ==
FileAttributes.ReadOnly) {
Console.WriteLine("File is read-only (correct test).");
}
Console.ReadLine();
}
}
Khi thit lp mt thuc tnh, bn cng phi s dng php ton trn bit. Trong trng hp ny,
bn cn cn thn khng v xa cc thuc tnh khc.
// Ch thm thuc tnh read-ony.
file.Attributes = file.Attributes | FileAttributes.ReadOnly;
// Ch xa thuc tnh read-only.
file.Attributes = file.Attributes & ~FileAttributes.ReadOnly;
3.
tng
System.IO.FileInfo
cho
file
hay
tng
M t
355
Chng 9: File, th mc, v I/O
CopyTo
Create v CreateText
v OpenWrite
Delete
MoveTo
M t
Create
To th mc c ch nh. Nu ng dn ch nh nhiu th
mc cha tn ti, tt c s c to mt lt.
CreateSubdirectory
To mt th mc vi tn c th bn trong th mc c m t
bi i tng DirectoryInfo. N cng tr v mt i tng
DirectoryInfo m t th mc con.
Delete
MoveTo
Lp DirectoryInfo khng c phng thc no dng sao chp th mc. Tuy nhin, bn c
th d dng vit c mt phng thc nh th da trn k thut quy v phng thc
CopyTo ca i tng FileInfo:
using System;
using System.IO;
356
Chng 9: File, th mc, v I/O
if (!destination.Exists) {
destination.Create();
}
// Chp tt c file.
FileInfo[] files = source.GetFiles();
foreach (FileInfo file in files) {
file.CopyTo(Path.Combine(destination.FullName, file.Name));
}
// X l cc th mc con.
DirectoryInfo[] dirs = sourceDir.GetDirectories();
foreach (DirectoryInfo dir in dirs) {
// Ly th mc ch.
string destinationDir = Path.Combine(destination.FullName,
dir.Name);
// Gi quy CopyDirectory().
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}
}
if (args.Length != 2) {
357
Chng 9: File, th mc, v I/O
Console.WriteLine("usage:
" +
FileSystemUtil.CopyDirectory(new DirectoryInfo(sourceDir),
new DirectoryInfo(destinationDir));
Console.WriteLine("Copy complete.");
Console.ReadLine();
}
}
4.
Duyt qua tt c file trong th mc, tnh tng cc thuc tnh FileInfo.Length ca
chng. S dng k thut quy tnh cho c cc file nm trong cc th mc
con.
Lp DirectoryInfo khng c thuc tnh no tr v thng tin kch thc. Tuy nhin, bn c th
d dng tnh c kch thc ca tt c cc file nm trong mt th mc bng thuc tnh
FileInfo.Length.
Phng thc di y s dng k thut trn v c th ty chn duyt quy qua cc th mc
con:
using System;
using System.IO;
public class FileSystemUtil {
long totalSize = 0;
358
Chng 9: File, th mc, v I/O
// Duyt tt c cc th mc con.
if (includeSubdirectories) {
return totalSize;
}
}
359
Chng 9: File, th mc, v I/O
}
}
5.
.NET Framework cho php bn truy xut cc thng tin v file m khng cn da vo
Windows API. Bn ch cn s dng lp FileVersionInfo v gi phng thc GetVersionInfo
vi i s l tn file. K , bn c th truy xut thng tin thng qua cc thuc tnh ca
FileVersionInfo.
using System;
using System.Diagnostics;
public class VersionInfo {
private static void Main(string[] args) {
if (args.Length == 0) {
Console.WriteLine("Please supply a file name.");
return;
}
FileVersionInfo info = FileVersionInfo.GetVersionInfo(args[0]);
// Hin th cc thng tin v phin bn.
Console.WriteLine("Checking File: " + info.FileName);
Console.WriteLine("Product Name: " + info.ProductName);
Console.WriteLine("Product Version: " + info.ProductVersion);
Console.WriteLine("Company Name: " + info.CompanyName);
Console.WriteLine("File Version: " + info.FileVersion);
Console.WriteLine("File Description: " + info.FileDescription);
Console.WriteLine("Original Filename: " + info.OriginalFilename);
Console.WriteLine("Legal Copyright: " + info.LegalCopyright);
Console.WriteLine("InternalName: " + info.InternalName);
Console.WriteLine("IsDebug: " + info.IsDebug);
360
Chng 9: File, th mc, v I/O
6.
Bn c th s dng k thut quy xy dng ton b cy th mc. Tuy nhin, vic qut h
thng file theo cch ny c th chm, c bit i vi cc a ln. V l do ny, cc phn
mm qun l file chuyn nghip (bao gm Windows Explorer) s dng mt k thut khc: ch
hin th nhng thng tin no ngi dng cn n.
361
Chng 9: File, th mc, v I/O
TreeView rt thch hp vi cch tip cn ny v n cung cp s kin BeforeExpand (s kin
362
Chng 9: File, th mc, v I/O
// Thit lp nt u tin.
TreeNode rootNode = new TreeNode("C:\\");
treeDirectory.Nodes.Add(rootNode);
// Thm cp th nht v m rng n.
Fill(rootNode);
treeDirectory.Nodes[0].Expand();
}
private void treeDirectory_BeforeExpand(object sender,
System.Windows.Forms.TreeViewCancelEventArgs e) {
// Nu tm thy mt nt gi, xa n v c cc th mc tht.
if (e.Node.Nodes[0].Text == "*") {
e.Node.Nodes.Clear();
Fill(e.Node);
}
}
}
363
Chng 9: File, th mc, v I/O
c v ghi file vn bn
7.
.NET cho php bn ghi hay c vn bn bng lp StreamWriter v StreamReader. Khi ghi d
liu vi StreamWriter, hy s dng phng thc StreamWriter.Write. Phng thc ny c
np chng h tr tt c cc kiu d liu thng thng trong C# .NET, bao gm chui, k
t, s nguyn, s thc du chm ng, s thp phn,... Tuy nhin, phng thc Write lun
chuyn d liu thnh vn bn. Nu mun chuyn vn bn ny tr v kiu ban u th bn nn
s dng WriteLine bo m mi gi tr c t trn mt dng ring.
C nhiu cch m t mt chui di dng nh phn, ty thuc vo cch m ha. Cc kiu m
ha thng thng l:
UTF-7 Unicodes dng 7 bit cho cc k t ASCII bnh thng v nhiu cp 7 bit cho
cc k t m rng. Kiu m ha ny ch yu dng cho cc giao thc 7 bit, chng hn
mail.
UTF-8 Unicodes dng 8 bit cho cc k t ASCII bnh thng v nhiu cp 8 bit cho
cc k t m rng. Mng byte kt qu s c 1 byte cho mi k t (gi s khng c k
t m rng).
.NET cung cp mt lp cho mi kiu m ha trong khng gian tn System.Text. Khi s dng
StreamReader v StreamWriter, bn c th ch nh kiu m ha hoc s dng kiu mc nh
l UTF-8.
Khi c thng tin, s dng phng thc Read hay ReadLine ca lp StreamReader. Phng
thc Read c mt k t, hay s k t do bn ch nh, v tr v mt k t hay mng k t.
Phng thc ReadLine tr v mt chui cha ton b ni dung mt hng.
ng dng Console di y minh ha vic ghi v c mt file vn bn:
using System;
using System.IO;
using System.Text;
public class TextFileTest {
364
Chng 9: File, th mc, v I/O
365
Chng 9: File, th mc, v I/O
Console.ReadLine();
}
}
8.
.NET cho php bn ghi hay c d liu nh phn bng lp BinaryWriter v BinaryReader. Khi
ghi d liu vi BinaryWriter, hy s dng phng thc BinaryWriter.Write. Phng thc
ny c np chng h tr tt c kiu d liu thng thng trong C# .NET, bao gm chui,
k t, s nguyn, s thc du chm ng, s thp phn,... Thng tin sau c m ha thnh
mt dy cc byte v ghi vo file. Bn c th ch nh kiu m ha cho chui bng mt phng
thc khi dng np chng nhn mt i tng System.Text.Encoding lm i s ( c m
t trong mc 9.7).
S dng file nh phn thao tc vi cc kiu d liu th kh phc tp, v khi truy xut thng
tin, bn phi s dng mt trong nhng phng thc Read kiu mnh ca BinaryReader. V d:
mun truy xut d liu dng thp phn th phi s dng ReadDecimal; cn mun c mt
chui th phi s dng ReadString (BinaryWriter lun ghi li chiu di ca chui khi ghi
chui vo file trnh li).
ng dng Console di y minh ha vic ghi v c mt file nh phn:
using System;
using System.IO;
// To file v to writer.
FileStream fs = new FileStream("test.txt", FileMode.Create);
BinaryWriter w = new BinaryWriter(fs);
366
Chng 9: File, th mc, v I/O
// ng file.
w.Close();
fs.Close();
fs.Close();
Console.ReadLine();
}
}
367
Chng 9: File, th mc, v I/O
c file mt cch bt ng b
9.
dng cc phng thc ny, bn c th c mt khi d liu trn mt trong cc tiu trnh do
thread-pool cung cp m khng cn s dng trc tip cc lp tiu trnh trong khng gian tn
System.Threading.
Khi c file mt cch bt ng b, bn cn xc nh kch thc khi d liu trong mt ln
c. Ty trng hp, bn c th mun c mt khi d liu nh (v d, chp tng khi mt
sang file khc) hoc khi d liu tng i ln (v d, bn cn mt lng thng tin nht nh
trc khi x l vic g ). Bn ch nh kch thc khi khi gi BeginRead, v truyn mt b
m cha d liu. V BeginRead v EndRead cn truy xut nhiu mu thng tin ging nhau
(chng hn FileStream, b m, kch thc khi,...), bn nn ng gi m lnh c file bt
ng b trong mt lp.
Vi lp AsyncProcessor trong v d di y, phng thc cng khai StartProcess bt u
qu trnh c bt ng b. Mi khi qu trnh c hon tt, OnCompletedRead c kch hot v
khi d liu c x l. Nu cn d liu trong file, mt qu trnh c bt ng b mi s
c khi chy. Kch thc khi b nh l 2 KB (2048 byte).
using System;
using System.IO;
using System.Threading;
public class AsyncProcessor {
private Stream inputStream;
// Kch thc mi khi d liu l 2 KB.
private int bufferSize = 2048;
public int BufferSize {
get {return bufferSize;}
set {bufferSize = value;}
}
368
Chng 9: File, th mc, v I/O
// B m cha d liu.
private byte[] buffer;
public AsyncProcessor(string fileName) {
// Bt u qu trnh c bt ng b.
inputStream.BeginRead(buffer, 0, buffer.Length,
new AsyncCallback(OnCompletedRead), null);
}
private void OnCompletedRead(IAsyncResult asyncResult) {
// Mt khi c c. Truy xut d liu.
int bytesRead = inputStream.EndRead(asyncResult);
// Nu khng c c byte no, stream ang cui file.
if (bytesRead > 0) {
// Tm dng gi lp vic x l d liu.
Console.WriteLine("\t[ASYNC READER]: Read one block.");
Thread.Sleep(TimeSpan.FromMilliseconds(20));
// Bt u c khi k tip.
inputStream.BeginRead(buffer, 0, buffer.Length,
new AsyncCallback(OnCompletedRead), null);
}else {
369
Chng 9: File, th mc, v I/O
// Kt thc.
Console.WriteLine("\t[ASYNC READER]: Complete.");
inputStream.Close();
}
}
}
// Xa file th.
File.Delete("test.txt");
}
370
Chng 9: File, th mc, v I/O
10.
371
Chng 9: File, th mc, v I/O
"USAGE:
return;
}
DirectoryInfo dir = new DirectoryInfo(args[0]);
FileInfo[] files = dir.GetFiles(args[1]);
// Hin th tn v kch thc file.
foreach (FileInfo file in files) {
Console.Write("Name: " + file.Name + "
");
11.
C nhiu cch so snh nhiu file. V d, c th xt mt phn ca file xem c ging nhau,
hoc c c file so snh tng byte. C hai cch trn u ng, nhng trong mt s trng hp,
s dng m bm thun tin hn.
Mt gii thut bm sinh ra mt dng nh phn c trng (vi kch thc nh, thng khong
20 byte) cho file. C kh nng hai file khc nhau c cng m bm, nhng kh nng ny hu
nh khng xy ra. Thc t, c nhng thay i nh nht (chng hn, ch thay i mt bit ca
file ngun) cng c 50% kh nng thay i cc bit ca m bm. Do , m bm thng c
s dng pht hin d liu b sa i (m bm s c cp chi tit hn trong chng 14).
to mt m bm, trc ht bn phi to mt i tng HashAlgorithm bng phng thc
tnh HashAlgorithm.Create. Sau gi HashAlgorithm.ComputeHash nhn mt mng byte
cha m bm.
V d di y c hai tn file t i s dng lnh v kim tra hai file ny c trng nhau hay
khng:
using System;
using System.IO;
372
Chng 9: File, th mc, v I/O
using System.Security.Cryptography;
public class CompareFiles {
private static void Main(string[] args) {
if (args.Length != 2) {
Console.WriteLine("USAGE:
[fileName]");
return;
}
Console.WriteLine("Comparing " + args[0] + " and " + args[1]);
// To i tng bm.
HashAlgorithm hashAlg = HashAlgorithm.Create();
Console.WriteLine("Files match.");
}else {
Console.WriteLine("No match.");
}
373
Chng 9: File, th mc, v I/O
Console.ReadLine();
}
}
Cc m bm c so snh bng cch chuyn chng thnh chui. Bn cng c th duyt qua
mng v so snh tng byte. Cch ny nhanh hn mt t, nhng vic chuyn 20 byte thnh
chui khng tn nhiu chi ph nn khng cn thit.
12.
374
Chng 9: File, th mc, v I/O
(\) u v cui.
i.
13.
vi mt th mc ang tn ti.
375
Chng 9: File, th mc, v I/O
Console.Write(arg);
if (Directory.Exists(arg)) {
Console.WriteLine(" is a directory");
}
else if (File.Exists(arg)) {
Console.WriteLine(" is a file");
}
else {
Console.WriteLine(" does not exist");
}
}
Console.ReadLine();
}
}
Lm vic vi ng dn tng i
14.
376
Chng 9: File, th mc, v I/O
Path.GetFullPath("file.txt") + "'");
Console.WriteLine();
Console.ReadLine();
}
}
15.
To file tm
377
Chng 9: File, th mc, v I/O
using System;
using System.IO;
public class TemporaryFile {
private static void Main() {
string tempFile = Path.GetTempFileName();
Console.WriteLine("Using " + tempFile);
FileStream fs = new FileStream(tempFile, FileMode.Open);
// (Ghi d liu.)
fs.Close();
// Xa file.
File.Delete(tempFile);
Console.ReadLine();
}
}
16.
378
Chng 9: File, th mc, v I/O
[DllImport("kernel32.dll", EntryPoint="GetDiskFreeSpaceExA" )]
private static extern long GetDiskFreeSpaceEx(
string lpDirectoryName, out long lpFreeBytesAvailableToCaller,
out long lpTotalNumberOfBytes, out long lpTotalNumberOfFreeBytes);
379
Chng 9: File, th mc, v I/O
if (result != 0) {
17.
380
Chng 9: File, th mc, v I/O
381
Chng 9: File, th mc, v I/O
private System.Windows.Forms.MenuItem mnuSave;
private System.Windows.Forms.MenuItem mnuExit;
private System.Windows.Forms.RichTextBox rtDoc;
// (B qua phn m designer.)
if (dlg.ShowDialog() == DialogResult.OK) {
rtDoc.LoadFile(dlg.FileName);
rtDoc.Enabled = true;
}
}
if (dlg.ShowDialog() == DialogResult.OK) {
rtDoc.SaveFile(dlg.FileName);
}
}
this.Close();
}
(*.txt)|
382
Chng 9: File, th mc, v I/O
18.
383
Chng 9: File, th mc, v I/O
// To mt th mc ti gc ca khng gian lu tr ring.
store.CreateDirectory("MyFolder");
Console.ReadLine();
}
}
Theo mc nh, mi khng gian lu tr ring c tch bit bi ngi dng v assembly.
iu ny c ngha l khi cng mt ngi chy cng mt ng dng, ng dng ny s truy xut
d liu trong cng khng gian lu tr ring. Tuy nhin, bn c th tch bit thm bi min
ng dng nhiu th hin ca cng mt ng dng nhn cc khng gian lu tr ring khc
nhau, nh v d sau:
// Truy xut khng gian lu tr ring ca ngi dng
// v assembly hin ti (tng t v d trn).
store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly, null, null);
384
Chng 9: File, th mc, v I/O
19.
385
Chng 9: File, th mc, v I/O
// Cu hnh FileSystemWatcher.
FileSystemWatcher watch = new FileSystemWatcher();
watch.Path = Application.StartupPath;
watch.Filter = "*.*";
watch.IncludeSubdirectories = true;
if (File.Exists("test.bin")) {
File.Delete("test.bin");
}
386
Chng 9: File, th mc, v I/O
20.
try {
// Cu hnh cho cng.
387
Chng 9: File, th mc, v I/O
port.BaudRate = 9600;
port.Parity = 0;
port.PortNum = 1;
port.ReadTimeout = 10;
port.StopBits = 1;
port.ByteSize = 1;
// M cng.
port.Open();
// Ghi d liu.
port.Write(new byte[1]);
// ng cng.
port.Close();
Console.WriteLine(err.Message);
}
388
Chng 9: File, th mc, v I/O
389
10
390
391
Chng 10: C s d liu
rong Microsoft .NET Framework, vic truy xut n cc loi data-source (ngun d
liu) c cho php thng qua mt nhm cc lp c tn l Microsoft ADO.NET. Mi
loi data-source c h tr thng qua mt data-provider (b cung cp d liu). Mi
data-provider gm tp cc lp khng ch hin thc tp giao din chun, m cn cung cp chc
nng duy nht ca data-source m n h tr. Cc lp ny m t v kt ni, cu lnh, thng s,
data-adapter (b iu hp d liu), v data-reader (b c d liu) m qua , bn c th
tng tc vi mt loi data-source. Bng 10.1 lit k cc hin thc data-provider trong .NET.
Bng 10.1 Cc hin thc data-provider trong .NET Framework
Data-provider
M t
.NET Framework
Data Provider
for ODBC
.NET Framework
Data Provider
for OLE DB
.NET Framework
Data Provider
for Oracle
.NET Framework
Data Provider
for SQL Server
.NET Compact
Framework Data
Provider for SQL
Server CE
392
Chng 10: C s d liu
Kt ni c s d liu
1.
Bn cn m mt kt ni n mt c s d liu.
To mt i tng kt ni ph hp vi kiu c s d liu m bn cn kt ni; tt
c cc i tng kt ni u hin thc giao din System.Data.IDbConnection. Cu
hnh i tng kt ni bng cch thit lp thuc tnh ConnectionString ca n.
M kt ni bng cch gi phng thc Open ca i tng kt ni.
System.Data.Odbc.OdbcConnection
System.Data.OleDb.OleDbConnection
System.Data.OracleClient.OracleConnection
System.Data.SqlServerCe.SqlCeConnection
System.Data.SqlClient.SqlConnection
Tn server c s d liu ch
Tn c s d liu cn m vo lc u
Gi tr timeout ca kt ni
393
Chng 10: C s d liu
// C s d liu mu Northwind
Console.WriteLine("
Console.WriteLine("
Console.WriteLine("
Console.WriteLine("
Console.WriteLine("
Console.WriteLine("
Console.WriteLine("
} else {
Console.WriteLine("SqlConnection failed to open.");
394
Chng 10: C s d liu
Console.WriteLine("
}
// Cui khi using, Dispose s gi Close.
}
// M kt ni c s d liu.
con.Open();
2.
S dng connection-pooling
395
Chng 10: C s d liu
M t
Connection
Lifetime
Connection
Reset
Pooling
"Database = Northwind;" +
// C s d liu mu Northwind
396
Chng 10: C s d liu
// M kt ni c s d liu.
con.Open();
"Database = Northwind;" +
// C s d liu mu Northwind
// Ch nh non-pooled connection
// M kt ni c s d liu.
con.Open();
397
Chng 10: C s d liu
ODBC v OLE DB Data Provider cng h tr connection-pooling, nhng chng khng hin
thc connection-pooling bn trong cc lp .NET, nn bn khng th cu hnh pool theo cch
nh SQL Server hay Oracle Data Provider. Connection-pooling trong ODBC c qun l
bi ODBC Driver Manager v c cu hnh bng cng c ODBC Data Source
Administrator trong Control Panel. Connection-pooling trong OLE DB c qun l bi hin
thc OLE DB nguyn sinh; bn c th lm mt hiu lc pooling bng cch thm thit lp OLE
DB Services=-4; vo chui kt ni. SQL Server CE Data Provider khng h tr connectionpooling, v ti mt thi im SQL Server CE ch h tr mt kt ni.
3.
System.Data.Odbc.OdbcCommand
System.Data.OleDb.OleDbCommand
System.Data.OracleClient.OracleCommand
System.Data.SqlServerCe.SqlCeCommand
System.Data.SqlClient.SqlCommand
M t
398
Chng 10: C s d liu
CommandTimeout
CommandType
Connection
Parameters
Transaction
399
Chng 10: C s d liu
if (result == 1) {
Console.WriteLine("Employee title updated.");
} else {
Console.WriteLine("Employee title not updated.");
}
}
while (reader.Read()) {
{0} = {1}",
reader["TenMostExpensiveProducts"],
reader["UnitPrice"]);
}
}
}
400
Chng 10: C s d liu
Nu mun thc thi mt truy vn, nhng ch cn gi tr thuc ct u tin ca hng u tin
trong d liu kt qu, bn hy s dng phng thc ExecuteScalar. Gi tr tr v l mt tham
chiu i tng v bn cn p n v ng kiu. Di y l v d:
public static void ExecuteScalarExample(IDbConnection con) {
4.
Cc hin thc IDbCommand trong Oracle v SQL Data Provider c hin thc cc
phng thc thc thi cu lnh b sung. Mc 10.6 s m t cch s dng phng
thc ExecuteXmlReader do lp SqlCommand cung cp. Bn hy tham kho ti liu
.NET Frameworks SDK bit thm chi tit v cc phng thc b sung
ExecuteOracleNonQuery v ExecuteOracleScalar do lp OracleCommand cung cp.
Thit lp cc i s ca th tc tn tr
Ly cc gi tr tr v t th tc tn tr
401
Chng 10: C s d liu
System.Data.Odbc.OdbcParameter
System.Data.OleDb.OleDbParameter
System.Data.OracleClient.OracleParameter
System.Data.SqlServerCe.SqlCeParameter
System.Data.SqlClient.SqlParameter
M t
DbType
Direction
IsNullable
ParameterName
Value
402
Chng 10: C s d liu
Khi s dng thng s thc thi th tc tn tr, bn phi cung cp cc i tng thng s p
ng cho mi i s do th tc tn tr yu cugm c i s input v output. Bn phi thit
lp thuc tnh Direction ca mi thng s nh c m t trong bng 10.4 (mc nh l
Input). Nu th tc tn tr c gi tr tr v, thng s gi gi tr tr v (vi thuc tnh
Direction l ReturnValue) phi l thng s u tin c thm vo tp hp thng s. V d
di y s dng thng s thc thi th tc tn tr:
public static void StoredProcedureExample(SqlConnection con,
string category, string year) {
403
Chng 10: C s d liu
SqlCommand com = con.CreateCommand();
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "SalesByCategory";
}
}
5.
Giao din IDataReader m t mt data-reader, y l mt c ch ch-tin, ch-c (forwardonly, read-only) truy xut kt qu ca truy vn SQL. Mi data-provider cha mt hin thc
IDataReader duy nht. Di y l danh sch cc hin thc IDataReader cho nm dataprovider chun:
System.Data.Odbc.OdbcDataReader
System.Data.OleDb.OleDbDataReader
System.Data.OracleClient.OracleDataReader
System.Data.SqlServerCe.SqlCeDataReader
System.Data.SqlClient.SqlDataReader
Giao din IDataReader tha k giao din System.Data.IDataRecord. Cc giao din ny khai
bo cc chc nng truy xut d liu v cu trc ca d liu c trong tp kt qu. Bng 10.5
m t vi thnh vin thng dng ca giao din IDataReader v IDataRecord.
Ngoi cc thnh vin c lit k trong bng 10.5, data-reader cn cung cp mt tp cc
phng thc thc hin vic ly d liu c nh kiu t hng hin ti. Mi phng thc
sau y nhn vo mt i s nguyn cho bit ch s (nh t 0) ca ct m d liu s c tr
404
Chng 10: C s d liu
405
Chng 10: C s d liu
Bng 10.5 Cc thnh vin thng dng ca cc lp data-reader
Thnh vin
M t
Thuc tnh
FieldCount
IsClosed
Item
Phng thc
GetDataTypeName
GetFieldType
GetName
Ly tn ca ct c th (ct ny c ch nh bng mt ch s
nguynnh s t 0).
GetOrdinal
Ly s th t ct (nh s t 0) ng vi mt tn ct c th.
GetSchemaTable
IsDBNull
NextResult
Read
Data-reader Server v Oracle cng cha cc phng thc thc hin vic ly d liu thuc cc
kiu d liu c trng ca data-source. V d, SqlDataReader cha cc phng thc nh
GetSqlByte, GetSqlDecimal, v GetSqlMoney, v OracleDataReader cha cc phng thc nh
GetOracleLob, GetOracleNumber, v GetOracleMonthSpan. Bn hy tham kho ti liu .NET
Framework SDK bit thm chi tit.
Khi hon tt vi data-reader, bn nn gi phng thc Close c th s dng li kt ni
c s d liu. IDataReader tha k System.IDisposable; ngha l mi lp data-reader u
hin thc phng thc Dispose. Phng thc ny s t ng gi Close, cho nn lnh using l
mt cch rt r rng v hiu qu khi s dng data-reader.
406
Chng 10: C s d liu
407
Chng 10: C s d liu
while (reader.Read()) {
Console.WriteLine("{0,18:D} - {1} {2}",
reader.GetDateTime(0),
// Ly d liu nh kiu
reader["FirstName"],
// S dng ch s chui
reader[2]);
// S dng ch s th t
}
// X l tp kt qu th hai v hin th chi tit
// v cc ct v cc kiu d liu trong tp kt qu.
reader.NextResult();
Console.WriteLine("Employee Table Metadata.");
for (int field = 0; field < reader.FieldCount; field++) {
Console.WriteLine("
Column Name:{0}
Type:{1}",
reader.GetName(field),
reader.GetDataTypeName(field));
}
}
}
Console.ReadLine();
}
}
6.
SQL Server 2000 v MSDE trc tip h tr XML. Bn ch cn thm mnh FOR XML AUTO
vo cui truy vn SQL cho bit rng cc kt qu s c tr v dng XML. Theo mc
nh, dng XML ny khng phi l mt ti liu XML y . Thay vo , n tr v kt qu
ca mi bn ghi theo tng phn t (element) ring r, vi tt c cc trng (field) u l c
tnh (attribute). V d, truy vn sau y:
SELECT CustomerID, CompanyName FROM Customers FOR XML AUTO
408
Chng 10: C s d liu
V d di y trnh by cch ly kt qu dng XML bng mnh FOR XML v phng thc
ExecuteXmlReader. Ch rng, kt ni khng th c s dng cho by k cu lnh no khc
trong khi XmlReader ang m. Bn nn x l kt qu cng nhanh cng tt v phi lun ng
XmlReader li (Chng 5 c rt nhiu v d trnh by cch s dng lp XmlReader).
using System;
using System.Xml;
using System.Data;
using System.Data.SqlClient;
public class XmlQueryExample {
409
Chng 10: C s d liu
while (reader.Read()) {
reader.MoveToAttribute(i);
Console.Write("
{0}: {1}",
reader.Name, reader.Value);
}
410
Chng 10: C s d liu
reader.MoveToElement();
Console.WriteLine();
}
}
} catch (Exception ex) {
Console.WriteLine(ex.ToString());
} finally {
// Bo m reader ng.
if (reader != null) reader.Close();
}
}
Console.ReadLine();
}
}
CustomerID: ALFKI
Element: Customers
CustomerID: ANTON
Element: Customers
CustomerID: GOURL
...
411
Chng 10: C s d liu
// M kt ni c s d liu.
con.Open();
doc.DocumentElement.AppendChild(newNode);
newNode = doc.ReadNode(reader);
}
}
7.
S dng COM Interop truy xut chc nng ca Microsoft SQLDMO Object
Library. To mt i tng Application ri gi phng thc
ListAvailableSQLServers ca n. ListAvailableSQLServers s tr v i tng
NameList, l mt tp hp cha tn ca mi i tng SQL Server 2000 c tm
thy trn mng.
412
Chng 10: C s d liu
Th vin lp .NET Framework khng c chc nng tm cc SQL Server cha bit; tuy nhin,
cng vic ny khng my kh khn vi Microsoft SQLDMO Object Library (c truy xut
qua COM Interop). Mc 15.6 s trnh by chi tit cch to mt Interop Assembly thc hin
vic truy xut n mt thnh phn COM. Nu ang s dng Microsoft Visual Studio .NET,
bn hy thm mt tham chiu n Microsoft SQLDMO Object Library c lit k trong th
COM ca hp thoi Add Reference (xem hnh 10.1).
Hnh 10.1 Chn Microsoft SQLDMO Object Library trong hp thoi Add Reference
413
Chng 10: C s d liu
// X l tp hp NameList.
if (names.Count == 0) {
Console.WriteLine("No SQL Servers visible on the network.");
} else {
Console.WriteLine("
}
}
Console.ReadLine();
}
}
8.
414
Chng 10: C s d liu
Khng c OLE DB provider hay provider c-qun-l no cho Excel. Tuy nhin, bn c th
s dng Microsoft Excel ODBC Driver (c ci t mc nh cng vi Excel) kt hp vi
ODBC .NET provider (i km vi .NET Framework 1.1 v Visual Studio .NET 2003).
Trong chui kt ni, bn cn ch nh driver m bn ang s dng v tn file Excel. V d
di y ch n file test.xls trong th mc startup ca ng dng:
private string ConnectionString = "Driver={Microsoft Excel Driver
(*.xls)};DriverId=790;Dbq=" + Application.StartupPath + "\\test.xls;";
Sau khi kt ni, bn c th thc hin hai kiu thao tc: SELECT hay INSERT. Thay v s dng
bng, bn chn hay chn da vo tn sheet. Tn sheet phi kt thc bng du la ( $) v c
t trong du ngoc vung (nu khng, s sinh ra li c php). nh dng b b qua, v hng
u tin t ng c s dng lm cc tn ct.
V d di y trch v hin th tt c cc hng trong Sheet1. Hnh 10.2 l file Excel gc. Hnh
10.3 l d liu c trnh by trn form.
private void ExcelView_Load (System.Object sender, System.EventArgs e)
{
OdbcConnection Con = new OdbcConnection(ConnectionString);
OdbcDataAdapter Adapter = new OdbcDataAdapter("SELECT * FROM [Sheet1$]",
Con);
DataSet Ds = new DataSet();
try
{
Con.Open();
Adapter.Fill(Ds, "Sheet1");
}
catch (Exception Err)
{
MessageBox.Show(Err.ToString());
}
finally
{
Con.Close();
}
grid.DataSource = Ds.Tables["Sheet1"];
}
415
Chng 10: C s d liu
9.
2.
T thanh trnh n chnh ca IDE, chn Project | Add New Item hin th hp thoi
Add New Item (xem hnh 10.4).
416
Chng 10: C s d liu
3.
4.
417
Chng 10: C s d liu
5.
6.
418
Chng 10: C s d liu
419
Chng 10: C s d liu
7.
8.
Thm bng Categories v Products vo danh sch Selected Item(s) (xem hnh 10.9).
Nhp Next.
420
Chng 10: C s d liu
9.
421
Chng 10: C s d liu
10. Trong ca s k, chng ta chn cc bng v cc trng d liu cn hin th. Gi nguyn
tt c cc trng d liu tr trng Picture thuc bng Categories (xem hnh 10.11).
Nhp Next.
422
Chng 10: C s d liu
11. Chng ta mun hin th tt c cc bn ghi trong mt khung li, cho nn gi nguyn
cc thit lp mc nh (xem hnh 10.12). Nhp Finish kt thc trnh thut s. Sau vi
giy, DataForm mi s c kt sinh v hin th (xem hnh 10.13).
423
Chng 10: C s d liu
Hnh 10.13 DataForm1.vb
12. Cui cng, bn phi bo cho ng dng bit form Data Form Wizard s l i tng
startup. Nhp phi vo d n trong Solution Explorer, v chn Properties. Chn
DataFormWiz.DataForm1 t danh sch Startup object. Nhp OK.
424
Chng 10: C s d liu
10.
Crystal Reports for Visual Studio .NET l cng c bo co chun dnh cho Visual Studio
.NET. Bn c th tip qun nhng bo co ny trn nn Web v Windows, v phn b chng
dng dch v Web trn mt server.
Mc ny s trnh by tng bc mt cch sinh bo co t mt ngun d liu. Trc tin, bn
hy to mt d n ng dng Windows mi vi tn l CrystalExample.
c th hin th Crystal Report, bn cn thc hin hai bc chnh: th nht l xy dng mt
bn bo co, v th hai l thm mt iu kim CrystalReportViewer vo form trnh by
bo co.
Vic xy dng mt bn bo co c m t trong 11 bc nh di y:
1.
T thanh trnh n chnh ca IDE, chn Project | Add New Item v chn Crystal Report
(xem hnh 10.16). Nhp Open.
425
Chng 10: C s d liu
2.
Crystal Report Wizard s nhc ta chn kiu bo co cn xy dng (xem hnh 10.17).
Gi nguyn bo co chun mc nh, ri nhp OK.
3.
Crystal Report Wizard hin th hp thoi Standard Report Expert (xem hnh 10.18).
Nhp vo du cng k th mc OLE DB (ADO) trong hp danh sch Available Data
Sources.
426
Chng 10: C s d liu
4.
Bn s thy hp thoi OLE DB (ADO) (xem hnh 10.19). Chn Microsoft OLE DB
Provider for SQL Server, ri nhp Next.
427
Chng 10: C s d liu
Hnh 10.19 Chn Microsoft OLE DB Provider for SQL Server
5.
6.
428
Chng 10: C s d liu
7.
429
Chng 10: C s d liu
Hnh 10.22 Kha chnh trong Categories c nh x n kha ngoi trong Products
8.
430
Chng 10: C s d liu
9.
10. Nhp Next nhiu ln chp nhn cc thit lp mc nh cho cc th Total, Top N,
Chart, v Select. Khi n th cui cng (th Style), g tiu Category - Product
Report (xem hnh 10.25).
431
Chng 10: C s d liu
432
Chng 10: C s d liu
433
Chng 10: C s d liu
434
Chng 10: C s d liu
435
11
436
437
Chng 11: Lp trnh mng
Ly a ch IP v thng tin DNS v my tnh hin hnh v cc min khc trn World
Wide Web (mc 11.5 v 11.6).
Gi thng ip ping (mc 11.7) v giao tip bng giao thc TCP v UDP (mc 11.8
n 11.13).
1.
.NET Framework cung cp vi c ch dng gi d liu thng qua HTTP. Mt trong nhng
cch d nht l s dng lp System.Net.WebClient. N cung cp nhng phng thc mc-cao
nh DownloadFile v UploadFile. Cc phng thc ny khng c s h tr ni ti no cho
giao tip bt ng b, hay xc thc. Nu cn cc tnh nng ny, bn c th s dng cc chc
nng phc tp hn do lp WebRequest v WebResponse cung cp (s c m t trong mc
11.2 v 11.3).
Chng trnh v d di y s download file winXP.gif t localhost v lu vo a.
using System;
using System.Net;
using System.IO;
public class Download {
private static void Main() {
string remoteUri =
"http://localhost/winXP.gif";
string localFileName = "winXP.gif";
WebClient client = new WebClient();
438
Chng 11: Lp trnh mng
2.
S dng lp WebRequest to yu cu, lp WebResponse nhn p ng t webserver, v mt s dng reader (StreamReader i vi d liu HTML hay text, hoc
BinaryReader i vi d liu nh phn) phn tch p ng .
2.
3.
4.
Cng vic cui cng l x l stream ny, chng hn ghi n ra file ri hin th trong ng
dng ca bn...
439
Chng 11: Lp trnh mng
public class DownloadForm : System.Windows.Forms.Form {
private System.Windows.Forms.PictureBox picBox;
private System.Windows.Forms.TextBox textBox;
// (B qua phn m designer.)
private void DownloadForm_Load(object sender, System.EventArgs e) {
string picUri =
"http://localhost/winXP.gif";
string htmlUri =
"http://localhost/iishelp/iis/misc/default.asp";
// To yu cu.
WebRequest requestPic = WebRequest.Create(picUri);
WebRequest requestHtml = WebRequest.Create(htmlUri);
// Nhn p ng. Cng vic ny s mt nhiu
// thi gian, c bit khi file cn ly qu ln.
WebResponse responsePic = requestPic.GetResponse();
WebResponse responseHtml = requestHtml.GetResponse();
// c response stream.
Image downloadedImage =
Image.FromStream(responsePic.GetResponseStream());
StreamReader r =
new StreamReader(responseHtml.GetResponseStream());
string htmlContent = r.ReadToEnd();
r.Close();
// Hin th nh.
picBox.Image = downloadedImage;
440
Chng 11: Lp trnh mng
3.
Mt s website yu cu thng tin xc thc t ngi dng. Khi kt ni thng qua trnh duyt,
thng tin ny c th c cung cp mt cch trong sut (v d, mt intranet-site cc b c s
dng Integrated Windows authentication), hoc trnh duyt c th yu cu thng tin ny thng
qua mt hp thoi ng nhp. Khi truy xut mt trang web bng lp trnh th m lnh ca bn
cn phi cung cp cc thng tin ny.
441
Chng 11: Lp trnh mng
442
Chng 11: Lp trnh mng
requestC.ClientCertificates.Add(cert);
// (By gi bt u ly v x l p ng.)
}
}
4.
.NET Framework khng cung cp iu kim no dng dch ni dung HTML. Tuy nhin,
chc nng ny li rt cn thit cho vic hin th mt ni dung HTML cc b (k c nhng ti
liu HTML ng gi theo nh dng file tr gip ca Windows) cng nh cc thng tin no
t web.
hin th mt trang HTML, bn c th thm mt ca s Internet Explorer vo ng dng
da-trn-Windows. Ca s ny khng ch h tr HTML, m cn h tr JavaScript, Microsoft
Visual Basic Scripting Edition (VBScript), ActiveX control, v rt nhiu plug-in khc, ty
thuc vo cu hnh h thng ca bn (c th gm c Microsoft Word, Microsoft Excel, v
Adobe Acrobat Reader). Bn cn c th s dng iu kim Web Browser duyt mt th
mc trong a cc b, hay hin th cc file trn mt FTP (File Transfer Protocol) site.
thm Web Browser vo mt d n trong Microsoft Visual Studio .NET, bn hy nhp phi
vo hp cng c v chn Add/Remove Items. Sau , chn th COM Components, v chn
Microsoft Web Browser (xem hnh 11.2). Theo , iu kim Microsoft Web Browser s c
thm vo hp cng c. Khi bn th iu kim ny vo form, cc Interop Assembly cn thit s
c to ra v thm vo d n ca bn.
443
Chng 11: Lp trnh mng
Hnh 11.2 Chn Microsoft Web Browser trong hp thoi Customize Toolbox
444
Chng 11: Lp trnh mng
445
Chng 11: Lp trnh mng
private void WebBrowser_Load(object sender, System.EventArgs e) {
explorer.GoHome();
}
try {
explorer.GoForward();
} catch {
MessageBox.Show("Already on last page.");
}
}
try {
explorer.GoBack();
} catch {
MessageBox.Show("Already on first page.");
}
}
}
446
Chng 11: Lp trnh mng
5.
447
Chng 11: Lp trnh mng
6.
foreach (IPAddress ip in
Dns.GetHostByName("www.microsoft.com").AddressList) {
Console.ReadLine();
}
}
448
Chng 11: Lp trnh mng
Ping mt a ch IP
7.
// To mt raw-socket.
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Raw, ProtocolType.Icmp);
449
Chng 11: Lp trnh mng
// Thit lp endpoint cho my client.
IPHostEntry fromHE = Dns.GetHostByName(Dns.GetHostName());
IPEndPoint ipEndPointFrom =
new IPEndPoint(fromHE.AddressList[0], 0);
EndPoint EndPointFrom = (ipEndPointFrom);
// To packet.
int PacketSize = 0;
IcmpPacket packet = new IcmpPacket();
for (int j = 0; j < 1; j++) {
packet.Type = ICMP_ECHO;
packet.SubCode = 0;
packet.CheckSum = UInt16.Parse("0");
packet.Identifier
= UInt16.Parse("45");
packet.SequenceNumber
= UInt16.Parse("0");
PacketSize = PingData + 8;
450
Chng 11: Lp trnh mng
cksum_buffer[i] = BitConverter.ToUInt16(icmp_pkt_buffer,
icmp_header_buffer_index);
icmp_header_buffer_index += 2;
}
= u_cksum;
// Tun t ha packet.
byte[] sendbuf = new byte[PacketSize];
index = Serialize(packet, sendbuf, PacketSize, PingData);
// Bt u tnh gi.
dwStart = System.Environment.TickCount;
socket.SendTo(sendbuf, PacketSize, 0, epServer);
451
Chng 11: Lp trnh mng
// (B qua phng thc private dng tnh checksum.)
}
}
Console.ReadLine();
}
}
Th nghim ping cho php bn xc minh cc my tnh khc c online hay khng. N cng
c th hu ch khi ng dng ca bn cn nh gi nhng my tnh khc nhau ( xa) nhng
cho cng ni dung xc nh my no c thi gian giao tip mng thp nht.
452
Chng 11: Lp trnh mng
8.
TCP l mt giao thc ng tin cy da-trn-kt-ni, cho php hai my tnh giao tip thng qua
mt network. to mt kt ni TCP, mt my tnh phi ng vai tr l server v bt u
lng nghe trn mt endpoint c th (endpoint c nh ngha l mt a ch IP, cho bit my
tnh v s port). Mt my tnh khc phi ng vai tr l client v gi mt yu cu kt ni n
endpoint m my tnh th nht ang lng nghe trn . Mt khi kt ni c thit lp, hai my
tnh c th trao i cc thng ip vi nhau. C hai my tnh ch n gin c/ghi t mt
System.Net.Sockets.NetworkStream.
Mt khi kt ni TCP c thit lp, hai my tnh c th gi bt k kiu d liu no bng cch
ghi d liu ra NetworkStream. Tuy nhin, tng hay l bt u thit k mt ng dng
mng bng cch nh ngha giao thc mc-ng-dng m client v server s s dng giao
tip. Giao thc ny cha cc hng m t cc lnh c php, bo m m lnh ca ng dng
khng cha cc chui giao tip c vit cng.
namespace SharedComponent {
453
Chng 11: Lp trnh mng
try {
// i yu cu kt ni, v tr v TcpClient.
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection accepted.");
454
Chng 11: Lp trnh mng
// To BinaryReader c t stream.
BinaryReader r = new BinaryReader(stream);
if (r.ReadString() == ClientMessages.RequestConnect) {
w.Write(ServerMessages.AcknowledgeOK);
Console.WriteLine("Connection completed.");
Console.WriteLine();
Console.WriteLine("Disconnect request received.");
w.Write(ServerMessages.Disconnect);
} else {
Console.WriteLine("Could not complete connection.");
}
// ng socket.
client.Close();
Console.WriteLine("Connection closed.");
Console.ReadLine();
}
}
455
Chng 11: Lp trnh mng
// To BinaryReader c t stream.
BinaryReader r = new BinaryReader(stream);
w.Write(ClientMessages.RequestConnect);
if (r.ReadString() == ServerMessages.AcknowledgeOK) {
Console.WriteLine("Connected.");
Console.WriteLine("Press Enter to disconnect.");
Console.ReadLine();
Console.WriteLine("Disconnecting...");
456
Chng 11: Lp trnh mng
w.Write(ClientMessages.Disconnect);
} else {
Console.WriteLine("Connection not completed.");
}
// ng connection socket.
client.Close();
Console.WriteLine("Port closed.");
} catch (Exception err) {
Console.WriteLine(err.ToString());
}
Console.ReadLine();
}
}
Disconnecting...
Port closed.
457
Chng 11: Lp trnh mng
Ly a ch IP ca client t kt ni socket
9.
Lp TcpClient khng cho php bn thu ly socket nm di hay bt c thng tin no v port
v a ch IP ca client. Lp ny c cung cp thuc tnh Socket, nhng thuc tnh ny l
c-bo-v (protected) v do khng th truy xut c t cc lp phi dn xut. truy
xut socket nm di, bn c hai ty chn:
To mt lp ty bin dn xut t TcpClient. Lp ny c th truy xut thuc tnh cbo-v Socket v trng n ra thng qua mt thuc tnh mi. Sau , bn phi s dng
lp ty bin ny thay cho TcpClient.
try {
458
Chng 11: Lp trnh mng
// i yu cu kt ni, v tr v mt Socket.
Socket socket = listener.AcceptSocket();
Console.WriteLine("Connection accepted.");
// To network stream.
NetworkStream stream = new NetworkStream(socket);
// To BinaryWriter ghi ra stream.
BinaryWriter w = new BinaryWriter(stream);
// To BinaryReader c t stream.
BinaryReader r = new BinaryReader(stream);
if (r.ReadString() == ClientMessages.RequestConnect) {
w.Write(ServerMessages.AcknowledgeOK);
Console.WriteLine("Connection completed.");
// Ly a ch IP ca client.
Console.WriteLine("The client is from IP address: " +
((IPEndPoint)socket.RemoteEndPoint).Address.ToString());
Console.Write("The client uses local port: " +
((IPEndPoint)socket.RemoteEndPoint).Port.ToString());
while (r.ReadString() != ClientMessages.Disconnect)
{}
Console.WriteLine();
Console.WriteLine("Disconnect request received.");
w.Write(ServerMessages.Disconnect);
} else {
Console.WriteLine("Could not complete connection.");
}
// ng socket.
socket.Close();
459
Chng 11: Lp trnh mng
Console.WriteLine("Connection closed.");
// ng socket nm di (ngng lng nghe yu cu mi).
listener.Stop();
Console.WriteLine("Listener stopped.");
} catch (Exception err) {
Console.WriteLine(err.ToString());
}
Console.ReadLine();
}
}
10.
460
Chng 11: Lp trnh mng
cung cp thuc tnh Socket, nhng kh nng truy xut ca n l protected, ngha l bn
khng th truy xut n mt cch trc tip. Thay vo , bn phi dn xut mt lp mi t
TcpListener:
public class CustomTcpListener : TcpListener {
public Socket Socket {
get {return base.Server;}
}
public CustomTcpListener(IPAddress ip, int port) : base(ip, port) {}
}
To mt TCP-server h-tr-a-tiu-trnh
11.
461
Chng 11: Lp trnh mng
using System.Threading;
using SharedComponent;
this.client = client;
this.ID = ID;
}
// To BinaryReader c t stream.
BinaryReader r = new BinaryReader(stream);
if (r.ReadString() == ClientMessages.RequestConnect) {
w.Write(ServerMessages.AcknowledgeOK);
Console.WriteLine(ID + ": Connection completed.");
while (r.ReadString() != ClientMessages.Disconnect) {}
}else {
Console.WriteLine(ID + ": Could not complete connection.");
}
462
Chng 11: Lp trnh mng
// ng socket.
client.Close();
Console.WriteLine(ID + ": Client connection closed.");
Console.ReadLine();
}
}
K tip, thay i m lnh ca server sao cho n lp lin tc, to ra cc th hin ClientHandler
mi khi cn v chy chng trong cc tiu trnh mi. Di y l m lnh c sa i:
public class TcpServerTest {
private static void Main() {
TcpListener listener =
new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
Console.WriteLine("Server: About to initialize port.");
listener.Start();
Console.WriteLine("Server: Listening for a connection...");
int clientNum = 0;
while (true) {
try {
// i yu cu kt ni, v tr v mt TcpClient.
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Server: Connection accepted.");
// To mt i tng mi x l kt ni ny.
clientNum++;
ClientHandler handler =
new ClientHandler(client, "Client " +
clientNum.ToString());
// Khi ng i tng ny lm vic trong
463
Chng 11: Lp trnh mng
// mt tiu trnh khc.
Thread handlerThread =
new Thread(new ThreadStart(handler.Start));
handlerThread.IsBackground = true;
handlerThread.Start();
// (Bn cng c th thm Handler v HandlerThread vo
//
12.
464
Chng 11: Lp trnh mng
465
Chng 11: Lp trnh mng
466
Chng 11: Lp trnh mng
}
fileStop = true;
Console.WriteLine(ID + ": Disconnect request received.");
} else {
Console.WriteLine(ID + ": Could not complete connection.");
}
// ng kt ni.
client.Close();
Console.WriteLine(ID + ": Client connection closed.");
Console.ReadLine();
}
467
Chng 11: Lp trnh mng
new AsyncCallback(StreamData), null);
} else {
13.
UDP l mt giao thc phi kt ni, khng c bt k iu khin dng chy hay kim tra li no.
Khc vi TCP, UDP s khng c s dng nhng ni cn n giao tip ng tin cy. Tuy
nhin, v chi ph thp hn, UDP thng c s dng cho cc ng dng "chatty", ti chp
nhn mt mt vi thng ip. V d, gi s bn mun to mt network m trong , cc client
gi thng tin v nhit hin thi ti v tr ca chng n mt server mi vi pht. Bn c th
s dng UDP trong trng hp ny v tn s giao tip cao v thit hi do mt packet l khng
ng k (v server c th tip tc s dng nhit nhn c cui cng).
ng dng di y s dng hai tiu trnh: mt nhn thng ip v mt gi thng ip.
th nghim ng dng ny, hy np hai th hin cng mt lc. Trn my tnh A, cho bit
a ch IP ca my tnh B. Trn my tnh B, cho bit a ch IP ca my tnh A. Theo , bn
c th gi qua li thng ip dng text (bn c th m phng th nghim ny trn mt my
n bng cch s dng hai port khc nhau v a ch loopback).
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class UdpTest {
private static int localPort;
private static void Main() {
468
Chng 11: Lp trnh mng
try {
string text;
do {
text = Console.ReadLine();
if (text != "") {
469
Chng 11: Lp trnh mng
}
} while (text != "");
} catch (Exception err) {
Console.WriteLine(err.ToString());
}
Console.ReadLine();
}
private static void ReceiveData() {
UdpClient client = new UdpClient(localPort);
while (true) {
try {
// Nhn d liu (byte).
IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
byte[] data = client.Receive(ref anyIP);
470
Chng 11: Lp trnh mng
Hi there!
14.
471
Chng 11: Lp trnh mng
SmtpMail.SmtpServer = "test.mailserver.com";
SmtpMail.Send(myMessage);
15.
MAPI l giao din cho php bn tng tc vi cc tnh nng mailing c tch hp trong h
iu hnh Windows. Bn c th s dng MAPI (thng qua cc hm API khng-c-qun-l,
hoc thng qua thnh phn MAPI i cng vi Visual Studio 6) tng tc vi mail-client
mc nh (thng l Microsoft Outlook hay Outlook Express). Cc tc v bao gm: ly thng
tin contact t s a ch, ly thng ip trong Inbox, son v gi thng ip. ng tic, khng
c lp no s dng MAPI trong .NET Framework. Tuy nhin, bn c th s dng th vin
khng-c-qun-l Mapi32.dll.
Thch thc chnh khi s dng Simple MAPI trong .NET l marshal cc cu trc c s dng
trong .NET thnh cc cu trc m Simple MAPI cn, sau marshal cc cu trc do Simple
MAPI tr v cho ng dng .NET. y khng phi l mt cng vic n gin. Tuy nhin,
Microsoft cung cp mt gii php ton vn trong mt thnh phn C# tng qut (c th ti min
ph). Bn c th s dng hai d n di y:
472
Chng 11: Lp trnh mng
min
ph)
Thomas
Scheidegger
cung
[http://www.codeproject.com/ csharp/simplemapidotnet.asp].
cp
ti
473
Chng 11: Lp trnh mng
474
12
475
476
Chng 12: Dch v Web XML v Remoting
Nng cao tnh linh hot ca cc lp proxy bng cch khng vit m cng cho a ch
ca dch v Web XML (mc 12.1).
S dng k thut caching nng cao hiu nng v kh nng phc v (tnh quy m)
ca dch v Web XML (mc 12.2 v 12.3).
To phng thc giao dch cho dch v Web XML (mc 12.4).
Truyn thng tin xc thc cho mt dch v Web XML bng proxy (mc 12.5).
Gi bt ng b mt phng thc ca dch v Web XML (mc 12.6).
Remoting l mt cng ngh c trng ca .NET dnh cho cc i tng phn tn v c xem
nh l mt hu du ca cng ngh DCOM. Cng ngh ny l tng cho cc h thng inhouse4; trong , tt c cc ng dng u c xy dng trn nn .NET, chng hn backbone
ca mt h thng x l ha n. Remoting cho php cc chun giao tip khc nhau, chng hn
cc thng ip nh phn nh gn v cc kt ni TCP/IP hiu qu hn m dch v Web XML
khng h tr. Ngoi ra, Remoting cn l cng ngh duy nht h tr cc i tng c trng
thi, v giao tip hai chiu thng qua callback. N cng l cng ngh duy nht cho php gi
cc i tng .NET ty bin qua mng. Trong chng ny, chng ta s bn mt s mc lin
quan n Remoting sau:
in-house system: H thng cng ngh thng tin do phng IT ca mt cng ty xy dng nn.
477
Chng 12: Dch v Web XML v Remoting
1.
478
Chng 12: Dch v Web XML v Remoting
<configuration>
<appSettings>
<add key="AppName.ServerName.ServiceName"
value="http://localhost/WebServices/MyService.asmx"/>
</appSettings>
</configuration>
2.
Bn mun nng cao hiu nng ca dch v Web XML bng cch lu tr gi tr
tr v ca mt phng thc web.
479
Chng 12: Dch v Web XML v Remoting
public string GetDate() {
return DateTime.Now.ToString();
}
}
3.
Cch thc lm vic ca data-caching vi mt dch v Web XML cng ging nh vi mt trang
web. Bn c th lu tr d liu vo cache bng m trang web v ly n v trong mt dch v
Web XML, hay ngc li. c thm thng tin v data-caching v cc kiu chnh sch ht
hiu lc (expiration policy) m n h tr, bn hy tham kho mc 7.15.
im khc bit duy nht gia caching trong mt dch v Web XML v caching trong mt
trang web l: Trong dch v Web XML, bn khng th thu ly i tng Cache nh mt thuc
tnh ni ti; thay vo , bn cn truy xut cache thng qua thuc tnh tnh
HttpContext.Current.
V d di y trnh by mt dch v Web XML vi hai phng thc web:
480
Chng 12: Dch v Web XML v Remoting
// d liu vo mng.
int i = 0;
foreach (DataRow row in dt.Rows) {
names[i] = row["ProductName"].ToString();
i += 1;
}
481
Chng 12: Dch v Web XML v Remoting
return names;
}
482
Chng 12: Dch v Web XML v Remoting
4.
Kch hot mt phin giao dch t ng bng cch chn mt gi tr thuc kiu lit
k System.EnterpriseServices.TransactionOption v p dng n cho thuc tnh
TransactionOption ca c tnh WebMethod.
Trong ASP.NET, dch v Web XML h tr cc phin giao dch t ng (c th c kch hot
trn mi phng thc). Khi c kch hot, bt k ngun d liu no c h tr giao dch
COM+ s t ng c a vo phin giao dch hin hnh khi n c s dng trong m lnh
ca bn. Phin giao dch s t ng c commit khi phng thc web hon tt. Phin giao
dch ny c roll-back khi c bt k ngoi l cha-c-th-l no xy ra hoc bn gi
phng thc SetAbort ca lp System.EnterpriseServices.ContextUtil.
kch hot vic h tr giao dch cho mt phng thc web, bn cn thit lp thuc tnh
TransactionOption ca c tnh WebMethod l RequiresNew. V d, phng thc web (h tr
giao dch) di y s xa cc bn ghi trong mt c s d liu v ri hy b phin giao dch
ny. s dng on m ny, bn phi thm mt tham chiu n
System.EnterpriseServices.dll.
using System;
using System.Data.SqlClient;
using System.Web.Services;
using System.EnterpriseServices;
[WebMethod(TransactionOption=TransactionOption.RequiresNew)]
public void FailedTransaction() {
// To kt ni.
SqlConnection con = new SqlConnection(connectionString);
// To cu truy vn SQL.
SqlCommand cmd = new SqlCommand("DELETE * FROM Customers", con);
483
Chng 12: Dch v Web XML v Remoting
484
Chng 12: Dch v Web XML v Remoting
V bn cht phi trng thi (stateless) ca giao thc HTTP, nn mt phng thc web ch c
th gp phn lm gc ca mt phin giao dch; ngha l bn khng th a nhiu hn mt
phng thc web vo cng mt phin giao dch. Mc d thuc tnh TransactionOption chp
nhn tt c cc gi tr TransactionOption chun, nhng cc gi tr ny khng mang ngha
nh mong i. V d, Disabled, NotSupported, v Supported u c cng tc dng l v hiu
vic h tr giao dch. Tng t, c Required v RequiresNew u kch hot vic h tr giao
dch v khi chy mt phin giao dch mi. Bn nn s dng RequiresNew trong cc phng
thc web v tn ca n tng xng vi hnh vi tht s (!).
485
Chng 12: Dch v Web XML v Remoting
5.
Cng ging nh trang web, dch v Web XML c th c s dng cng vi IIS
authentication. Nhng g bn cn lm l t dch v Web XML vo mt th mc o hn ch
vic truy xut nc danh. Tuy nhin, nu ngi dng c th cung cp cc thng tin nh x n
mt ti khon ngi dng hp l, ngi dng ny s c xc thc v bn c th ly cc
thng tin xc thc ny thng qua i tng WebService.User.
Khc vi trang web, dch v Web XML khng c sn phng thc no thu ly thng tin xc
thc t client v dch v Web XML c thc thi bi cc ng dng khc, ch khng phi bi
ngi dng. Do , ng dng ang tng tc vi dch v Web XML s chu trch nhim nhp
bt k thng tin xc thc cn thit no.
V d sau m phng mt dch v Web XML c thc hin xc thc ngi dng. GetIISUser tr
v ngi dng c IIS xc thc. Nu truy xut nc danh c php th kt qu s l mt
chui rng. Nu truy xut nc danh b t chi th kt qu s l mt chui c dng
[DomainName]\[UserName] hay [ComputerName]\[UserName].
public class AuthenticationTest : System.Web.Services.WebService {
486
Chng 12: Dch v Web XML v Remoting
Console.WriteLine(proxy.GetIISUser());
Console.WriteLine(proxy.GetIISUser());
6.
[WebMethod]
public int Wait() {
487
Chng 12: Dch v Web XML v Remoting
[MTAThread]
private static void Main() {
488
Chng 12: Dch v Web XML v Remoting
Trong trng hp ny, thi gian tri qua nh hn thi gian tr hon tng cng:
Completed after 00:00:20.2591312
Total delay time: 47
localhost.WaitService proxy =
(localhost.WaitService)handle.AsyncState;
int result = proxy.EndWait(handle);
Console.WriteLine("Waited " + result.ToString());
}
7.
To lp kh-truy-xut-t-xa
489
Chng 12: Dch v Web XML v Remoting
nng qua cc nn hay cc bin tin cy, Remoting l la chn tt nht cho mt h thng m
trong tt c cc thnh phn u c xy dng trn nn .NET v h iu hnh Windows.
s dng .NET Remoting, bn cn cc phn sau (mi phn phi thuc v mt assembly
ring bit):
Hnh sau m t s tng tc gia ba phn trn. Trong v d ny, ch c mt client. Tuy nhin,
cng c th c nhiu client to ra cc th hin ca lp kh-truy-xut-t-xa cng mt lc.
Trong trng hp ny, mi client s c mt i tng kh-truy-xut-t-xa ca chnh n, v tt
c cc i tng ny s thuc v min ng dng ca host.
Ordinary Object
Remotable Object
Cross-application call
Client
Component host
490
Chng 12: Dch v Web XML v Remoting
// To cc i tng ADO.NET.
SqlConnection con = new SqlConnection(connectionString);
SqlCommand com = new SqlCommand(SQL, con);
SqlDataAdapter adapter = new SqlDataAdapter(com);
DataSet ds = new DataSet();
return ds.Tables[0];
}
491
Chng 12: Dch v Web XML v Remoting
using System;
using System.Runtime.Remoting;
492
Chng 12: Dch v Web XML v Remoting
</application>
</system.runtime.remoting>
</configuration>
</application>
</system.runtime.remoting>
493
Chng 12: Dch v Web XML v Remoting
</configuration>
494
Chng 12: Dch v Web XML v Remoting
.NET cho php bn ng k cc lp kh-truy-xut-t-xa mt cch d dng thng qua vic vit
file cu hnh hoc vit m chng trnh. Xt v d trong mc 12.7. ng k bng m
chng trnh, trc ht bn phi g b nhng khai bo lp trong file cu hnh trn server nh
sau:
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="9080" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
495
Chng 12: Dch v Web XML v Remoting
using System.Runtime.Remoting.Channels.Tcp;
using System.Reflection;
// Ly knh Remoting c ng k.
TcpChannel channel =
(TcpChannel)ChannelServices.RegisteredChannels[0];
// Np RemoteObject.dll.
Assembly assembly = Assembly.LoadFrom("RemoteObject.dll");
496
Chng 12: Dch v Web XML v Remoting
9.
<channels>
<channel ref="http">
497
Chng 12: Dch v Web XML v Remoting
thay cho SOAP formatter (mc nh). -->
<!-<serverProviders>
<formatter ref="binary"/>
</serverProviders>
-->
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
10.
Client phi s dng knh hai chiu n c th nhn cc kt ni do server khi to.
498
Chng 12: Dch v Web XML v Remoting
tng xa khng th trc tip pht sinh s kin n mt lp bnh thng v lp bnh
thng khng th c truy xut t cc min ng dng khc.
Bn phi thay i cc file cu hnh ca client v server cho php full serialization
(iu ny khng cn thit vi .NET 1.0).
tmr.Interval = 10000;
tmr.Elapsed += new ElapsedEventHandler(tmrCallback);
tmr.Start();
}
tmr.Enabled = false;
if (TaskComplete != null) {
TaskComplete(this,
new TaskCompleteEventArgs("Task completed on server"));
}
}
499
Chng 12: Dch v Web XML v Remoting
return null;
}
}
[Serializable()]
public class TaskCompleteEventArgs : EventArgs {
// Th l s kin xa.
public void OnTaskComplete(object sender,
RemoteObject.TaskCompleteEventArgs e) {
TaskComplete(sender, e);
}
500
Chng 12: Dch v Web XML v Remoting
using System;
using System.Windows.Forms;
using System.Runtime.Remoting;
RemoteObject.RemoteObject remoteObj;
EventListener.EventListener listener;
RemotingConfiguration.Configure("Client.exe.config");
remoteObj = new RemoteObject.RemoteObject();
listener = new EventListener.EventListener();
}
remoteObj.StartTask();
MessageBox.Show("Task has been started.");
}
501
Chng 12: Dch v Web XML v Remoting
private void TaskComplete(object sender,
RemoteObject.TaskCompleteEventArgs e) {
c th lm vic, bn phi chc rng client ang s dng cc knh hai chiu. Do , th
<channel> trong file cu hnh phi trng ging nh sau:
<channel ref="tcp" port="0" />
V khng c ging nh cc v d di y:
<channel ref="tcp server" port="0" />
<channel ref="tcp client" port="0" />
Ngoi ra, bn phi kch hot vic h tr full serialization. Nu khng, server s khng c
php nhn y nhim cho phng thc Listener.TaskCompleted, v s khng th kt ni n
phng thc th l s kin xa. kch hot vic h tr full serialization bn server, bn
cn thay i file cu hnh ca host nh sau:
<configuration>
<system.runtime.remoting>
<application>
<client url="tcp://localhost:9080/Server">
<activated type="RemoteObject.RemoteObject, RemoteObject"/>
</client>
<channels>
<channel ref="tcp" port="0">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
502
Chng 12: Dch v Web XML v Remoting
<system.runtime.remoting>
<application name="SimpleServer" >
<service>
<activated type="RemoteObject.RemoteObject, RemoteObject"/>
</service>
<channels>
<channel ref="tcp" port="9080">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>
11.
Bn mun cu hnh thi gian sng ca mt i tng n-nht hay c-clientkch-hot khi n khng cn c s dng.
503
Chng 12: Dch v Web XML v Remoting
504
Chng 12: Dch v Web XML v Remoting
return lease;
}
Nu mun i tng c thi gian sng v hn, bn ch cn tr v mt tham chiu null thay v
l i tng ILease. Trng hp thng thng nht l bn mun to mt i tng n-nht
chy c lp (v lu di) ngay c khi client khng s dng n.
12.
Ty chn cui cng l linh hot nht trong trng hp bn cn h tr nhiu phin bn. V d,
file cu hnh di y ng k hai phin bn ca RemoteObjects ti hai endpoint khc nhau.
Bn cn ghi r s phin bn v token kha cng khai khi s dng cc assembly trong GAC.
Bn c th tm thy thng tin ny bng cch xem assembly trong Windows Explorer GAC
plug-in (vo th mc C:\Windows\Assembly).
<configuration>
<system.runtime.remoting>
<application>
<service>
<!-- Thng tin type c chia thnh ba hng cho hp vi
bin trang. Trong file cu hnh, thng tin ny phi
c t trn mt hng. -->
505
Chng 12: Dch v Web XML v Remoting
<wellknown mode="SingleCall"
type="RemoteObjects.RemoteObject, RemoteObjects,
Version 1.0.0.1, Culture=neutral,
PublicKeyToken=8b5ed84fd25209e1"
objectUri="RemoteObj" />
<wellknown mode="SingleCall"
type="RemoteObjects.RemoteObject, RemoteObjects,
Version 2.0.0.1, Culture=neutral,
PublicKeyToken=8b5ed84fd25209e1"
objectUri="RemoteObj_2.0" />
</service>
<channels>
<channel ref="tcp server" port="9080" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
File cu hnh ca client khng phi thay i g ht (tr vic cp nht URI, nu cn). Client
chn phin bn m n mun s dng bng URI tng ng.
506
Chng 12: Dch v Web XML v Remoting
13.
Phng thc khng th tr v thng tin no cho client (thng qua mt gi tr tr v hay
mt thng s ByRef).
R rng l cc phng thc mt chiu khng ph hp khi client cn nhn thng tin t server.
Tuy nhin, chng li l tng khi cn khi chy mt kiu tc v no pha server (chng
hn, bt u mt cng vic x l b).
to mt phng thc web mt chiu, bn cn p dng c tnh SoapDocumentMethod (thuc
khng gian tn System.Web.Services.Protocols) cho phng thc thch hp v thit lp
thuc tnh OneWay l true. V d di y l mt dch v Web XML c hai phng thc, mi
phng thc u gy tr hon 10 giy. Mt trong hai phng thc ny s dng c tnh
SoapDocumentMethod ( client khng phi i 10 giy).
using System;
using System.Web.Services;
using System.Web.Services.Protocols;
public class OneWayTestWebService {
[WebMethod()]
public void DoLongTaskWithWait() {
// (Bt u mt tc v ko di v khin client phi i.)
Delay(10);
}
[WebMethod, SoapDocumentMethod(OneWay=true)]
public void DoLongTaskWithoutWait() {
507
Chng 12: Dch v Web XML v Remoting
// (Bt u mt tc v ko di nhng khng khin client phi i.)
Delay(10);
}
private void Delay(int seconds) {
DateTime currentTime = DateTime.Now;
while (DateTime.Now.Subtract(currentTime).TotalSeconds < seconds)
{}
}
}
V d trn gi nh dch v Web XML v client ang s dng SOAP document (mc nh).
Nu ang s dng Remote Procedure Call (RPC), bn hy s dng c tnh tng ng l
SoapRpcMethod nh du phng thc mt chiu.
to mt phng thc mt chiu trong mt thnh phn trn Remoting, bn cn p dng c
tnh OneWay (thuc khng gian tn System.Runtime.Remoting.Messaging) cho phng thc
thch hp. on m di y trnh by mt v d ging nh trn nhng vi mt thnh phn
xa:
using System;
using System.Runtime.Remoting.Messaging;
public class OneWayTestRemoting : MarshalByRefObject {
public void DoLongTaskWithWait() {
// (Bt u mt tc v ko di v khin client phi i.)
Delay(10);
}
[OneWay()]
public void DoLongTaskWithoutWait() {
// (Bt u mt tc v ko di nhng khng khin client phi i.)
Delay(10);
}
private void Delay(int seconds) {
DateTime currentTime = DateTime.Now;
while (DateTime.Now.Subtract(currentTime).TotalSeconds < seconds) {}
}
}
Phng thc mt chiu khng phi l cch duy nht loi b vic tr hon
client. Bn cng c th iu chnh client gi phng thc web mt cch bt ng
508
Chng 12: Dch v Web XML v Remoting
b. Trong trng hp ny, client s i dch v Web XML hon tt, nhng n s
i trn mt tiu trnh khc, v do client c th tip tc vi cc cng vic
khc. Vic gi phng thc bt ng b c m t trong mc 12.6.
509
Chng 13:BO MT
13
510
511
Chng 13: Bo mt
V hiu hon ton CAS (mc 13.2) hoc ch v hiu vic kim tra quyn thc thi (mc
13.3).
Kim sot s tha k v chp thnh vin bng CAS (mc 13.8).
Xem xt v x l chng c ca assembly (mc 13.9 v 13.10).
X l bo mt b thc thi bng min ng dng (mc 13.11 v 13.12).
RBS cho php bn thc hin cc quyt nh lc thc thi (runtime decision) da trn nh danh
(identity) v cc vai tr (role) ca ngi dng m ng dng ang chy trn danh ngha ngi
dng ny. Trn h iu hnh Windows, y chnh l vic thc hin cc quyt nh da trn tn
ngi dng Windows v cc nhm Windows m ngi dng thuc v. Tuy nhin, RBS
5
Mobile code l phn mm c truyn qua mt h thng mng v sau c thc thi trn h thng
cc b.
512
Chng 13: Bo mt
Kim sot vic truy xut n cc chc nng ca ng dng da trn ngi dng hin
hnh v cc vai tr m ngi dng ny l mt thnh vin (mc 13.14).
1.
gim thiu cc nguy c bo mt do m lnh nguy him by ra, b thc thi khng cho php
cc assembly c--tin-cy-mt-phn truy xut n cc assembly tn mnh. Hn ch ny lm
gim nguy c m lnh nguy him tn cng vo h thng ca bn, nhng i vi mt cch tip
cn p ch nh th cn phi c li gii thch.
Theo quy tc, cc assembly tn mnh c ci t trong Global Assembly Cache (GAC) v
cha cc chc nng quan trng c dng chung gia nhiu ng dng. iu ny hon ton
ng vi cc assembly cu thnh th vin lp .NET Framework. Cc assembly tn mnh khc
t cc sn phm c-phn-b-rng-ri cng s nm trong GAC v l kh truy xut i vi
cc ng dng c-qun-l. Kh nng hin din trong GAC cao, tnh kh truy xut d dng,
v tm quan trng i vi nhiu ng dng khc nhau khin cho cc assembly tn mnh l mc
tiu c kh nng nht i vi bt c hnh ng ph hoi no ca m lnh nguy him cqun-l.
Thng thng, m lnh c kh nng nguy him l m c np t cc ni xanh Internet
bn c t (hay khng c) s kim sot no. Vi chnh sch bo mt mc nh, tt c m
lnh chy t my cc b u c tin cy ton phn (full trust), trong khi m lnh c np
t cc ni xa ch c tin cy mt phn (partial trust). Ngn m lnh c--tin-cy-mt-phn
truy xut n cc assembly tn mnh; ngha l m lnh c--tin-cy-mt-phn khng c c
513
Chng 13: Bo mt
B thc thi ngn m lnh c--tin-cy-mt-phn truy xut cc assembly tn mnh bng cch
t LinkDemand vo tp quyn FullTrust trn mi thnh vin cng-khai (public) v c-bov (protected) ca mi kiu kh-truy-xut-cng-khai c nh ngha trong assembly. iu
ny c ngha l ch nhng assembly c cp cc quyn tng ng vi tp quyn
FullTrust th mi c th truy xut cc kiu v thnh vin trong assembly tn mnh. Vic p
dng AllowPartiallyTrustedCallersAttribute vo assembly tn mnh bo vi b thc thi
khng buc LinkDemand c hiu lc trn cc thnh vin v cc kiu bn trong.
on
di
trnh
by
mt
ng
dng
dng
tnh
[assembly:AllowPartiallyTrustedCallers]
514
Chng 13: Bo mt
2.
Bn cn v hiu CAS.
Thit lp thuc tnh SecurityEnabled ca lp System.Security.SecurityManager l
false v lu li bng phng thc SecurityManager.SavePolicy. Bn cng c th
s dng cng c Code Access Security Policy (Caspol.exe) v thc thi lnh caspol
s off.
CAS l phn then cht trong m hnh bo mt ca b thc thi .NET, v cng l phn c trng
ca nn tng .NET m nhiu nn tng khc khng c. Mc d CAS c xy dng vi tiu ch
m bo hiu nng thc thi cao nht v c s dng mt cch cn trng trong th vin
lp .NET, nhng vn c mt chi ph cho mi yu cu bo mt (security demand) v stack walk
(kt qu) m b thc thi phi thc hin.
i lc, bo mt mc-m-lnh c th khng l iu bn bn tm, hoc nhu cu hiu nng c
th vt qu nhu cu CAS. Trong cc trng hp ny, bn c th v hiu hon ton CAS v
loi b chi ph cho vic kim tra bo mt mc-m-lnh. V hiu CAS c tc dng trao cho m
lnh kh nng thc hin bt k hnh ng no m .NET Framework h tr (tng ng vi
tp quyn FullTrust), bao gm kh nng np m lnh khc, gi cc th vin nguyn sinh, v
s dng con tr trc tip truy xut b nh.
515
Chng 13: Bo mt
hiu
CAS,
lnh
ca
bn
phi
phn
ControlPolicy
ca
c quyn c th no.
Thay i SecurityEnabled s khng nh hng n hot ng ca CAS trong cc tin trnh
hin c, v cng khng nh hng n cc tin trnh mi cho n khi bn gi phng thc
SavePolicy lu trng thi ca SecurityEnabled vo Windows Registry. ng tic, .NET
Framework khng bo m nhng thay i ca SecurityEnabled s tc ng ng n hot
ng ca CAS trong tin trnh hin hnh. Do , bn phi thay i SecurityEnabled ri m
mt tin trnh mi c c hot ng ng nh mong mun.
516
Chng 13: Bo mt
3.
Thit
lp
thuc
tnh
CheckExecutionRights
ca
lp
System.Security.
// Lu cu hnh.
System.Security.SecurityManager.SavePolicy();
// Lu cu hnh.
System.Security.SecurityManager.SavePolicy();
517
Chng 13: Bo mt
kim tra chng c quyn thc thi hay khng. Tuy nhin, thay i ny s khng nh hng n
cc tin trnh hin c. Do vy, bn phi lu thay i vo Windows Registry (bng phng thc
SavePolicy) n c tc dng vi cc tin trnh mi.
4.
518
Chng 13: Bo mt
519
Chng 13: Bo mt
5.
520
Chng 13: Bo mt
xut hin sau bt k lnh using mc trn no nhng trc bt k khai bo kiu hay khng
gian tn no.
V d di y minh ha mt yu cu quyn ty chn cho tp quyn Internet. y l tp
quyn c nh ngha bi chnh sch bo mt mc nh. Khi b thc thi np
OptionalRequestExample, n s khng cp cho assembly ny bt c quyn no khng nm
trong tp quyn Internet (tham kho ti liu .NET Framework SDK bit thm chi tit v
cc quyn trong tp quyn Internet).
using System.Security.Permissions;
[assembly:PermissionSet(SecurityAction.RequestOptional, Name = "Internet")]
public class OptionalRequestExample {
public static void Main() {
// Lm g ...
}
}
6.
521
Chng 13: Bo mt
cu hnh chnh sch bo mt mt cch ph hp, bn cn bit cc nhu cu quyn truy xut
m lnh (code access permission requirements) ca cc assembly m bn d nh s chy.
iu ny ng cho c cc th vin v cc assembly thc thi c truy xut t ng dng ca
bn. i vi th vin, bn cn bit assembly loi b nhng quyn no khng s dng th
vin ny thc hin mt hnh ng b hn ch (s dn n ngoi l
System.Security.SecurityException).
Cng c Permview.exe cung cp mt c ch n gin m thng qua , bn c th xem cc
yu cu quyn khai bo (declarative permission request) c to bn trong mt assembly
bao gm yu cu ti thiu (minimum request), yu cu ty chn (optional request), v yu cu
loi tr (refusal request). V d, lp di y khai bo mt cu ti thiu, mt yu cu ty
chn, v mt yu cu loi tr:
using System.Net;
using System.Security.Permissions;
// Yu cu quyn ti thiu: SocketPermission.
[assembly:SocketPermission(SecurityAction.RequestMinimum,
Unrestricted = true)]
// Yu cu quyn ty chn: SecurityPermission.
[assembly:SecurityPermission(SecurityAction.RequestOptional,
Unrestricted = true)]
// Yu cu loi tr quyn: FileIOPermission.
[assembly:SecurityPermission(SecurityAction.RequestRefuse,
Unrestricted = true)]
public class PermissionViewExample {
public static void Main() {
// Lm g ...
}
}
522
Chng 13: Bo mt
7.
523
Chng 13: Bo mt
8.
Hn ch ai tha k cc lp ca bn
v chp cc thnh vin lp
Bn cn kim sot nhng ai c th tha k cc lp ca bn thng qua s tha k
(inheritance) v mt lp dn xut c th chp nhng thnh vin no.
524
Chng 13: Bo mt
Cc modifier nh sealed, public, private, v virtual cho php bn kim sot kh nng ca
cc lp khc khi cc lp ny tha k lp ca bn v chp cc thnh vin ca n. Tuy nhin,
cc modifier ny khng linh hot, khng c kh nng chn lc khi gii hn nhng m lnh
no c th tha k mt lp hoc chp cc thnh vin ca n. V d, bn mun ch nhng
m lnh do cng ty hay khoa ca bn vit th mi c th tha k cc lp nghip v quan trng,
hoc ch nhng m lnh c np t my cc b th mi c th tha k cc phng thc no
. Bng cch p dng InheritanceDemand vo khai bo lp hay thnh vin, bn c th ch
nh cc quyn (lc thc thi) m mt lp phi c th mi c th tha k lp ca bn hoc chp
cc thnh vin c th no . Nh rng, cc quyn ca mt lp l cc quyn ca assembly
m lp ny c khai bo trong .
Mc d bn c th yu cu bt k quyn hay tp quyn no trong InheritanceDemand, nhng
thng thng l yu cu cc quyn nh danh (identity permission). Quyn nh danh m t
chng c (evidence) do mt assembly a cho b thc thi. Nu mt assembly a ra cc kiu
chng c no lc np, b thc thi s t ng gn cho assembly ny quyn nh danh ph
hp. Quyn nh danh cho php bn s dng cc lnh bo mt bt buc v khai bo
(imperative v declarative security statement) trc tip ra cc quyt nh bo mt (security
decision) cn c trn nh danh m (code identity) m khng cn trc tip nh gi cc i
tng chng c. Bng 13-1 lit k kiu quyn nh danh c to cho mi kiu chng c
(kiu chng c l thnh vin ca khng gian tn System.Security.Policy, kiu quyn nh
danh l thnh vin ca khng gian tn System.Security.Permissions).
Bng 13.1 Cc lp chng c v cc quyn nh danh
Lp chng c
ApplicationDirectory
Khng
Hash
Khng
Publisher
Site
StrongName
Quyn nh danh
PublisherIdentityPermission
SiteIdentityPermission
StrongNameIdentityPermission
Url
UrlIdentityPermission
Zone
ZoneIdentityPermission
525
Chng 13: Bo mt
9.
GetEnumerator
526
Chng 13: Bo mt
GetHostEnumerator
GetAssemblyEnumerator
// Np assembly c ch nh.
Assembly a = Assembly.LoadFrom(args[0]);
527
Chng 13: Bo mt
Console.WriteLine(x.Current.ToString());
}
}
}
10.
M t
Lp System.Activator
CreateInstance
CreateInstanceFrom
528
Chng 13: Bo mt
Lp System.AppDomain
CreateInstance
CreateInstanceAndUnwrap
CreateInstanceFrom
CreateInstanceFromAndUnwrap
To
DefineDynamicAssembly
mt i tng System.Reflection.Emit.
AssemblyBuilder, bn c th s dng n to ng
mt assembly trong b nh.
ExecuteAssembly
Load
Np assembly c ch nh.
Lp System.Reflection.Assembly
Load
LoadFile
LoadFrom
Np assembly c ch nh.
LoadWithPartialName
529
Chng 13: Bo mt
evidence.AddHost(siteEvidence);
evidence.AddHost(zoneEvidence);
// Np assembly c tn l "SomeAssembly" v gn cc i tng Site v
// Zone cho n. Cc i tng ny s chp cc i tng Site v Zone
// do b np assembly gn.
System.Reflection.Assembly assembly =
System.Reflection.Assembly.Load("SomeAssembly", evidence);
530
Chng 13: Bo mt
531
Chng 13: Bo mt
// To mt tp hp Evidence mi.
Evidence evidence = new Evidence();
12.
X l bo mt b thc thi
bng chnh sch bo mt ca min ng dng
Bn cn kim sot (bng m lnh) cc quyn c cp cho cc assembly.
Cu hnh (bng m lnh) chnh sch bo mt ca min ng dng m bn np
cc assembly vo .
532
Chng 13: Bo mt
Ngay c khi cc mc chnh sch cng ty, my, hay ngi dng ch nh code
group LevelFinal (ch th b thc thi khng nh gi cc mc chnh sch thp
hn), b thc thi lun s dng mc chnh sch ca min ng dng tnh grantset ca mt assembly.
Ch cc mc chinh sch cng ty, my, v ngi dng l c cu hnh tnh bng
Administrative Tools. V min ng dng khng tn ti bn ngoi ng cnh ca b thc thi nn
khng th cu hnh tnh chnh sch min ng dng c. cu hnh chnh sch bo mt ca
mt min ng dng, bn phi to mt mc chnh sch (bng m lnh) ri gn n cho min
ng dng.
Xy dng mt mc chnh sch bng m lnh c th l mt cng vic lu di, ty thuc vo
phc
tp
ca
chnh
sch
bo
mt
m
bn
cn
din
t.
Lp
System.Security.Policy.PolicyLevel m t mt mc chnh sch bo mt. Bn trong mi i
tng PolicyLevel, bn phi to dng mt cu trc phn cp cc code group, nh ngha cc
iu kin thnh vin, cc tp quyn, v cc c tnh ca mi code group. C rt nhiu kiu
c s dng to dng mc chnh sch, v tho lun v cc kiu ny l vt qu phm vi
quyn sch ny. Lp trnh bo mt .NET, nh cp trc y, cung cp thng tin chi tit
v mi lp ny v trnh by cch xy dng mt mc chnh sch bng m lnh.
533
Chng 13: Bo mt
}
// Phng thc ny cu hnh chnh sch bo mt ca i tng
// AppDomain c truyn cho n. Chnh sch bo mt s gn cc
// quyn khc nhau cho mi assembly da trn publisher ca
// assembly. Nhng assembly t cc publisher v danh khng c
// cp quyn no c.
private static void SetDomainPolicy(AppDomain domain) {
// To mt FirstMatchCodeGroup mi dng lm nt gc ca h
// thng phn cp code group. Cu hnh group ny sao cho
534
Chng 13: Bo mt
policy.RootCodeGroup.AddChild(new UnionCodeGroup(
new PublisherMembershipCondition(microsoftCert),
new PolicyStatement(policy.GetNamedPermissionSet("FullTrust"),
PolicyStatementAttribute.Exclusive)
));
policy.RootCodeGroup.AddChild(new UnionCodeGroup(
new PublisherMembershipCondition(litwareCert),
new PolicyStatement(policy.GetNamedPermissionSet("Internet"),
PolicyStatementAttribute.Exclusive)
535
Chng 13: Bo mt
));
13.
thu
ly
i
tng
536
Chng 13: Bo mt
no hay khng.
C ch RBS ca .NET Framework tru tng ha cc tnh nng bo mt da-trn-ngi-dng
ca h iu hnh nm di thng qua hai giao din chnh sau y:
System.Security.Principal.IIdentity
System.Security.Principal.IPrincipal
Giao din IIdentity m t thc th m m lnh hin ang chy trn danh ngha ca thc th
ny, chng hn mt ngi dng hoc ti khon dch v (service account). Giao din
IPrincipal m t IIdentity ca thc th v tp cc vai tr m thc th ny thuc v. Mt vai
tr ch l mt s phn loi, dng nhm cc thc th vi cc kh nng bo mt tng t
nhau, chng hn mt nhm ngi dng Windows.
tch hp RBS vi bo mt ngi dng Windows, .NET Framework cung cp hai lp sau
y (hin thc giao din IIdentity v IPrincipal):
System.Security.Principal.WindowsIdentity
System.Security.Principal.WindowsPrincipal
Phin bn th nht nhn mt chui cha tn ca nhm cn kim tra. Tn nhm phi c
dng [DomainName]\[GroupName] i vi cc nhm da-trn-min v phi c dng
[MachineName]\[GroupName] i vi cc nhm c nh ngha cc b. Nu mun kim
537
Chng 13: Bo mt
Phin
bn
th
ba
nhn
mt
RID (Hex)
Gi tr WindowsBuiltInRole
BUILTIN\Account Operators
0x224
AccountOperator
BUILTIN\Administrators
0x220
Administrator
BUILTIN\Backup Operators
0x227
BackupOperator
BUILTIN\Guests
0x222
Guest
BUILTIN\Power Users
0x223
PowerUser
BUILTIN\Print Operators
0x226
PrintOperator
BUILTIN\Replicators
0x228
Replicator
BUILTIN\Server Operators
0x225
SystemOperator
BUILTIN\Users
0x221
User
ng dng WindowsGroupExample di y trnh by cch kim tra ngi dng hin hnh c l
thnh vin ca mt tp cc nhm Windows c nu tn hay khng. Cc nhm ny c ch
nh trong cc i s dng lnh; bn nh t tn my tnh, tn min, hay BUILTIN (i vi cc
nhm Windows chun) vo trc tn nhm.
538
Chng 13: Bo mt
using System;
using System.Security.Principal;
539
Chng 13: Bo mt
PrincipalPermission perm =
new PrincipalPermission("UserName", "RoleName");
perm.Demand();
Bn c th thay cc yu cu RBS khai bo mc lp hay mc thnh vin. Cc yu cu mclp p dng cho tt c cc thnh vin ca lp tr khi c mt yu cu mc-thnh-vin chp
yu cu mc-lp.
Ni chung, bn c th t chn hin thc cc yu cu RBS bt buc hay khai bo. Tuy nhin,
cc yu cu bo mt bt buc cho php bn tch hp cc yu cu RBS vi logic ca m lnh
thc hin nhng yu cu RBS phc tp. Ngoi ra, nu khng bit vai tr hay tn ngi dng
yu cu lc bin dch, bn phi s dng cc yu cu bt buc. Cc yu cu RBS khai bo c
thun li l chng c lp vi logic ca m lnh v d nhn bit hn. Ngoi ra, bn c th
540
Chng 13: Bo mt
Nu min ng dng m tiu trnh hin hnh ang thc thi c mt principal mc nh,
th b thc thi s gn principal ny cho thuc tnh Thread.CurrentPrincipal.
Theo mc nh, min ng dng khng c principal mc nh. Bn c th thit lp
principal mc nh ca mt min ng dng bng cch gi phng thc
SetThreadPrincipal trn mt i tng System.AppDomain m t min ng dng bn
mun cu hnh. gi SetPrincipalPolicy, m lnh ca bn phi c phn t
ControlPrincipal ca SecurityPermission. Bn ch c th thit lp principal mc nh
mt ln cho mi min ng dng; li gi SetThreadPrincipal th hai dn n ngoi l
System.Security.Policy.PolicyException.
2.
3.
541
Chng 13: Bo mt
Thread.CurrentPrincipal. Vic ny s ngn b thc thi gn cc i tng IPrincipal
M t
NoPrincipal
UnauthenticatedPrincipal
Mt i tng System.Security.Principal.
GenericPrincipal rng c to ra v c gn
cho Thread.CurrentPrincipal.
WindowsPrincipal
Bt k s dng phng php no thit lp IPrincipal cho tiu trnh hin hnh, bn cng
phi lm nh th trc khi s dng cc yu cu bo mt RBS, nu khng thng tin v ngi
dng (IPrincipal) s khng c hiu lc b thc thi c th x l yu cu. Bnh thng, khi
chy trn nn Windows, bn thit lp chnh sch principal ca mt min ng dng l
PrincipalPolicy.WindowsPrincipal thu ly thng tin v ngi dng Windows:
// Thu ly mt tham chiu n min ng dng hin hnh.
AppDomain appDomain = System.AppDomain.CurrentDomain;
542
Chng 13: Bo mt
}
public static void ProtectedMethod2() {
// Mt yu cu bo mt bt buc da-trn-vai-tr: principal
// hin ti l mt thnh vin ca vai tr "Managers" hay
// "Developers". Khi s dng PrincipalPermission, bn ch c th din
// t mi quan h OR. l v phng thc PrincipalPolicy.Intersect
// lun tr v mt quyn rng tr khi hai input l nh nhau.
// Tuy nhin, bn c th s dng lgic ca m lnh hin thc
// cc iu kin phc tp hn. Trong trng hp ny, tn ca nh
// danh l khng quan trng.
System.Security.Permissions.PrincipalPermission perm1 =
new System.Security.Permissions.PrincipalPermission
(null, @"MACHINE\Managers");
System.Security.Permissions.PrincipalPermission perm2 =
new System.Security.Permissions.PrincipalPermission
(null, @"MACHINE\Developers");
perm1.Union(perm2).Demand();
}
perm.Demand();
}
Phn th hai trnh by ba phng thc c bo v bng cc yu cu RBS khai bo, tng
ng vi cc yu cu RBS bt buc va c trnh by trn:
543
Chng 13: Bo mt
// Mt yu cu bo mt khai bo da-trn-vai-tr: principal hin ti
// m t mt nh danh vi tn l "nnbphuong81", cc vai tr ca
// principal l khng quan trng.
[PrincipalPermission(SecurityAction.Demand,
Name = @"MACHINE\nnbphuong81")]
public static void ProtectedMethod1() { /*...*/}
15.
544
Chng 13: Bo mt
545
Chng 13: Bo mt
ng dng ny s dng hm LogonUser ca Win32 API thu ly Windows access token cho
ngi dng c ch nh, gi nhn ngi dng ny, ri tr v ng cnh ca ngi dng c.
V d, lnh ImpersonationExample nnbphuong81 password s gi nhn ngi dng
nnbphuong81 nu ngi dng tn ti trong c s d liu ti khon cc b.
using System;
using System.IO;
using System.Security.Principal;
using System.Security.Permissions;
using System.Runtime.InteropServices;
// Bo m assembly c quyn truy xut m lnh khng-c-qun-l
// v c quyn kim sot principal ca tiu trnh.
[assembly:SecurityPermission(SecurityAction.RequestMinimum,
UnmanagedCode=true, ControlPrincipal=true)]
546
Chng 13: Bo mt
args[0],
".",
args[1],
ref accessToken
);
// Nu li xy ra (LogonUser tr v zero), hin th li v thot.
if (result == 0)
} else {
547
Chng 13: Bo mt
// Tr v ngi dng Windows c bng i tng
// WindowsImpersonationContext.
impContext.Undo();as
// Hin th nh danh ang tch cc (sau khi gi nhn).
Console.WriteLine("Identity after impersonation
WindowsIdentity.GetCurrent().Name);
}
}
}
= {0}",
548
Chng 14:MT M
14
549
550
Chng 14: Mt m
1.
To s ngu nhin
Bn cn to mt s ngu nhin dng cho cc ng dng mt m v bo mt.
S dng mt b to s ngu nhin mt m (cryptographic random number
generator), chng hn System.Security.Cryptography.RNGCryptoServiceProvider.
551
Chng 14: Mt m
System.Security.Cryptography.RandomNumberGenerator. y l mt lp tru tng m tt c
552
Chng 14: Mt m
2.
Tnh m bm ca password
553
Chng 14: Mt m
Tn lp
MD5
MD5CryptoServiceProvider
128
SHA1CryptoServiceProvider
160
SHA1Managed
SHA1Managed
160
SHA256Managed
256
SHA384Managed
384
SHA512Managed
512
554
Chng 14: Mt m
3.
Tnh m bm ca file
Bn cn xc nh ni dung ca mt file c thay i theo thi gian hay khng.
To m bm cho ni dung ca file bng phng thc ComputeHash ca lp
System.Security.Cryptography.HashAlgorithm. Lu tr m bm ny sau ny
so snh vi cc m bm c to mi.
Ngoi vic cho php bn lu tr password mt cch an ton ( c tho lun trong mc
14.2), m bm cn cung cp mt phng cch rt hay xc nh mt file c thay i hay
khng. Bng cch tnh ton v lu tr m bm ca mt file, sau ny bn c th tnh li m
bm ca file ny xc nh file c thay i trong thi gian chuyn tip hay khng. Gii thut
bm s sinh ra mt m bm rt khc ngay c ch vi mt thay i rt nh trong file, nn kh
nng hai file khc nhau cho ra cng m bm l cc k nh.
555
Chng 14: Mt m
HashAlgorithm x l qu trnh c d liu t Stream v tr v mt mng byte cha m bm
cho file.
Lp HashStreamExample di y trnh by cch to m bm t mt file. Bn phi ch nh tn
gii thut bm v tn file lm i s dng lnh, v d HashStreamExample SHA1
HashStreamExample.cs.
using System;
using System.IO;
using System.Security.Cryptography;
// Hin th m bm.
Console.WriteLine(BitConverter.ToString(hash));
}
}
}
}
4.
Kim tra m bm
556
Chng 14: Mt m
557
Chng 14: Mt m
return (oldHashString == newHashString.ToString());
}
Cui cng, on m di y so snh hai m bm c biu din dng mng byte. Th vin
lp .NET Framework khng c phng thc no thc hin kiu so snh ny, do bn phi
vit mt vng lp so snh cc phn t ca hai mng. on m ny c s dng mt vi k
thut khng tn nhiu thi gian nh: bo m cc mng byte c cng chiu di trc khi bt
u so snh chng, v tr v false khi tm thy khc bit u tin.
// Phng thc dng so snh m bm mi vi
// m bm c sn (c biu din dng mng byte).
private static bool VerifyByteHash(byte[] hash, byte[] oldHash) {
558
Chng 14: Mt m
5.
bt k
160
64
559
Chng 14: Mt m
// To mt i tng HMACSHA1
// (truyn key cho phng thc khi dng).
using (HMACSHA1 hashAlg = new HMACSHA1(key)) {
560
Chng 14: Mt m
Console.WriteLine(BitConverter.ToString(hash));
}
}
}
}
6.
Tn lp
561
Chng 14: Mt m
DES
DESCryptoServiceProvider
64
TripleDESCryptoServiceProvider
128, 192
RC2
RC2CryptoServiceProvider
Rijndael
RijndaelManaged
562
Chng 14: Mt m
Ch th ca
ICryptoTransform
M t
Stream
nm
di
cha
plaintext
ngun.
Read
Mt ha
Read
Gii mt ha
Stream
nm di cha ciphertext ngun.
CryptoStream.Read ghi plaintext ra b m xut.
Write
Mt ha
Write
Gii mt ha
563
Chng 14: Mt m
public class SymmetricEncryptionExample {
public static void Main(string[] args) {
// To mt gii thut Triple DES mi thu ly kha dng cho
// v d ny. Kha ny s c dng chung trong cc phng thc
// EncryptFile v DecryptFile. Bnh thng, kha c
// tha thun gia ngi gi v ngi nhn, hoc c gi
// (bi ngi gi) cng vi file -c-mt-ha.
byte[] key;
byte[] iv;
using(SymmetricAlgorithm alg =
SymmetricAlgorithm.Create("3DES")){
key = alg.Key;
iv = alg.IV;
}
// Mt ha file. Tin t "encrypted" s c thm vo tn file
// ngun v c s dng lm tn ca file -c-mt-ha.
EncryptFile(args[0], "encrypted"+args[0], (byte[])key.Clone(),
(byte[])iv.Clone());
564
Chng 14: Mt m
Stream destFile =
new FileStream(destFileName, FileMode.Create,
FileAccess.Write);
// To mt gii thut Triple DES mi mt ha file.
using(SymmetricAlgorithm alg =
SymmetricAlgorithm.Create("3DES")){
// To mt CryptoStream mt ha ni dung ca
// Stream ngun khi n c c. Gi phng thc
// CreateEncryptor ca SymmetricAlgorithm
// nhn th hin ICryptoTransform v
// truyn n cho CryptoStream.
CryptoStream cryptoStream = new CryptoStream(srcFile,
alg.CreateEncryptor(),
CryptoStreamMode.Read);
565
Chng 14: Mt m
Array.Clear(iv,0,iv.Length);
cryptoStream.Clear();
cryptoStream.Close();
srcFile.Close();
destFile.Close();
}
}
// Phng thc dng gii mt ha mt file -c-mt-ha bng
// gii thut Triple DES vi key v iv cho trc.
private static void DecryptFile(string srcFileName,
string destFileName, byte[] key, byte[] iv) {
// To cc stream truy xut file ngun v file ch.
Stream srcFile =
new FileStream(srcFileName, FileMode.Open, FileAccess.Read);
Stream destFile =
new FileStream(destFileName, FileMode.Create,
FileAccess.Write);
// To mt gii thut Triple DES mi gii mt ha file.
using(SymmetricAlgorithm alg =
SymmetricAlgorithm.Create("3DES")){
// Cu hnh thuc tnh Key v IV ca gii thut.
alg.Key = key;
alg.IV = iv;
// To mt CryptoStream gii mt ha ni dung ca d liu
// -c-mt-ha khi n c ghi. Gi phng thc
// CreateDecryptor ca SymmetricAlgorithm nhn th hin
// ICryptoTransform v truyn n cho CryptoStream.
CryptoStream cryptoStream = new CryptoStream(destFile,
alg.CreateDecryptor(),
CryptoStreamMode.Write);
// Khai bo b m dng c d liu t file -c// mt-ha v ghi ra file ch thng qua CryptoStream.
566
Chng 14: Mt m
int bufferLength;
byte[] buffer = new byte[1024];
// c file -c-mt-ha (tng khi 1024 byte) v ghi
// phin bn -c-gii-mt-ha ra file ch.
do {
bufferLength = srcFile.Read(buffer, 0, 1024);
cryptoStream.Write(buffer, 0, bufferLength);
} while (bufferLength > 0);
// ng stream v xa cc d liu b mt.
cryptoStream.FlushFinalBlock();
Array.Clear(key,0,key.Length);
Array.Clear(iv,0,iv.Length);
cryptoStream.Clear();
cryptoStream.Close();
srcFile.Close();
destFile.Close();
}
}
}
7.
567
Chng 14: Mt m
Bn khng th to kha bt i xng bng giao thc truy li kha. Gii thut
mt ha bt i xng (asymmetric encryption) da vo cc mi lin h ton c
th gia cc thnh phn kha cng khai (public key) v kha ring (private key).
Nh th, mi gii thut mt ha bt i xng yu cu bn phi tun theo mt
quy trnh ring c th to ra cc kha mi.
568
Chng 14: Mt m
= {0}", BitConverter.ToString(key));
= 53-72-74-5B-A4-88-A4-80
Salt = 70-82-79-F4-3B-F9-DF-D2
Ch rng, mi khi bn chy cng mt lnh, DerivedKeyExample sinh ra kha khc nhau.
l do tc dng ca salt. Nu bn b i dng lnh gn mt gi tr ngu nhin vo salt (c in
m trong on m trn), sau bin dch li v chy DerivedKeyExample, bn s nhn thy v
d ny lun to ra cng mt kha vi mt password cho trc.
8.
569
Chng 14: Mt m
Encrypt v kha cng khai (public key) ca ngi nhn mt ha thng ip.
System.Security.Cryptography.RSACryptoServiceProvider
System.Security.Cryptography.DSACryptoServiceProvider
570
Chng 14: Mt m
phng
thc
v
ToXmlString
ca
lp
RSACryptoServiceProvider u nhn mt i s lun l, nu l true, i tng
RSACryptoServiceProvider s xut c kha cng khai v kha ring. Bn ch nh
gi tr ny l false khi cn xut kha cho mc ch phn phi hay lu tr.
ExportParameters
Lp
di y trnh by cch
RSACryptoServiceProvider mt ha mt chui v ri gii mt ha:
AsymmetricEncryptionExample
using System;
dng
lp
571
Chng 14: Mt m
using System.Text;
using System.Security.Cryptography;
public class AsymmetricEncryptionExample {
public static void Main(string[] args) {
// Khai bo mt bin RSAParameters, bin ny s cha
// thng tin PUBLIC KEY ca ngi nhn.
RSAParameters recipientsPublicKey;
// Khai bo mt bin CspParameters, bin ny s cho bit
// PRIVATE KEY c lu tr trong kho cha kha no.
// Thng thng, ch c ngi nhn mi c th truy xut
// thng tin ny. Vi mc ch minh ha, chng ta s to
// mt cp kha ngay u v d v s dng cc kha ny
// cho c bn gi v bn nhn.
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "MyKeys";
// To cp kha bt i xng bng lp RSACryptoServiceProvider.
// Lu cc kha ny vo mt kho cha kha c tn l "MyKeys"
// v trch thng tin PUBLIC KEY vo bin recipientsPublicKey.
using (RSACryptoServiceProvider rsaAlg =
new RSACryptoServiceProvider(cspParams)) {
572
Chng 14: Mt m
573
Chng 14: Mt m
574
Chng 14: Mt m
return plaintext;
}
}
9.
To mt i tng CspParameters.
575
Chng 14: Mt m
2.
3.
Nu kho cha kha tn ti bn trong tm vc ca CSP v cha cc kha thch hp, CSP s s
dng cc kha ny khi thc hin cc thao tc mt m. Nu kho cha kha hay kha khng tn
ti, CSP s t ng to kha mi. buc CSP lu tr cc kha mi c to vo kho cha
kha, bn phi thit lp thuc tnh PersistKeyInCsp (ca i tng
RSACryptoServiceProvider hay DSACryptoServiceProvider) l true.
Phng thc LoadKeys di y l mt on trch trong file StoreAsymmetricKeyExample.cs
(xem a CD nh km). LoadKeys to mt i tng RSACryptoServiceProvider v cu hnh
cho n s dng mt kho cha kha c tn l MyKeys. Bng cch ch nh PersistKeyInCsp l
true, gii thut s t ng lu tr cc kha mi c to vo kho cha kha ny.
// Phng thc ny to mt i tng RSACryptoServiceProvider
// v np cc kha t mt kho cha kha nu chng tn ti; nu khng,
// RSACryptoServiceProvider s t ng to cc kha mi v lu
// chng vo kho cha kha s dng sau ny.
public static void LoadKeys(string container) {
576
Chng 14: Mt m
577
Chng 14: Mt m
}
10.
Mi khi mt ha d liu (bng gii thut i xng) chuyn giao, bn nn to mt kha mi,
c gi l kha phin (session key). S dng kha phin c hai li ch chnh:
578
Chng 14: Mt m
Th vin lp .NET Framework h tr vic trao i kha ch vi gii thut RSA, nhng bn
phi la chn gia hai formatting scheme: Optimal Asymmetric Encryption Padding (OAEP)
v PKCS #1 v 1.5. Bn v cc formatting scheme ny vt qu phm vi ca quyn sch ny.
Ni chung, bn nn s dng OAEP formatting tr khi bn c nhu cu giao tip vi mt h
thng c c s dng PKCS formatting. Hai lp di y hin thc c ch trao i kha, mi
c ch ng vi mt formatting scheme:
System.Security.Cryptography.RSAOAEPKeyExchangeFormatter
System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter
System.Security.Cryptography.RSAOAEPKeyExchangeDeformatter
System.Security.Cryptography.RSAPKCS1KeyExchangeDeformatter
579
Chng 14: Mt m
580
Chng 14: Mt m
581
Chng 14: Mt m
// Trch kha phin t d liu trao i bng
// phng thc DeformatKeyExchange.
byte[] sessionKey = DeformatKeyExchange(exchangeData,
cspParams);
582
Chng 14: Mt m
583
Chng 14: Mt m
584
15
585
586
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
1.
587
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
588
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
589
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
590
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
2.
Bn cn gi mt hm khng-c-qun-l, v hm ny cn handle ca mt iu
kim, ca s, hoc file.
.NET Framework khng che du cc chi tit nm di, chng hn handle dng cho ca s v
iu kim. Mc d khng thng s dng thng tin ny, bn c th ly n khi cn gi mt
hm khng-c-qun-l v hm ny cn n n.
Xt ng dng di y, form chnh lun hin th trn tt c cc ca s khc bt k n c focus
hay khng (c c chc nng ny bng cch thit lp thuc tnh Form.TopMost l true).
Form cn c mt Timer nh k gi cc hm khng-c-qun-l GetForegroundWindow v
GetWindowText ly thng tin ca ca s hin ang c focus. Ngoi ra, handle ca form
chnh c ly thng qua thuc tnh Form.Handle, ri c so snh vi handle ca form hin
ang tch cc kim tra form chnh ang c focus hay khng.
591
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
private System.Windows.Forms.Label lblCaption;
[DllImport("user32.dll")]
private static extern int GetForegroundWindow();
[DllImport("user32.dll")]
private static extern int GetWindowText(int hWnd, StringBuilder text,
int count);
private void tmrRefresh_Tick(object sender, System.EventArgs e) {
int chars = 256;
StringBuilder buff = new StringBuilder(chars);
int handle = GetForegroundWindow();
lblCaption.Text = buff.ToString();
lblHandle.Text = handle.ToString();
if (new IntPtr(handle) == this.Handle) {
lblCurrent.Text = "True";
} else {
lblCurrent.Text = "False";
}
}
}
}
3.
ngha
cu
trc
trong
C#.
dng
tnh
nh
cho
cu
trc.
dng
phng
thc
tnh
SizeOf
ca
lp
592
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
theo byte.
Trong m C# thun ty, bn khng c kh nng trc tip kim sot vic cp b nh. Thay vo
, CRL s quyt nh khi no cn a d liu vo b nh ti u ha hot ng. iu ny
gy rc ri khi lm vic vi cc hm C, v cu trc phi c tr lin tc trong b nh. May
mn l .NET gii quyt vn ny bng c tnh StructLayoutAttribute, cho php bn ch
nh cc thnh vin ca mt lp hay mt cu trc cho trc s c sp xp trong b nh nh
th no.
V d, xt hm GetVersionEx trong th vin kernel32.dll. Hm ny nhn mt con tr ch ti
cu trc OSVERSIONINFO v s dng n tr v thng tin phin bn ca h iu hnh. s
dng cu trc OSVERSIONINFO trong m C#, bn phi nh ngha n vi c tnh
StructLayoutAttribute nh sau:
[StructLayout(LayoutKind.Sequential)]
public class OSVersionInfo {
593
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
[FieldOffset(4)] public int dwMajorVersion;
[FieldOffset(8)] public int dwMinorVersion;
[FieldOffset(12)] public int dwBuildNumber;
[FieldOffset(16)] public int dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
[FieldOffset(20)] public String szCSDVersion;
}
594
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
Nu chy ng dng ny trn h thng Windows XP, bn s thy thng tin nh sau:
Class size: 148
Major Version: 5
Minor Version: 1
Build Number: 2600
Platform Id: 2
CSD Version: Service Pack 1
Platform: Win32NT
Version: 5.1.2600.0
4.
595
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
// khi duyt qua cc ca s ang m.
[DllImport("user32.dll")]
public static extern int EnumWindows(CallBack callback, int param);
[DllImport("user32.dll")]
public static extern int GetWindowText(int hWnd,
StringBuilder lpString, int nMaxCount);
private static void Main() {
CallBack callBack = new CallBack(DisplayWindowInfo);
// Yu cu h iu hnh duyt qua cc ca s ang m,
// kch hot callback vi handle ca mi ca s.
EnumWindows(callBack, 0);
Console.ReadLine();
}
// Hm s nhn callback. Thng s th hai
// khng c s dng nhng phi c khai bo
// tng thch vi ch k ca callback.
public static bool DisplayWindowInfo(int hWnd, int lParam) {
int chars = 100;
StringBuilder buf = new StringBuilder(chars);
if (GetWindowText(hWnd, buf, chars) != 0) {
Console.WriteLine(buf);
}
return true;
}
}
5.
596
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
[DllImport("user32.dll", SetLastError=true)]
public static extern int MessageBox(int hWnd, string pText,
string pCaption, int uType);
private static void Main() {
int badWindowHandle = 453;
MessageBox(badWindowHandle, "Message", "Caption", 0);
int errorCode = Marshal.GetLastWin32Error();
Console.WriteLine(errorCode);
Console.WriteLine(GetErrorMessage(errorCode));
597
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
Console.ReadLine();
}
// GetErrorMessage tr v thng ip li
// tng ng vi m li errorCode.
public static string GetErrorMessage(int errorCode) {
= 0x00001000;
if (0 == retVal) {
return null;
} else {
return lpMsgBuf;
}
}
}
6.
598
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
To RCW bng tin ch dng lnh Tlbimp.exe hoc bng Visual Studio .NET.
Nu mun s dng Visual Studio .NET to RCW, bn ch cn chn Project | Add Reference
v sau chn thnh phn thch hp trong th COM. Interop Assembly s c to ra v c
thm vo cc tham chiu ca d n. Sau , bn c th s dng Object Browser kho st
cc khng gian tn v cc lp c trong thnh phn ny.
[
599
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
object recordsAffected;
ADODB.Recordset rs = con.Execute("SELECT * From Customers",
out recordsAffected, 0);
while (rs.EOF != true) {
Console.WriteLine(rs.Fields["CustomerID"].Value);
rs.MoveNext();
}
Console.ReadLine();
}
}
600
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
7.
8.
601
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
602
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
Console.ReadLine();
}
}
9.
603
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
(resources.GetObject("axMaskEdBox1.OcxState")));
this.axMaskEdBox1.Size = new System.Drawing.Size(112, 20);
this.axMaskEdBox1.TabIndex = 0;
this.Controls.Add(this.axMaskEdBox1);
Ch rng, cc thuc tnh ty bin ca iu kim ActiveX khng c p dng trc tip thng
qua cc lnh thit lp thuc tnh. Thay vo , chng s c thit lp theo nhm khi thuc
tnh OcxState c thit lp. Tuy nhin, m lnh ca bn c th s dng cc thuc tnh ny
mt cch trc tip.
10.
.NET Framework h tr vic COM-client s dng thnh phn .NET. Khi COM-client to mt
i tng .NET, CLR s to mt i tng c-qun-l v mt COM Callable Wrapper
(CCW) bc ly i tng ny. COM-client s tng tc vi i tng thng qua CCW. CLR
ch to mt CCW cho mt i tng c-qun-l, bt chp c bao nhiu COM-client ang s
dng n.
Cc kiu cn c truy xut bi COM-client phi tha mn cc yu cu sau:
Cc kiu c-qun-l (lp, giao din, cu trc, hoc kiu lit k) phi c khai bo l
public.
Cc thnh vin ca kiu cn c truy xut phi l cc thnh vin public. COM-client
khng truy xut c cc thnh vin private, protected, internal, v static.
to mt i tng .NET, COM-client cn mt th vin kiu (file .tlb). File th vin kiu c
th c to t mt assembly bng tin ch dng lnh Tlbexp.exe. V d:
tlbexp ManagedLibrary.dll
604
Chng 15: Kh nng lin tc m lnh khng-c-qun-l
Mt khi to ra th vin kiu, bn c th tham chiu n t mt cng c pht trin khngc-qun-l. Vi Visual Basic 6, bn tham chiu file .tlb t hp thoi Project | Reference.
Trong Visual C++ 6, bn c th s dng lnh #import nhp cc nh ngha kiu t th vin
kiu.
605
16
606
607
Chng 16: Cc giao din v mu thng dng
Hin th dng chui ca cc i tng bin i da trn format specifier (mc 16.6).
Hin thc cc kiu i s s kin v ngoi l ty bin (bn s thng xuyn s dng
chng trong qu trnh pht trin ng dng) (mc 16.7 v 16.8).
Hin thc cc mu thit k thng dng Singleton v Observer bng cc tnh nng c sn
ca C# v th vin lp .NET Framework (mc 16.9 v 16.10).
1.
608
Chng 16: Cc giao din v mu thng dng
[Serializable]
public class Employee {
Cha cc thng tin nhy cm hay ring t, v d: mt khu, kha mt ha, v cc chi
tit ring v ngi hay t chc.
Nu ngn vic tun t ha mt s trng, bn phi hin thc kiu sao cho b li vic nhng
d liu no s khng hin din khi mt i tng c gii tun t ha. ng tic, bn
khng th to hay thu ly cc trng d liu b mt trong mt phng thc khi dng v
formatter khng gi phng thc khi dng trong qu trnh gii tun t ha i tng. Gii
php thng thng nht l hin thc mu Lazy Initialization, trong kiu ca bn s to
hay thu ly d liu ngay ln u tin cn n.
on m di y trnh by mt phin bn c chnh sa ca lp Employee vi c tnh
NonSerializedAttribute c p dng cho trng address, ngha l formatter s khng tun
t ha gi tr ca trng ny. Lp Employee hin thc cc thuc tnh cng khai dng truy
xut cc thnh vin d liu ring, l ni thun tin hin thc Lazy Initialization cho
trng address.
609
Chng 16: Cc giao din v mu thng dng
using System;
[Serializable]
public class Employee {
[NonSerialized]
private string address;
this.name = name;
this.age = age;
this.address = address;
}
// Thuc tnh cng khai dng truy xut tui ca nhn vin.
public int Age {
get { return age; }
set { age = value; }
}
610
Chng 16: Cc giao din v mu thng dng
// Np a ch t kho lu tr.
}
return address;
}
set {
address = value;
}
}
}
System.Runtime.Serialization.SerializationInfo
System.Runtime.Serialization.StreamingContext
Hin thc mt phng thc khi dng khng cng khai (c s dng trong qu trnh
gii tun t ha), phng thc ny nhn cng i s nh phng thc GetObjectData.
Nh rng, nu bn c nh dn xut mt s lp t lp kh-tun-t-ha th phng
thc khi dng ny phi l protected.
Trong qu trnh tun t ha, formatter s gi phng thc GetObjectData v truyn cho n
cc tham chiu SerializationInfo v StreamingContext.
611
Chng 16: Cc giao din v mu thng dng
Trong qu trnh gii tun t ha, formatter s gi phng thc khi dng vic gii tun t
ha, li truyn cho n cc tham chiu SerializationInfo v StreamingContext.
i tng StreamingContext cung cp cc thng tin v ngun gc ca d liu -ctun-t-ha, phn nh logic m bn hin thc cho vic tun t ha.
this.name = name;
this.age = age;
this.address = address;
}
612
Chng 16: Cc giao din v mu thng dng
// Phng thc khi dng dng kch hot formatter thc hin vic
// gii tun t ha mt i tng Employee. Bn nn khai bo
// phng thc khi dng ny l private, hay t nht cng l
// protected bo m n khng b gi qu mc cn thit.
private Employee(SerializationInfo info, StreamingContext context) {
// Trch xut tn v tui ca Employee (s lun hin din
// trong d liu -c-tun-t-ha bt chp gi tr
// ca StreamingContext).
name = info.GetString("Name");
age = info.GetInt32("Age");
// Thc hin trch xut a ch ca Employee
// (tht bi nu khng c).
try {
address = info.GetString("Address");
} catch (SerializationException) {
address = null;
}
}
// Cc thuc tnh Name, Age, v Address ( trnh by trn).
613
Chng 16: Cc giao din v mu thng dng
if ((con.State & StreamingContextStates.File) == 0) {
inf.AddValue("Address", address);
}
}
return str.ToString();
}
// Hin th Phuong.
Console.WriteLine(phuong);
614
Chng 16: Cc giao din v mu thng dng
bf = new BinaryFormatter();
phuong = (Employee)bf.Deserialize(str);
str.Close();
Console.WriteLine(phuong);
Console.ReadLine();
}
2.
615
Chng 16: Cc giao din v mu thng dng
Giao din ICloneable nhn dng mt kiu l kh-sao-chp v khai bo phng thc Clone l
mt c ch m thng qua , bn c th thu ly bn sao ca mt i tng. Phng thc
Clone khng nhn i s no v tr v mt System.Object, bt chp kiu ang hin thc l g.
iu ny ngha l mt khi sao mt i tng, bn phi p bn sao v ng kiu.
Cch hin thc phng thc Clone cho mt kiu ty bin ty thuc vo cc thnh vin d liu
c khai bo bn trong kiu. Nu kiu ty bin ch cha cc thnh vin d liu kiu gi tr
(int, byte...) v System.String, bn c th hin thc phng thc Clone bng cch to mt
i tng mi v thit lp cc thnh vin d liu ca n c gi tr ging nh i tng hin
ti. Lp Object (tt c cc kiu u dn xut t y) cha phng thc MemberwiseClone dng
t ng ha qu trnh ny. V d di y trnh by mt lp n gin c tn l Employee,
ch cha cc thnh vin chui. Do , phng thc Clone da vo phng thc tha k
MemberwiseClone to bn sao.
using System;
Name = name;
Title = title;
}
return MemberwiseClone();
}
}
Nu kiu ty bin ca bn c cha cc thnh vin d liu kiu tham chiu, bn phi quyt
nh xem phng thc Clone ca bn s thc hin mt bn sao cn (shallow copy) hay mt
bn sao su (deep copy). Bn sao cn ngha l bt k thnh vin d liu kiu tham chiu no
trong bn sao u s ch n i tng ging nh thnh vin d liu kiu tham chiu tng
ng trong i tng gc. Bn sao su ngha l bn phi sao ton b th i tng (object
graph) cc thnh vin d liu kiu tham chiu ca bn sao ch n cc bn sao (c lp v
mt vt l) ca cc i tng c tham chiu bi i tng gc.
616
Chng 16: Cc giao din v mu thng dng
Nu cn sao mt i tng khng hin thc ICloneable nhng li l kh-tun-tha, bn c th tun t ha ri gii tun t ha i tng c c cng kt
qu nh khi sao chp. Tuy nhin, qu trnh tun t ha c th khng tun t ha
tt c cc thnh vin d liu (nh c tho lun trong mc 16.1). Cng vy,
nu to mt kiu kh-tun-t-ha ty bin, bn c th s dng qu trnh tun t
ha va c m t thc hin mt bn sao su bn trong phng thc
ICloneable.Clone. sao mt i tng kh-tun-t-ha, bn hy s dng lp
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter tun t
ha i tng ny thnh mt i tng System.IO.MemoryStream, v ri gii tun
t ha i tng ny t System.IO.MemoryStream.
Lp Team di y hin thc phng thc Clone thc hin mt bn sao su. Lp Team cha
mt tp hp cc i tng Employe m t mt nhm ngi. Khi bn gi phng thc Clone
ca mt i tng Team, phng thc ny s to bn sao ca mi i tng Employee v thm
n vo i tng Team c sao. Lp Team cung cp mt phng thc khi dng private
n gin ha m lnh trong phng thc Clone (s dng phng thc khi dng l cch
thng thng n gin ha qu trnh sao chp).
using System;
using System.Collections;
public class Team : ICloneable {
public ArrayList TeamMembers = new ArrayList();
public Team() {
617
Chng 16: Cc giao din v mu thng dng
}
// Phng thc khi dng private c phng thc Clone gi
// to mt i tng Team mi v vo ArrayList ca n
// bn sao ca cc i tng Employee t mt ArrayList c trc.
private Team(ArrayList members) {
TeamMembers.Add(e.Clone());
}
}
// Thm mt i tng Employee vo Team.
public void AddMember(Employee member) {
TeamMembers.Add(member);
}
3.
618
Chng 16: Cc giao din v mu thng dng
i tng (obj) c truyn cho phng thc phi cng kiu vi i tng ang gi, nu
khng CompareTo s nm ngoi l System.ArgumentException. Gi tr do CompareTo tr v
c tnh nh sau:
Php so snh ny thc hin iu g l ty thuc vo kiu hin thc giao din IComparable.
V d, nu mun sp xp da theo tn, bn cn thc hin php so snh chui (String). Tuy
nhin, nu mun sp xp da theo ngy sinh, bn cn thc hin php so snh ngy
(System.DateTime).
h tr nhiu dng sp xp cho mt kiu c th, bn phi hin thc ring r tng kiu tr
gip v cc kiu ny hin thc giao din IComparer. Giao din ny nh ngha phng thc
Compare nh sau:
int Compare(object x, object y);
Nu x c cng gi tr nh y, tr v zero.
619
Chng 16: Cc giao din v mu thng dng
private class AscendingCirculationComparer : IComparer {
// Bo m x v y u l cc th hin ca Newspaper.
Newspaper newspaperX = x as Newspaper;
if (newspaperX == null) {
tr v mt s m nu x < y
//
tr v zero nu x = y
//
tr v mt s dng nu x > y
620
Chng 16: Cc giao din v mu thng dng
this.name = name;
this.circulation = circulation;
}
621
Chng 16: Cc giao din v mu thng dng
Phng thc Main minh ha php so snh v kh nng sp xp nh c hin thc giao din
IComparable
v
IComparer.
Phng
thc
ny
s
to
mt
tp
hp
System.Collections.ArrayList cha nm i tng Newspaper, sau sp xp ArrayList hai
ln bng phng thc ArrayList.Sort. Ln u, thao tc Sort s dng c ch so snh mc
nh ca Newspaper (thng qua phng thc IComparable.CompareTo). Ln sau, thao tc Sort
s dng i tng AscendingCirculationComparer (thng qua phng thc
IComparer.Compare).
public static void Main() {
ArrayList newspapers = new ArrayList();
newspapers.Add(new Newspaper("Tuoi Tre", 125780));
newspapers.Add(new Newspaper("Echip", 55230));
newspapers.Add(new Newspaper("Thanh Nien", 235950));
newspapers.Add(new Newspaper("Phu Nu", 88760));
newspapers.Add(new Newspaper("Tiep Thi", 5670));
Console.WriteLine("Unsorted newspaper list:");
foreach (Newspaper n in newspapers) {
Console.WriteLine(n);
}
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Newspaper list sorted by name (default order):");
newspapers.Sort();
foreach (Newspaper n in newspapers) {
Console.WriteLine(n);
}
622
Chng 16: Cc giao din v mu thng dng
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Newspaper list sorted by circulation:");
newspapers.Sort(Newspaper.CirculationSorter);
foreach (Newspaper n in newspapers) {
Console.WriteLine(n);
}
}
4.
623
Chng 16: Cc giao din v mu thng dng
M t
Current
MoveNext
Reset
624
Chng 16: Cc giao din v mu thng dng
625
Chng 16: Cc giao din v mu thng dng
this.sourceTeam = team;
sourceTeam.TeamChange +=
new TeamChangedEventHandler(this.TeamChange);
}
// Nu Team nm di bt hp l, nm ngoi l.
if (teamInvalid) {
626
Chng 16: Cc giao din v mu thng dng
// Nu Team nm di bt hp l, nm ngoi l.
if (teamInvalid) {
627
Chng 16: Cc giao din v mu thng dng
// y nhim dng ch nh ch k m tt c
// cc phng thc th l s kin phi hin thc.
public delegate void TeamChangedEventHandler(Team t, EventArgs e);
teamMembers.Add(member);
if (TeamChange != null) {
TeamChange(this, null);
}
}
}
628
Chng 16: Cc giao din v mu thng dng
foreach(TeamMember in team.Members) {
// Lm g ...
}
foreach(TeamComputer in team.Computers) {
// Lm g ...
}
629
Chng 16: Cc giao din v mu thng dng
5.
Hin thc giao din System.IDisposable, v gii phng cc ti nguyn khngc-qun-l khi m client gi phng thc IDisposable.Dispose.
630
Chng 16: Cc giao din v mu thng dng
Cc
phng
thc
thuc
tnh
khc
ca
lp
nn
nm
ngoi
tng b hy.
Lp DisposeExample di y minh ha mt hin thc ph bin ca mu Dispose:
using System;
631
Chng 16: Cc giao din v mu thng dng
// resourceHandle = ...
}
// Destructor/Finalizer.
~DisposeExample() {
// Gi phin bn np chng protected ca Dispose
// v truyn gi tr "false" cho bit rng
// Dispose ang c gi trong qu trnh thu gom rc,
// ch khng phi bi m consumer.
Dispose(false);
}
if (!isDisposed) {
if (disposing) {
632
Chng 16: Cc giao din v mu thng dng
// Lm g vi d...
633
Chng 16: Cc giao din v mu thng dng
}
}
}
6.
000fe
kch hot vic h tr format specifier, bn phi hin thc giao din IFormattable. Giao
din ny khai bo mt phng thc c tn l ToString vi ch k nh sau:
string ToString(string format, IFormatProvider formatProvider);
634
Chng 16: Cc giao din v mu thng dng
this.title = title;
this.names = names;
}
635
Chng 16: Cc giao din v mu thng dng
case 'S':
// S dng dng short: first-initial v surname.
result = names[0][0] + ". " + names[names.Length-1];
break;
case 'P':
// S dng dng polite: title, initials, v surname.
if (title != null && title.Length != 0) {
result = title + ". ";
}
for (int count = 0; count < names.Length; count++) {
if ( count != (names.Length - 1)) {
result += names[count][0] + ". ";
} else {
result += names[count];
}
}
break;
case 'I':
// S dng dng informal: ch c first-name.
result = names[0];
break;
case 'G':
default:
// S dng dng mc nh/general: first-name v surname.
result = names[0] + " " + names[names.Length-1];
break;
}
return result;
}
}
636
Chng 16: Cc giao din v mu thng dng
7.
637
Chng 16: Cc giao din v mu thng dng
Hin thc thm cc thuc tnh v cc thnh vin d liu h tr cc thng tin ty bin
m lp ngoi l ny cung cp.
Phng thc GetObjectData v phng thc khi dng gii tun t ha phi gi
phng thc tng ng trong lp c s cho php lp c s thc hin tun t ha
v gii tun t ha d liu ca n mt cch ng n (xem mc 16.1 bit cch lm
cho mt lp tr nn kh-tun-t-ha).
Di y l mt lp ngoi l ty bin c tn l CustomException (tha k lp
ApplicationException). Lp ny khai bo hai thnh vin d liu ty bin: mt chui c tn l
stringInfo v mt gi tr lun l c tn l booleanInfo.
638
Chng 16: Cc giao din v mu thng dng
using System;
using System.Runtime.Serialization;
// Phng thc khi dng gii tun t ha (cn cho giao din
// ISerialization). V CustomException l sealed nn phng thc
// khi dng ny l private. Nu CustomException khng phi l
// sealed th phng thc khi dng ny nn c khai bo l
// protected cc lp dn xut c th gi n trong qu trnh
// gii tun t ha.
private CustomException(SerializationInfo info,
StreamingContext context) : base (info, context) {
639
Chng 16: Cc giao din v mu thng dng
// cc thnh vin d liu ty bin.
public CustomException(string message, string stringInfo,
bool booleanInfo): this(message) {
this.stringInfo = stringInfo;
this.booleanInfo = booleanInfo;
}
640
Chng 16: Cc giao din v mu thng dng
8.
Khi khai bo cc kiu s kin, thng thng bn s cn truyn trng thi c-trng-s-kin
cho cc phng thc th l s kin. to mt lp i s s kin ty bin tun theo mu
Event do .NET Framework nh ngha, bn cn:
641
Chng 16: Cc giao din v mu thng dng
Hin thc thm cc thuc tnh v cc thnh vin d liu h tr trng thi s kin m
bn cn truyn cho cc phng thc th l s kin. Tt nht l lm cho trng thi s
kin tr nn bt bin (immutable), nh vy bn nn s dng cc thnh vin d liu
private readonly v s dng cc thuc tnh public cho php truy xut ch-c n
cc thnh vin d liu ny.
Hin thc mt phng thc khi dng public h tr cu hnh ban u ca trng thi s
kin.
[Serializable]
public sealed class MailReceivedEventArgs : EventArgs {
this.from = from;
this.subject = subject;
}
642
Chng 16: Cc giao din v mu thng dng
9.
643
Chng 16: Cc giao din v mu thng dng
10.
Cch truyn thng khi hin thc mu Observer l hin thc hai giao din: mt m t
observer (IObserver) v mt m t subject (ISubject). Cc i tng c hin thc
IObserver s ng k vi subject, cho bit chng mun c thng bo v cc s kin quan
trng (nh thay i trng thi) tc ng n subject. Subject chu trch nhim qun l danh
sch cc observer ng k v thng bo vi chng khi p ng cc s kin tc ng n
subject. Subject thng thng bo vi observer bng phng thc Notify (c khai bo
trong giao din IObserver). Subject c th truyn d liu cho observer trong phng thc
Notify, hoc observer c th cn gi mt phng thc c khai bo trong giao din
ISubject thu ly thm cc chi tit v s kin.
Mc d bn c th hin thc mu Observer bng C# theo cch va c m t, nhng v mu
Observer qu ph bin trong cc gii php phn mm hin i nn C# v .NET Framework
cung cp cc kiu s kin v y nhim n gin ha hin thc ca n. S dng s kin v
y nhim ngha l bn khng cn khai bo giao din IObserver v ISubject. Ngoi ra, bn
khng cn hin thc cc logic cn thit qun l v thng bo vi cc observer ng k
y chnh l phn d xy ra li nht khi vit m.
644
Chng 16: Cc giao din v mu thng dng
.NET Framework s dng mt hin thc cho mu Observer da-trn-s-kin v da-trn-ynhim thng xuyn n ni n c t mt ci tn: mu Event. File ObserverExample.cs
cha mt hin thc cho mu Event. V d ny bao gm:
Lp
Lp
TemperatureChangeEventArgsl
TemperatureChangeEventArgs
(c
trnh
by
bn
di)
dn
xut
lp
lp
oldTemperature = oldTemp;
newTemperature = newTemp;
}
645
Chng 16: Cc giao din v mu thng dng
nhn
hai
646
Chng 16: Cc giao din v mu thng dng
Vi
mc
ch
minh
ha
mu
Observer,
ny
hai
kiu
observer:
647
Chng 16: Cc giao din v mu thng dng
System.Console.WriteLine
("ChangeObserver: Old={0}, New={1}, Change={2}",
temp.OldTemperature, temp.NewTemperature,
temp.NewTemperature - temp.OldTemperature);
}
}
System.Console.WriteLine
648
Chng 16: Cc giao din v mu thng dng
("AverageObserver: Average={0:F}",
(double)sum/(double)count);
}
}
// To mt i tng Thermostat.
Thermostat t = new Thermostat();
// To hai observer.
new TemperatureChangeObserver(t);
new TemperatureAverageObserver(t);
try {
// Chuyn u vo ca ngi dng thnh mt s
// nguyn v s dng n thit lp nhit
// hin ti ca b n nhit.
t.Temperature =
System.Int32.Parse(System.Console.ReadLine());
} catch (System.Exception) {
// S dng iu kin ngoi l kt thc vng lp.
System.Console.WriteLine("Terminating ObserverExample.");
return;
}
} while (true);
649
Chng 16: Cc giao din v mu thng dng
}
650
Chng 16: Cc giao din v mu thng dng
651
17
652
653
Chng 17: S ha hp vi mi trng Windows
Hin ti, .NET Framework c th chy trn cc h iu hnh: Microsoft Windows, FreeBSD,
Linux, v Mac OS X. Tuy nhin, nhiu bn hin thc vn cha hon chnh hay cha c chp
nhn rng ri. Microsoft Windows hin l h iu hnh m .NET Framework c ci t
nhiu nht. Do , cc mc trong chng ny tp trung vo cc tc v c trng cho h iu
hnh Windows, bao gm:
1.
Bn cn truy xut cc thng tin v mi trng thc thi m ng dng ang chy
trong .
M t
Thuc tnh
CommandLine
CurrentDirectory
HasShutdownStarted
MachineName
654
Chng 17: S ha hp vi mi trng Windows
OSVersion
SystemDirectory
Ly chui cha ng dn y ca th mc h
thng.
TickCount
UserDomainName
UserInteractive
UserName
Version
ExpandEnvironmentVariables
GetCommandLineArgs
GetEnvironmentVariable
GetEnvironmentVariables
Tr v mt System.Collections.Idictionary cha
tt c cc bin mi trng v cc gi tr ca chng;
xem chi tit mc 17.2
GetFolderPath
Tr v chui cha ng dn n mt th mc h
thng c bit, c xc nh bi kiu lit k
System.Environment.SpecialFolder (bao gm cc
th mc cho Internet cache, Cookie, History,
Desktop, v Favourite; xem ti liu .NET
Framework SDK c danh sch tt c cc gi tr
ny).
655
Chng 17: S ha hp vi mi trng Windows
GetLogicalDrives
Major Version
Minor Version
H iu hnh
Win32Windows
10
Windows 98
Win32Windows
90
Windows Me
Win32NT
Windows NT 4
Win32NT
Windows 2000
Win32NT
Windows XP
Win32NT
656
Chng 17: S ha hp vi mi trng Windows
657
Chng 17: S ha hp vi mi trng Windows
Ly gi tr ca mt bin mi trng
2.
658
Chng 17: S ha hp vi mi trng Windows
3.
Chui cha ngun s kin cho entry nht k (ch c cc phng thc tnh).
659
Chng 17: S ha hp vi mi trng Windows
public class EventLogExample {
public static void Main () {
// Nu ngun s kin khng tn ti, ng k n vi
// nht k Application trn my cc b.
// ng k mt ngun s kin tn ti s
// sinh ra ngoi l System.ArgumentException.
if (!EventLog.SourceExists("EventLogExample")) {
EventLog.CreateEventSource("EventLogExample","Application");
}
// Ghi mt s kin vo nht k s kin.
EventLog.WriteEntry(
"EventLogExample",
// Ngun s kin ng k
// ID ca s kin
0,
// Category ca s kin
// D liu ca s kin
);
// Nhn Enter kt thc.
Console.WriteLine("Main method complete. Press Enter.");
Console.ReadLine();
}
}
4.
660
Chng 17: S ha hp vi mi trng Windows
ng vi
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_DYN_DATA
DynData
LocalMachine
PerformanceData
HKEY_LOCAL_MACHINE
HKEY_PERFORMANCE_DATA
HKEY_USERS
Users
M t
CreateSubKey
To mt kha mi vi tn c ch nh v tr v i tng
RegistryKey cho php ghi. Nu kha tn ti, phng thc ny
s tr v mt tham chiu cho php ghi n kha tn ti.
DeleteSubKey
DeleteSubKeyTree
661
Chng 17: S ha hp vi mi trng Windows
DeleteValue
GetValue
GetValueNames
SetValue
if (args.Length > 0) {
// M kha c s CurrentUser.
using(RegistryKey root = Registry.CurrentUser) {
// Cp nht bin m.
UpdateUsageCounter(root);
662
Chng 17: S ha hp vi mi trng Windows
// To mt kha lu tr bin m,
// hoc ly tham chiu n kha c.
RegistryKey countKey = root.CreateSubKey("RegistryExample");
663
Chng 17: S ha hp vi mi trng Windows
// v s nm SecurityException khi c m.
}
}
}
public static void PrintKeyValues(RegistryKey key) {
// Hin th tn ca kha c tm thy,
// v s lng gi tr ca n.
Console.WriteLine("Registry key found : {0} contains {1} values",
key.Name, key.ValueCount);
// Hin th cc gi tr ny.
foreach (string valuename in key.GetValueNames()) {
if (key.GetValue(valuename) is String) {
Console.WriteLine("
valuename, key.GetValue(valuename));
}
}
}
}
Khi c thc thi trn my chy Windows XP vi dng lnh RegistryExample Environment,
v d ny s cho kt xut nh sau:
Registry key found : HKEY_CURRENT_USER\Environment contains 4 values
Value : TEMP =
C:\Documents and Settings\nnbphuong81\Local Settings\Temp
Value : TMP =
C:\Documents and Settings\nnbphuong81\Local Settings\Temp
Value : LIB =
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Lib\
Value : INCLUDE =
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include\
5.
To mt dch v Windows
Bn cn to mt ng dng ng vai tr l mt dch v Windows.
To mt lp tha k t lp System.ServiceProcess.ServiceBase. S dng cc
thuc tnh tha k iu khin hnh vi ca dch v, v chp cc phng
664
Chng 17: S ha hp vi mi trng Windows
thc tha k hin thc cc chc nng cn thit. Hin thc phng thc Main,
trong to mt th hin ca lp dch v v truyn n cho phng thc tnh
ServiceBase.Run.
Nu ang s dng Microsoft Visual C# .NET, bn c th dng mu d n Windows Service
to mt dch v Windows. Mu ny cung cp sn cc m lnh c bn cn cho mt lp dch v,
v bn c th hin thc thm cc chc nng ty bin.
to mt dch v Windows bng tay, bn phi hin thc mt lp dn xut t ServiceBase.
Lp ServiceBase cung cp cc chc nng c bn cho php Windows Service Control
Manager (SCM) cu hnh dch v, thi hnh dch v di nn, v iu khin thi gian sng ca
dch v. SCM cng iu khin vic cc ng dng khc c th iu khin dch v nh th no.
M t
665
Chng 17: S ha hp vi mi trng Windows
OnStart
OnStop
OnPause
OnContinue
OnShutdown
OnPowerEvent
OnCustomCommand
Nh c cp trong bng 17.5, phng thc OnStart phi tr v trong vng 30 giy, do
bn khng nn s dng OnStart thc hin cc thao tc khi ng tn nhiu thi gian. Mt
lp dch v nn hin thc mt phng thc khi dng thc hin cc thao tc khi ng,
bao gm vic cu hnh cc thuc tnh tha k t lp ServiceBase. Ngoi cc thuc tnh khai
bo cc thng ip iu khin no c dch v h tr, lp ServiceBase cn hin thc ba
thuc tnh quan trng khc:
AutoLogiu khin vic dch v c t ng ghi vo nht k s kin hay khng khi
666
Chng 17: S ha hp vi mi trng Windows
public ServiceExample() {
667
Chng 17: S ha hp vi mi trng Windows
EventLog.WriteEntry("ServiceExample active : " + e.SignalTime);
}
protected override void OnStart(string[] args) {
// Ly chu k ghi s kin t i s th nht.
// Mc nh l 5000 mili-giy,
// v ti thiu l 1000 mili-giy.
double interval;
try {
interval = System.Double.Parse(args[0]);
interval = Math.Max(1000, interval);
} catch {
interval = 5000;
}
EventLog.WriteEntry("ServiceExample stopping...");
timer.Stop();
// Gii phng ti nguyn h thng do Timer s dng.
668
Chng 17: S ha hp vi mi trng Windows
timer.Dispose();
timer = null;
}
protected override void OnPause() {
if (timer != null) {
EventLog.WriteEntry("ServiceExample pausing...");
timer.Stop();
}
}
if (timer != null) {
EventLog.WriteEntry("ServiceExample resuming...");
timer.Start();
}
}
6.
To mt b ci t dch v Windows
Bn to mt ng dng dch v Windows v cn ci t n.
Tha k lp System.Configuration.Install.Installer to mt lp ci t gm
nhng thng tin cn thit ci t v cu hnh lp dch v ca bn. S dng
cng c Installutil.exe thc hin vic ci t.
669
Chng 17: S ha hp vi mi trng Windows
To mt lp tha k t lp Installer.
2.
3.
4.
ny
phi
trng
vi
gi
tr
gn
cho
thuc
tnh
ServiceBase.ServiceName.
[RunInstaller(true)]
public class ServiceInstallerExample : Installer {
670
Chng 17: S ha hp vi mi trng Windows
public ServiceInstallerExample() {
671
Chng 17: S ha hp vi mi trng Windows
7.
672
Chng 17: S ha hp vi mi trng Windows
S dng COM Interop truy xut cc chc nng ca Windows Script Host. To
v cu hnh mt th hin IWshShortcut tng ng vi shortcut. Th mc cha
shortcut s xc nh shortcut xut hin trn Desktop hay trong Start menu.
Th vin lp .NET Framework khng c chc nng to shortcut trn Desktop hay trong Start
menu; tuy nhin, vic ny c th c thc hin d dng bng thnh phn Windows Script
Host (c truy xut thng qua COM Interop). Cch to Interop Assembly truy xut mt
thnh phn COM c trnh by trong mc 15.6. Nu ang s dng Visual Studio .NET,
bn hy thm mt tham chiu n Windows Script Host Object Model (c lit k trong th
COM ca hp thoi Add Reference). Nu khng c Visual Studio .NET, bn hy s dng cng
c Type Library Importer (Tlbimp.exe) to mt Interop Assembly cho file wshom.ocx (file
ny thng nm trong th mc Windows\System32). Bn c th ly phin bn mi nht ca
Windows Script Host ti [http://msdn.microsoft.com/scripting].
Hnh 17.4 Chn Windows Script Host Object Model trong hp thoi Add Reference
2.
673
Chng 17: S ha hp vi mi trng Windows
4.
5.
674
Chng 17: S ha hp vi mi trng Windows
675
Chng 17: S ha hp vi mi trng Windows
// Cu hnh shortcut hin th icon u tin trong notepad.exe.
shortcut.IconLocation = "notepad.exe, 0";
// Lu file shortcut.
shortcut.Save();
}
}
676
PH LC A
GII THIU
MT S CNG C .NET
P
PH LC A: GII THIU MT S CNG C .NET
677
Ph lc A: Gii thiu mt s cng c .NET
678
Ph lc A: Gii thiu mt s cng c .NET
Phn document cha biu thc chnh quy, trong v d ny l [0-9]*, biu thc ny trng khp
vi bt k dy ch s no. Hp pha di phi cha u vo cho biu thc chnh quy, v
hp pha di tri hin th nhng trng khp m biu thc chnh quy tm thy bn trong cc
u vo. Vit v kim tra cc biu thc chnh quy trong mt ng dng c lp nh th ny th
d hn nhiu so vi thao tc chng trong ng dng ca bn.
Mt trong nhng tnh nng hay nht ca Regulator l kh nng tm kim th vin biu thc
chnh quy trc tuyn ti [http://regexlib.com]. V d, nu nhp chui "phone" vo hp tm
679
Ph lc A: Gii thiu mt s cng c .NET
kim, bn s tm thy hn 20 biu thc chnh quy khc nhau trng khp vi cc s in thoi,
bao gm cc biu thc cho Anh, c, v nhiu s in thoi khc.
Khai bo ny s lm cho thuc tnh ClassName xut hin trong ca s thuc tnh ca
CodeSmith n c th c ch nh khi template chy.
Bc tip theo l xy dng phn thn ca template (vi m lnh tng t nh ASP.NET). Nh
bn c th thy, template ny nhn chui nhp v sinh ra mt lp vi tn . Trong phn thn
ca template, cc th ng v m c s dng nh trong ASP.NET. Trong template ny, ta
ch chn gi tr thuc tnh, nhng cng c th s dng bt k kiu m .NET no bn trong cc
th ny.
public sealed class <%= ClassName %>
{
private static volatile <%= ClassName %> _instance;
private <%= ClassName %>() {}
680
Ph lc A: Gii thiu mt s cng c .NET
681
Ph lc A: Gii thiu mt s cng c .NET
lock(_syncRoot)
{
if (_instance == null)
{
_instance = new SingletonClass();
}
}
}
return _instance;
}
}
}
682
Ph lc A: Gii thiu mt s cng c .NET
namespace NUnitExample
{
[TestFixture]
public class HashtableTest {
public HashtableTest() {
}
}
}
ht.Add("Key1", "Value1");
ht.Add("Key2", "Value2");
683
Ph lc A: Gii thiu mt s cng c .NET
Trn y ch l mt kim th n gin, nhng cho thy kh nng ca NUnit. C rt nhiu kiu
kim th, cng nh nhiu phng thc Assert, c th c s dng kim th mi phn
trong m lnh ca bn.
Mt kim th n v c th lu v chy li mi khi bn sa i m lnh, iu ny gip bn
pht hin li d dng hn v m bo pht trin ng dng tt hn.
Cng c mt bn add-in ca NUnit cho Visual Studio .NET, add-in ny cho php bn trc tip
chy cc phng thc kim th n v t Visual Studio .NET (c th c download ti
[http://sourceforge.net/projects/nunitaddin]).
c thm thng tin v NUnit v v tr ca n trong vic pht trin test-driven (vn hnh theo
kim th), bn hy xem bi vit Test-Driven C#: Improve the Design and Flexibility of Your
Project with Extreme Programming Techniques trong a CD nh km.
A.5 Kim sot m lnh vi FxCop
.NET Framework rt mnh, c ngha kh nng to ra nhng ng dng tuyt vi l rt cao,
nhng kh nng to ra nhng chng trnh ti cng l rt cao. FxCop l mt trong nhng
cng c c th c s dng tr gip to ra nhng ng dng tt hn bng vic cho php
bn kho st mt assembly v kim tra tnh tng thch ca n vi mt s quy lut. FxCop
cha tp cc quy lut do Microsoft to ra, nhng bn cng c th to ra nhng quy lut cho
mnh. Chng hn, nu mun tt c cc lp u c mt phng thc khi dng mc nh
khng i s, bn c th vit mt quy lut kim tra phng thc khi dng trn mi lp ca
assembly. c thm thng tin v vic to nhng quy lut ty bin, bn hy vo
[http://msdn.microsoft.com/msdnmag/issues/04/06/bugslayer].
V d, chng ta hy xem FxCop pht hin ra li g trong assembly NUnitExample ( c
trnh by mc A.4). Trc tin, bn cn to mt d n FxCop v a assembly ny vo. Sau
684
Ph lc A: Gii thiu mt s cng c .NET
685
Ph lc A: Gii thiu mt s cng c .NET
686
Ph lc A: Gii thiu mt s cng c .NET
ht.Add("Key1", "Value1");
ht.Add("Key2", "Value2");
687
Ph lc A: Gii thiu mt s cng c .NET
Phn ch thch XML cho phng thc ny s c trch xut v lu thnh file XML nh sau:
<?xml version="1.0" ?>
<doc>
<assembly>
<name>NUnitExample</name>
</assembly>
<members>
<member name="M:NUnitExample.HashtableTest.HashtableAddTest">
<summary>This test adds a number of values to the Hashtable
collection and then retrieves those values and checks if
they match.
688
Ph lc A: Gii thiu mt s cng c .NET
</summary>
</member>
</members>
</doc>
689
Ph lc A: Gii thiu mt s cng c .NET
690
Ph lc A: Gii thiu mt s cng c .NET
</sources>
</csc>
</target>
</project>
691
Ph lc A: Gii thiu mt s cng c .NET
Tuy khng d dng nh vic nhp Build trong Visual Studio, nhng NAnt l mt cng c rt
mnh khi xy dng quy trnh to dng chy t ng theo lch biu. NAnt cng c cc tnh
nng hu ch nh chy cc kim th n v hay chp cc file i km (cc tnh nng ny khng
c quy trnh to dng ca Visual Studio 2003 h tr).
692
Ph lc A: Gii thiu mt s cng c .NET
693
Ph lc A: Gii thiu mt s cng c .NET
VB.NET to C# Converter l trnh chuyn i m ngun sang m ngun. Sau khi chuyn i,
m lnh ca bn vn gi li tnh d c vn c (bao gm cc tn bin v cc ch thch). Tnh
tin cy ca chng trnh cng rt cao, chnh xc trn 99% trong hu ht cc ln th nghim.
694
Ph lc A: Gii thiu mt s cng c .NET
695
Ph lc A: Gii thiu mt s cng c .NET
696
Ph lc A: Gii thiu mt s cng c .NET
Cui cng, vo th Generate v nhp nt Generate. Sau khi xy dng thnh cng, bn
hy vo http://localhost/pubs xem kt qu.
697
PH LC B
THUT NG
ANH VIT
Absolute [adj].................................................................................................. Tuyt i
Abstract [adj]................................................................................................ Tru tng
Access [v]........................................................................................................ Truy xut
Access modifier............................................................. T kha thay i tm truy xut
Accessibility..................................................................................... Kh nng truy xut
Account........................................................................................................... Ti khon
ACL [Access Control List]............................................ Danh sch iu khin truy xut
Administrator........................................................................................... Ngi qun tr
Aggregate function..................................................................................... Hm tp hp
Algorithm........................................................................................................ Gii thut
API [Application Programming Interface]........................Giao din lp trnh ng dng
Application...................................................................................................... ng dng
Application domain................................................................................ Min ng dng
Argument.............................................................................................................. i s
Arithmetic............................................................................................................ S hc
Array...................................................................................................................... Mng
Assembly...................................................................................................... Gi kt hp
Asymmetric [adj]........................................................................................Bt i xng
Asynchronous [adj]..................................................................................... Bt ng b
Attribute............................................................................................................. c tnh
Authentication.............................................................................................. S xc thc
Authorization........................................................................................... S phn quyn
Availability.............................................................................................. Tnh kh dng
Binary............................................................................................................... Nh phn
Block....................................................................................................................... Khi
Bound........................................................................................................................ Cn
Boundary................................................................................... ng bin / Ranh gii
Breakpoint..................................................................................................... im dng
698
Ph lc B: Thut ng Anh - Vit
Browser.........................................................................................................Trnh duyt
Buffer.................................................................................................................. B m
Built-in [adj]......................................................................................................... Ni ti
Cache...................................................................................Kho cha (truy xut nhanh)
Caching.................................................................................................... C ch lu gi
CAS [Code Access Security]................................................ Bo mt truy xut m lnh
Certificate....................................................................................................... Chng ch
Channel................................................................................................................... Knh
Character................................................................................................................ K t
Class..........................................................................................................................Lp
Client............................................................................................................ Trnh khch
Clone [v]........................................................................................................... Sao chp
Cloneable [adj].......................................................................................... Kh sao chp
CLR [Common Language Runtime].................................. B thc thi ngn ng chung
Code................................................................................................................... M lnh
Collection........................................................................................................... Tp hp
Column...................................................................................................................... Ct
Command................................................................................................................ Lnh
Communication............................................................................................ S giao tip
Comparable [adj]......................................................................................... Kh so snh
Compare [v]........................................................................................................ So snh
Compatibility........................................................................................ Tnh tng thch
Compile [v]...................................................................................................... Bin dch
Compiler................................................................................................. Trnh bin dch
Component................................................................................................... Thnh phn
Component tray.................................................................................... Khay thnh phn
Configuration.................................................................................................... Cu hnh
Connection.......................................................................................................... Kt ni
Constant.................................................................................................................. Hng
Constructor................................................................................ Phng thc khi dng
Context.............................................................................................................Ng cnh
Context-sensitive help............................................................... Tr gip cm-ng-cnh
Control............................................................................................................ iu kim
Convert [v].................................................................................................... Chuyn i
Convertible [adj].................................................................................... Kh chuyn i
Cryptography...................................................................................................... Mt m
Culture....................................................................................................... Min vn ha
Custom [adj]..................................................................................................... Ty bin
Data..................................................................................................................... D liu
Data binding.................................................................................... K thut kt d liu
Database.....................................................................................................C s d liu
De-compile [v].............................................................................................. Dch ngc
699
Ph lc B: Thut ng Anh - Vit
De-serialize [v]...................................................................................... Gii tun t ha
Decrypt [v].................................................................................................. Gii mt ha
Decryption.............................................................................................. S gii mt ha
Debug [v].............................................................................................................. G ri
Debugger...................................................................................................... Trnh g ri
Default.............................................................................................................. Mc nh
Delegate................................................................................................... y nhim hm
Deploy [v]....................................................................................................... Trin khai
Destructor............................................................................................ Phng thc hy
Device................................................................................................................. Thit b
Derive [v].......................................................................................................... Dn xut
Dictionary........................................................................................................... T in
Digital signature.............................................................................................. Ch k s
Directive............................................................................................................... Ch th
Directory........................................................................................................... Th mc
Disposable [adj]................................................................................................. Kh hy
Dispose [v]................................................................................................................ Hy
Distributed [adj]....................................................................................C tnh phn tn
Document............................................................................................................ Ti liu
Domain................................................................................................................... Min
Edit [v]........................................................................................................... Hiu chnh
Editor...................................................................................................... Trnh son tho
Encapsulation............................................................................................... S ng gi
Encode [v]........................................................................................................... M ha
Encoding..................................................................................................... Php m ha
Encrypt [v]......................................................................................................... Mt ha
Encryption..................................................................................................... S mt ha
Entry............................................................................................................. Khon mc
Enumeration..................................................................................................Kiu lit k
Environment..................................................................................................Mi trng
Error........................................................................................................................... Li
Event................................................................................................................... S kin
Event hander........................................................................ Phng thc th l s kin
Event log................................................................................................ Nht k s kin
Evidence.......................................................................................................... Chng c
Exception.............................................................................................................. Bit l
Exception hander................................................................... Phng thc th l bit l
Expiration................................................................................................ S ht hiu lc
Export [v]................................................................................................................. Xut
Expression....................................................................................................... Biu thc
Feature............................................................................................................ Tnh nng
Field.................................................................................................................... Trng
File....................................................................................................................... Tp tin
Filter......................................................................................................................B lc
Flag............................................................................................................................. C
700
Ph lc B: Thut ng Anh - Vit
701
Ph lc B: Thut ng Anh - Vit
Item................................................................................................................. Mc chn
JIT [just-in-time]....................................................................... Tc thi / Va ng lc
Key......................................................................................................................... Kha
Keyword.............................................................................................................T kha
Language......................................................................................................... Ngn ng
Length.............................................................................................................. Chiu di
Library.............................................................................................................. Th vin
Lifetime................................................................................................... Thi gian sng
Link.................................................................................................................... Lin kt
List.................................................................................................................. Danh sch
Literal...............................................................................................................Trc kin
Load [v].................................................................................................................... Np
Local [adj]........................................................................................................... Cc b
Locale.................................................................................................................. Bn a
Localization............................................................................................. S bn a ha
Lock......................................................................................................................... Cht
Logic........................................................................................... M thi hnh chc nng
Loop.................................................................................................................. Vng lp
Managed [adj]........................................................................................... c qun l
Management................................................................................................... S qun l
Mapping....................................................................................................... Php nh x
Member......................................................................................................... Thnh vin
Membership...................................................................................... T cch thnh vin
Memory............................................................................................................... B nh
Menu............................................................................................................... Trnh n
Message........................................................................................................ Thng ip
Metacharacter..................................................................................................Siu k t
Metadata....................................................................................................... Siu d liu
Method........................................................................................................ Phng thc
Model................................................................................................................. M hnh
Module............................................................................................................... n th
MSIL [Microsoft Intermediate Language]..................................... Ngn ng trung gian
Multilingual [adj]....................................................................................... a ngn ng
Multithreading.............................................................................. Lp trnh a tiu trnh
Native [adj]................................................................................................. Nguyn sinh
Namespace.............................................................................................. Khng gian tn
Network................................................................................................................. Mng
Node.......................................................................................................................... Nt
Object.............................................................................................................. i tng
Object-oriented programming...............................................Lp trnh hng i tng
Operating system....................................................................................... H iu hnh
Operator.............................................................................................................. Ton t
Output.................................................................................................. u ra / Kt xut
Overload.................................................................................................. Bn np chng
Override [v]........................................................................................................ Chp
702
Ph lc B: Thut ng Anh - Vit
Parameter..........................................................................................................Thng s
Password.......................................................................................................... Mt khu
Path................................................................................................................ ng dn
Pattern.............................................................................................................. Kiu mu
Performance.................................................................................................... Hiu nng
Permission............................................................................................................ Quyn
Pixel................................................................................................................. im nh
Platform.................................................................................................................... Nn
Pointer................................................................................................................. Con tr
Policy............................................................................................................. Chnh sch
Polymorphisme........................................................................................... Tnh a hnh
Pool................................................................................................................ Kho d tr
Pooling...................................................................................................... C ch d tr
POP3 [Post Office Protocol 3].....................................................Giao thc nhn mail 3
Port......................................................................................................................... Cng
Postfix................................................................................................................... Hu t
Prefix.................................................................................................................... Tin t
Private [adj]........................................................................................................... Ring
Privilege......................................................................................................... c quyn
Procedure............................................................................................................ Th tc
Process............................................................................................................. Tin trnh
Processor........................................................................................................... B x l
Project.................................................................................................................... D n
Property..........................................................................................................Thuc tnh
Protected [adj].............................................................................................c bo v
Protocol........................................................................................................... Giao thc
Public [adj]..................................................................................................... Cng khai
Query................................................................................................................ Truy vn
Queue............................................................................................................... Hng i
Random......................................................................................................... Ngu nhin
RBS [Role-Based Security]..................................................... Bo mt da-trn-vai-tr
Record................................................................................................. Bn ghi / Mu tin
Recursion........................................................................................................ S quy
Reference...................................................................................................... Tham chiu
Reflection.......................................................................................... C ch phn chiu
Register [v]........................................................................................................ ng k
Regular expression.......................................................................... Biu thc chnh quy
Relationship................................................................................................ Mi quan h
Relative [adj]................................................................................................. Tng i
Remotable [adj]................................................................................ Kh truy xut t xa
Resource........................................................................................................ Ti nguyn
Reusability.....................................................................................Kh nng ti s dng
703
Ph lc B: Thut ng Anh - Vit
Role...................................................................................................................... Vai tr
Routine....................................................................................................... Thng trnh
Row.............................................................................................................Hng / Dng
Runtime......................................................................................................... B thc thi
Schema................................................................................................. Lc / Khun
Script................................................................................................................. Kch bn
Security......................................................................................................... S bo mt
Serialize [v].................................................................................................. Tun t ha
Serializable [adj].................................................................................... Kh tun t ha
Serialization............................................................................................. S tun t ha
Server............................................................................................................... Trnh ch
Service................................................................................................................ Dch v
Session..................................................................................................... Phin lm vic
Setting............................................................................................................... Thit lp
Shared [adj]......................................................................... c chia s / Dng chung
Signature.............................................................................................................. Ch k
SMTP [Simple Mail Transfer Protocol]........................ Giao thc truyn mail n gin
SOAP [Simple Object Access Protocol]........... Giao thc truy xut i tng n gin
Solution............................................................................................................ Gii php
Specialization....................................................................................... Tnh chuyn ha
SQL [Structured Query Language].................................Ngn ng truy vn c cu trc
Stack............................................................................................................ Ngn chng
State................................................................................................................ Trng thi
State | Stateless [adj].......................................................... C trng thi | Phi trng thi
Statement......................................................................................... Cu lnh / Khai bo
Static [adj]............................................................................................................... Tnh
Stored procedure..................................................................................... Th tc tn tr
Stream............................................................................................................ Dng chy
String..................................................................................................................... Chui
Strong name.................................................................................................... Tn mnh
Strong type..................................................................................................... Kiu mnh
Strongly-named [adj]......................................................................c nh tn mnh
Strongly-typed [adj]..................................................................... c nh kiu mnh
Structure............................................................................................................ Cu trc
Symmetric [adj]............................................................................................... i xng
Synchronization......................................................................................S ng b ha
Synchronous [adj]............................................................................................. ng b
System.............................................................................................................. H thng
System tray.............................................................................................. Khay h thng
Table....................................................................................................................... Bng
Tag............................................................................................................................ Th
Task...................................................................................................................... Tc v
Template....................................................................................................... Khun mu
Thread................................................................... Tiu trnh / Mch trnh / Tuyn on
Thread-safe..................................................................................... An ton v tiu trnh
704
Ph lc B: Thut ng Anh - Vit
Throw [v]................................................................................................................. Nm
Timestamp................................................................................................ Tem thi gian
Tool.................................................................................................................... Cng c
Toolbox....................................................................................................... Hp cng c
Transaction............................................................................................. Phin giao dch
Type......................................................................................................................... Kiu
Type-safe................................................................................... An ton v kiu d liu
Unmanaged [adj]............................................................................ Khng c qun l
Update............................................................................................................... Cp nht
URI [Uniform Resource Identifier]...................... B nhn dng ti nguyn ng dng
URL [Uniform Resource Locator]............................. B nh v ti nguyn ng dng
User.............................................................................................................. Ngi dng
Utility................................................................................................................. Tin ch
Validation.................................................................................. S xc nhn tnh hp l
Value..................................................................................................................... Gi tr
Variable................................................................................................................... Bin
Version............................................................................................................ Phin bn
Virtual [adj]................................................................................................................ o
Visible [adj]...................................................................................................... Kh kin
Visual [adj]..................................................................................................... Trc quan
Wildcard................................................................................................... K t i din
Window................................................................................................................ Ca s
Worker...................................................................................................................... Th
Wrapper............................................................................................................... V bc
WSDL [Web Services Description Language]................ Ngn ng m t dch v Web
XML [Extensible Markup Language]............................... Ngn ng nh du m rng
705
[2]
John Connell. Coding Techniques for Microsoft Visual Basic .NET. Microsoft Press,
2002.
[3]
Harvey M. Deitel, Paul J. Deitel, & Tem R. Nieto. Visual Basic .NET How to Program,
Second Edition. Prentice Hall, 2002.
[4]
[5]
James Avery. Ten Must-Have Tools Every Developer Should Download Now. MSDN
Magazine, 2004.
[6]
Karl Moore. The Ultimate VB.NET and ASP.NET Code Book. Apress, 2003.
[7]
[8]
Mark Schmidt & Simon Robinson. Microsoft Visual C# .NET 2003 Developer's
Cookbook. Sams Publishing, 2003.
[9]
[10]
Nguyn Ngc Bnh Phng & L Trn Nht Qunh. Cc gii php lp trnh Visual
Basic .NET. Nh xut bn Giao thng Vn ti, 2006.
[11]
Thi Thanh Phong & Nguyn Ngc Bnh Phng. S tay tra cu VB.NET. Nh xut
bn Giao thng Vn ti, 2004.
[12]