Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
p
a
t
t
e
r
n
s
&
p
r
a
o
t
i
o
e
s
Gula de Arqultetura
e Prejete de
5mart Cllents
As informaes oontidas neste dooumento, inoluindo refernoia uRL a outros sites da
internet, esto sujeitas a alterao sem aviso prvio. A menos que seja indioado o oontrario,
as empresas, organizaes, produtos, nomes de dominio, endereos de e-mail, logotipos,
pessoas, looais e eventos aqui oitados so fiotioios, e nenhuma assooiao a qualquer
empresa, organizao, produto, nome de dominio, endereo de e-mail, logotipo, pessoa,
lugar ou eventos reais intenoional ou deve assim ser inferida. Atender a todas as leis de
direitos autorais aplioaveis responsabilidade do usuario. 3em limitar os direitos autorais,
nenhuma parte deste dooumento deve ser reproduzida, armazenada ou introduzida em um
sistema de reouperao, outransmitidade qualquer forma oupor qualquer meio (eletrnioo,
meonioo, fotooopia, gravao ou outros) ou para qualquer finalidade sem o oonsentimento
expressopor esoritodaMiorosoft Corporation.
A Miorosoft pode possuir patentes, solioitaes de patentes, maroas oomeroiais, direitos
autorais ou outros direitos de propriedade inteleotual oobrindo itens oitados neste
dooumento. Lxoeto se expressamente indioado em qualquer aoordo de lioenapor esorito da
Miorosoft, o forneoimento deste dooumento no oonoede nenhuma lioena a essas
patentes, maroas oomeroiais, direitos autorais ououtrapropriedade inteleotual.
2006Miorosoft Corporation. 1odos os direitos reservados.
Miorosoft, M3-U03, windows, windows N1, windows 3erver, Aotive Uireotory, Biz1alk,
lnfoPath, M3UN, 0utlook, visual Basio, visual C++, visual C#, visual 3tudio ewin32 so
maroas oomeroiais daMiorosoft Corporationnos Lstados unidos e/ouem outros paises.
1odas as outras maroas oomeroiais sode posse de seus respeotivos proprietarios.
0avd P||, Mcrosoft Uorporaton.
renton Webster, Mcrosoft Uorporaton.
Ldward A. Jezersk, Mcrosoft Uorporaton.
5rnath vasreddy, Mcrosoft Uorporaton.
Mo A|-5abt, Mcrosoft Uorporaton.
|ane Waste||, Ascentum Uorporaton.
Jonathan Pasmusson, 1houghtworks.
Pau| Ua|e, 1houghtWorks.
Pau| 5|ater, Wadeware LLU.
0e|a 4e Arqe|tetera e Prejete
4e Smart 0||eats
patterns & praotioes
Indce
Ap|caes Pch U|ent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Ap|caes 1hn U|ent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Ap|caes 5mart U|ent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Ap|caes 5mart U|ent do Wndows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Ap|caes 5mart U|ent do 0ffce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Ap|caes Moves para 5mart U|ent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Pr-requstos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Uaptu|o 1: Introduo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Uaptu|o 2: Manpu|ao de 0ados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Uaptu|o 3: Uonectando-se. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Uaptu|o 4: 5mart U|ents Uonectados 0casona|mente. . . . . . . . . . . . . . . . . . . . . . 1
Uaptu|o : Uonsderaes de 5egurana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Uaptu|o 6: Ut|zando 1hreads Mu|tp|os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Uaptu|o 7: Imp|ementando e Atua|zando as Ap|caes 5mart U|ent . . . . . . . . . . 16
Uaptu|o 8: 0esempenho da Ap|cao 5mart U|ent . . . . . . . . . . . . . . . . . . . . . . . . 16
Prefco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
lntredue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
0 que um 5mart U|ent? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1pos de 5mart U|ent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Lsco|hendo entre 5mart U|ent e 1hn U|ent . . . . . . . . . . . . . . . . . . . . . . . 10
0esafos da Arqutetura 5mart U|en . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Lscopo deste Uua. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Uomo ut|zar este Uua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
uem deve |er este Uua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5nopse de Uaptu|os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Mas Informaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Catule 1
0e|a 4e Arqe|tetera e Prejete
4e Smart 0||eats
Catule 2
Catule 3
Manpu|ao de 0ados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1pos de 0ados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
0ados em Uach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
0ados 5mu|tneos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Ut|zando o 0ata5ets do A00.NL1 para Uerencar 0ados . . . . . . . . . . . 2
vncu|ao de 0ados com Iormu|ros do Wndow . . . . . . . . . . . . . . . . . 27
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Cenectande-se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5stemas Loose|y Uoup|ed e 1ght|y Uoup|ed . . . . . . . . . . . . . . . . . . . . . . 39
0pes de Uomuncao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Lsco|hendo uma 0po de Uomuncao . . . . . . . . . . . . . . . . . . . . . . . . . 47
Pro[etando Ap|caes 5mart U|ent Uonectadas . . . . . . . . . . . . . . . . . . . 48
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0
0ados de Pefernca somente para |etura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
0ados 1emporros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
|oco de Ap|cao em Uach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Mesc|ando os 0ados com os 0atasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Aumentando o desempenho dos 0atasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Arqutetura de vncu|ao de 0ados com formu|ros do Wndows . . . . . . . . . . . . 28
vncu|ao de dados para contro|es de Iormu|ros do Wndows . . . . . . . . . . . . . 30
5ervos.NL1 para Lmpresas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
.NL1 Pemotng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Message ueung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Web 5ervces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Use Mensagens Uoarse-Uraned, Lm Upsu|a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Lvtando 1ransaes AUI0 0strbudas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Lvtando o Lnvo de 0atasets Atravs da Pede. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
0vdndo Urandes 0atasets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
versone seus Web servces e Assemb|es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Catule 4
Catule 5
5mart Cllents 0caslenalmente Cenectades . . . . . . . . . . . . . . . . . . . . . . 1
Uenros Uomuns Uonectados 0casona|mente . . . . . . . . . . . . . . . . . . . . 2
Lstratgas de Pro[eto Uonectados 0casona|mente . . . . . . . . . . . . . . . . 3
0esenvo|vmento de Ap|caes 5mart U|ent 0casona|mente Uonectadas
Usando uma Abordagem aseada em tarefas. . . . . . . . . . . . . . . . . . . . . 72
Manpu|ao de 0ependncas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Censlderaes de 5egurana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Autentcao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Autorzao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
va|dao de Lntrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Abordagem Uentrada em dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A Abordagem 0rentada Para o 5ervo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Ut|zao de Abordagem 0rentada Para o 5ervo . . . . . . . . . . . . . . . . . . . . . . . . . 9
Iavorecmento de Uomuncao Assncrnca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Mnmzao de Interaes Uomp|exas de Pede . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Ado de Uapacdades de Uach de 0ados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Manpu|ando Uonexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
0esenvo|vmento de Mecansmo 5tore-and-Iorward . . . . . . . . . . . . . . . . . . . . . . . . 64
Uerencamento de Uonf|tos de Pegras de negoco e 0ados . . . . . . . . . . . . . . . . . . 6
Interao com Web 5ervce UPU0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Uenros de Autentcao 5mart U|ent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Lsco|hendo o Mode|o de Autentcao Uorreto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1pos de Autorzao de Acesso de Pede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Peco|her e va|dar Uredencas de Usuros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
0retrzes de Autentcao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
1pos de Autorzao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Ado de Uapacdades em 5ua Ap|cao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
0retrzes de Autentcao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Autorzao de Iuncona|dade uando o U|ente est 0ff|ne . . . . . . . . . . . . . . . . 96
0 |oco de Autorzao Ap|cao e Perf| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Manpu|ao de 0ados 5ensves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5egurana do Acesso ao Uodgo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
0etermnar uas dados Armazenar no U|ente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
1cncas para Proteo de 0ados 5ensves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Peso|uo de Permsso de 5egurana do Acesso ao Uodgo. . . . . . . . . . . . . . . . . 104
0esenvo|vmento para 5egurana do Acesso ao Uodgo . . . . . . . . . . . . . . . . . . . . . 10
Utlllzande 1hreads Mltlles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
1hreads Mu|tp|os no..NL1 Iramework. . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Lsco|her entre Uhamados 5ncrncos e Assncrncos . . . . . . . . . . . . . . . . . . . . . . 114
Lsco|her entre 1hreads de Ioreground e ackground . . . . . . . . . . . . . . . . . . . . . . . 114
Manpu|ao de Protoco|o e 5ncronzao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Ut|zando 1mers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
uando Usar 1hreads Mu|tp|os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Uomuncar-se Atravs de Uma Pede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Lxecutar 0peraes Locas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
0stngur 1arefas de Prordade varante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5tartup da Ap|cao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Urando e Ut|zando 1hreads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Ut|zando a U|asse 1hreadPoo| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Ut|zando a U|asse 1hread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Ut|zando 0e|egados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Uhamando Web 5ervces Assncrncamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Ut|zando 1arefas para Manpu|ar Interaes entre o 1hread UI e 0utros
1hreads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
0efnndo uma 1ask U|ass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ut|zando uma 1ask U|ass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
lmlantae e Atuallzae das Allcaes 5mart Cllent . . . . . . . . . . . 137
Imp|ementando o .NL1 Iramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Pr- Insta|ando o .NL1 Iramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Insta|ao do .NL1 Iramework com uma Ap|cao. . . . . . . . . . . . . . . . . . . . . . . . . 139
Catule 6
Uatule 1
Imp|ementando Ap|caes 5mart U|ent . . . . . . . . . . . . . . . . . . . . . . . . . 140
Imp|ementao No-touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Imp|ementao de Update 5tub em Ap|caes No-touch. . . . . . . . . . . . . . . . . . . . 144
Lxecutando Uodgos de um Arquvo Uompart|hado . . . . . . . . . . . . . . . . . . . . . . . . . 146
Imp|ementao Xcopy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Pacotes Wndows Insta||er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Lsco|hendo a Abordagem de Imp|ementao Uorreta . . . . . . . . . . . . . . 149
Imp|ementando Atua|zaes 5mart U|ent. . . . . . . . . . . . . . . . . . . . . . . . 11
Atua|zaes da Imp|ementao No-touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Atua|zaes Automtcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Atua|zao de um Arquvo Uompart|hado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Atua|zaes Xcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Atua|zaes Wndows Insta||er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Lsco|hendo a Abordagem de Atua|zao Uorreta . . . . . . . . . . . . . . . . . . 14
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
0retrzes para Uo|ocao de 0ados em Uach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
0retrzes para Uomuncao de Pede. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
0retrzes de 1hreadng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
0retrzes de 1ransaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
0tmzao do 1empo de 5tartup da Ap|cao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Manpu|ao de Pecursos 0sponves. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
0tmzao de Performance do Wndows Iorms . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
A[uste de 0b[etvos de Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Processo de A[uste de Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Ierramentas de Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Catule 8
besemenhe da allcae 5mart Cllent . . . . . . . . . . . . . . . . . . . . . . . . . 17
Arqutetura pe|a Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
A[uste e 0agnostco de Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5umro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Peferncas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Uo|aboradores e Pevsores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Indce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Pecursos Adconas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Prelac|e
0 Microsot.NLJ Framework e o windows Forms so grandes plataormas para a construo de
aplicaes 3mart Client que combinam todo o poder, a leibilidade e a grande eperincia de usurio
do modelo de aplicao Rich Client (Clientes Ricos) com a acilidade de implementao e estabilidade
de aplicaes com base em navegadores. 0 .NLJ Framework resolve conlitos de verso DLL e
simpliica a implementao. 0 windows Forms tem uma poderosa biblioteca de componentes de
interace com o usurio e um desenvolvedor de ormulrios cil de usar que combina a simplicidade de
utilizao do modelo de programao Microsot visual Basic 6.0 com o poder e a leibilidade do
.NLJ Framework.
Lntretanto, apesar da acilidade que o windows Form oerece para a construo de sua interace com
o usurio, ainda eistem inmeros desaios de projeto que voc precisar resolver durante o
desenvolvimento de sua aplicao 3mart Client. ual modelo de implementao o correto para sua
aplicao? Como permitir o processamento oline? L a segurana de dados? Como manter a aplicao
com boa resposta ao usurio quando conectado com banda estreita? 0 que preciso para se construir
uma aplicao que v de encontro s epectativas de desempenho do usurio? L a lista continua. 3em
um entendimento claro de quais desaios so esses e o que preciso azer para endere-los
prontamente em seu ciclo de desenvolvimento, tentar a retro compatibilidade de solues tardias pode
tornar-se caro e complicado. 0 C0|a oe ^rq0|tet0ra e Prc|etc oe Smart C||ents o ajudar a descobrir os
desaios de projeto e o guiar em direo s solues corretas para o seu projeto. Lste precisamente
o tipo de inormao que os consumidores tm pedido e estou muito ansioso para ver este guia
publicado.
Divirta-se construindo aplicaes clientes novamente!
Mark 8ee|ter
0eer4eaa4er 1eca|ce 4e 0ereac|ameate 4e Pregrama
Mark Bou/ter e Cerente oe Prcgrama Sen|cr na eq0|e .NE! C||ent oa M|crcsc|t. E|e traoa||c0 nc
w|nocws |crms e c0tras o|o||ctecas oe c|asses re|ac|cnaoas oesoe q0e entrc0 na M|crcsc|t. ^ntes oe
0n|r-se a M|crcsc|t, Mar| traoa||c0 ccmc ccns0|tcr ara a ParcP|ace S,stems, nc Pe|nc un|oc,
a|0oanoc ccns0m|ocres a ccnstr0|rem s|stemas oe ser.|ocres oe c||entes e oe ana||se oe oaocs em
Sma||ta||. ^ntes o|ssc, Mar| assc0 m0|tcs ancs, ma|s oc q0e se erm|te aom|t|r, na |BM oc Pe|nc
un|oc, traoa||anoc em 0ma granoe .ar|eoaoe oe rc|etcs, |nc|0|noc s|stemas oe ser.|ocr oe c||entes
oe |arga esca|a, |erramenta C^SE, 0m mecan|smc oe ||0c oe traoa||c e s|stemas oe gerenc|amentc
oe eo|oc. 0s |nteresses oe Mar| |nc|0em esc0tar m0s|ca New wa.e |no0str|a| Pcs-0n| e B|0es, |er
q0a|q0er cc|sa e c0|oar oe se0s gatcs.
1
latre4ee
Bem-vindo ao 0uia de /rquitetura e Projeto de 3mart Clients. /s /plicaes 3mart Client so uma
alternativa poderosa a aplicaes Jhin Client (/plicaes web). Llas podem dar ao usurio uma rica e
receptiva interace com o usurio, a possibilidade de trabalhar oline e uma orma de aproveitar melhor
os recursos locais de hardware e sotware. /lm disso, podem ser projetadas para eecutar em um
largo espectro de dispositivos de cliente, incluindo PCs Desktop, Jablets e pequenos dispositivos mveis
como Pocket PCs e 3martphones.
0s 3mart Clients oerecem aos usurios acesso a inormaes e servios remotos dentro de um
ambiente de cliente poderoso e intuitivo, e so uma soluo eetiva para aplicaes leiveis
direcionadas ao usurio e para o aumento de sua produtividade e satisao.
/plicaes 3mart Client podem ser projetadas para combinar os beneicios tradicionais de uma
aplicao Rich Client com os beneicios de gerenciamento de uma aplicao Jhin Client. Lntretanto,
para compreender totalmente os beneicios de uma aplicao 3mart Client, necessrio considerar um
grande nmero de questes de arquitetura e projeto. Lste guia demonstra os desaios de arquitetura e
design encontrados ao projetar e implementar uma aplicao 3mart Client. e mostrar como superar
esses desaios, permitindo que sejam percebidos os beneicios de uma aplicao 3mart Client no
menor espao de tempo possivel.
0bservao: Reoursos tonioos adioionais para 3mart Client esto disponiveis no 3mart Client Ueveloper Center
em: hrrp.mson.m|orosofr.oomsmarro||enr. 0 valor de negooios do 3mart Client disoutido no site .NL1 da
Miorosoft em hrrp.www.m|orosofr.oomnersmarro||enroefau|r.mspx.
0 qee e em Smart 0||eat?
Para compreender totalmente como o 3mart Client combina os beneicios de Rich Client e Jhin Client,
necessrio eaminar a histria e principios subjacentes por trs dos modelos de aplicaes Rich e
Jhin Client e revisar algumas vantagens e desvantagens associadas a cada um deles.
Ap||caes k|ch 0||eat
Lm meados dos anos 90, o nmero de aplicaes Rich Client desenvolvidos para o sistema
operacional Microsot windows aumentou drasticamente. Lsses clientes eram criados para tirar
vantagem dos recursos locais de hardware e dos recursos da plataorma de sistema operacional do
cliente.
/pesar da uncionalidade impressionante de muitas dessas aplicaes, elas tm suas limitaes.
Muitas so independentes e operam no computador cliente com pouco ou nenhum conhecimento do
ambiente no qual operam. Lsse ambiente inclui os demais computadores e qualquer servio na rede,
bem como qualquer outra aplicao no computador do usurio. Freqentemente, a integrao entre
aplicaes limitada ao uso dos recursos de recortar ou copiar e colar oerecidas pelo windows para
transerir pequenas quantidades de dados entre as aplicaes. H tecnologias para o aumento de
conectividade de aplicaes Rich Client. Por eemplo, aplicaes de duas camadas permitem que
diversos usurios acessem dados comuns da rede, e o DC0M permite s aplicaes tornarem-se mais
distribuidas (com o DC0M, a lgica e o estado no esto mais atreladas ao computador cliente, e sim
encapsuladas dentro de objetos distribuidos por diversos computadores).
Lntretanto, aplicaes conectadas so consideravelmente mais compleas de se desenvolver.
Conorme cresce o tamanho e a compleidade dessas aplicaes distribuidas, qualquer coneo entre
aplicaes cliente e de servios utilizados torna-se gradativamente mais diicil de manter. Lnquanto
Rich Clients ornece geralmente uma eperincia de usurio de alta qualidade e com boa resposta e
possui bom suporte a desenvolvedores e plataormas; eles tambm so diiceis de implementar e
manter. Conorme a compleidade das aplicaes e plataormas de clientes aumenta, tambm
aumenta as diiculdades associadas implementao da aplicao no computador cliente de maneira
segura e conivel. Uma aplicao pode acilmente travar outra se um componente ou biblioteca
compartilhada incompativel comum or implementada, enmeno conhecido como ragilidade de
aplicao. Novas verses da aplicao so geralmente disponibilizadas atravs da nova implementao
de toda a aplicao, o que pode aumentar um problema de ragilidade da aplicao.
Ap||caes 1h|a 0||eat
/ internet oerece uma alternativa ao modelo tradicional de Rich Client que resolve muitos dos
problemas associados implementao e manuteno da aplicao. /plicaes Jhin Client baseadas
em navegador so aplicadas e atualizadas em um servidor da web central; portanto, eles ecluem a
necessidade de implementar e gerenciar eplicitamente qualquer parte da aplicao no computador
cliente.
Lste modelo permite que as empresas veriiquem eicientemente a eposio de suas aplicaes a
uma audincia eterna grande e variada. Como os Jhin Clients provaram ser eicientes na soluo de
alguns dos problemas de aplicao e gerenciamento, so utilizados atualmente para ornecer acesso a
muitas aplicaes de linha de negcios (L0B Line o Business) e para usurios dentro de uma
organizao, assim como acesso a aplicaes eternas, para consumidores e parceiros. Judo isso,
apesar do ato de que as necessidades e epectativas desses dois tipos de usurios so, em geral,
radicalmente distintas.
/plicaes Jhin Client tm algumas desvantagens. 0 navegador deve ter coneo de rede o tempo
todo. lsso signiica que usurios mveis no tm acesso a aplicaes caso estejam desconectados,
tendo que inserir dados novamente ao retornar ao escritrio. 0utro ato que recursos comuns da
aplicao como "arrastar e soltar" (drag-and-drop) podem no estar disponiveis, o que pode reduzir o
aproveitamento da aplicao.
Devido vasta maioria de lgica de aplicao no servidor, Jhin Clients azem solicitaes reqentes ao
servidor para solicitao de dados e processamento. 0 navegador deve esperar por uma resposta antes
que o usurio possa continuar a utilizar a aplicao; portanto, a aplicao geralmente ter uma
resposta pior do que uma aplicao Rich Client equivalente. Lsse problema mais evidente em
condies de banda estreita ou alta latncia, e os problemas de desempenho resultantes podem levar
a uma reduo signiicativa no aproveitamento da aplicao e eicincia do usurio. Uma aplicao L0B
que necessite de entrada carregada de dados e/ou reqente navegao por muitas janelas pode ser
particularmente aetada por esse problema.
2 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Ap||caes Smart 0||eat
/s aplicaes 3mart Client podem ser criadas para combinar os beneicios de aplicaes Rich Client
com os pontos ortes da implementao e gerenciabilidade de uma aplicao Jhin Client, embora a
natureza precisa do equilibrio entre as duas abordagens dependa do cenrio correto.
/plicaes 3mart Client reqentemente tm requerimentos distintos e portanto, variam bastante em
projeto e implementao. Lntretanto, todos os 3mart Clients compartilham algumas (ou todas) as
caracteristicas abaio:
Utilizam recursos locais;
Muitas aplicaes no necessitam de todas essas caracteristicas. Conorme seu 3mart Client seja
projetado, ser preciso considerar cuidadosamente o cenrio de sua aplicao e decidir quais dessas
caracteristicas sua aplicao 3mart Client necessita. lncorporar todas essas caracteristicas em sua
aplicao demandar um planejamento e projeto cuidadoso e, em muitos casos, sero necessrios
recursos de implementao signiicativos.
0bservao: 0 .NL1 lramework ajuda voo a implementar muitas das oaraoteristioas de uma aplioao 3mart
Client. Montagens ooesas, junto oom a sustentao de instalaes isoladas, lado a lado e de verses multiplas de
uma aplioao, ajudam a reduzir os problemas de distribuio e de fragilidade da aplioao assooiados aos Rioh
Clients. A biblioteoa de base do .NL1 lramework forneoe a sustentao extensiva para a interao oom os web
3ervioes, e forneoe windows lorm. usando o tempo de exeouo da lingua oomum (CLR Common Language
Runtime), voo pode utilizar qualquer linguagem suportada pelo .NL1 para desenvolver suas aplioaes 3mart
Client.
0t|||zaa4e kecerses leca|s
Uma aplicao 3mart Client bem projetada tira mima vantagem do ato de que cdigos e dados so
implementados no cliente e eecutados e acessados localmente. Lla ornece uma aplicao com uma
interace de usurio rica e responsiva, e uma poderosa capacidade de processamento no cliente. Pode,
por eemplo, possibilitar que o usurio eecute manipulaes compleas de dados, visualizao, busca
ou operaes de organizao.
0s 3mart Clients podem tirar vantagem dos recursos de hardware do cliente (como teleones ou
leitores de cdigo de barras) e de outros sotwares e aplicaes. lsso os torna aptos a resolver
problemas que uma aplicao Jhin Client no conseguiria resolver to bem, como aplicaes de pontos
de venda. 0s 3mart Clients tambm podem se beneiciar dos sotwares locais, como os aplicativos do
Microsot 0ice, ou qualquer aplicao L0B instalada no computador cliente. Criar solues que
integram e coordenam mltiplas aplicaes L0B permite aos usurios trabalhar com maior eicincia,
tomar melhores decises e reduzir erros de entrada de dados. Lssas solues tambm podem permitir
que sua aplicao se integre melhor ao ambiente de trabalho do usurio por eemplo, por meio de
uma interace padro ou amiliar o que pode levar a uma diminuio nos custos de treinamento.
0utras aplicaes clientes podem ser integradas ou coordenadas por um 3mart Client para ornecer
solues gerais coerentes e eicientes. Lssas aplicaes tambm deveriam conhecer o conteto na
qual esto sendo empregadas e adaptar-se a esse conteto para ajudar o usurio sempre que possivel,
por eemplo, armazenando preemptivamente dados teis em cach, de acordo com o modelo de uso
na uno do usurio.
3 0ap|te|e 1 - latre4ee
Maimizar o uso e integrar recursos locais s aplicaes 3mart Client permite que estas aam uma
melhor e mais eiciente utilizao do hardware que j est disponivel. Freqentemente, poder de
processamento, memria e capacidades gricas avanadas acaba no sendo utilizado. Utilizar os
recursos no computador cliente tambm pode reduzir os requisitos de hardware no servidor.
0t|||zaa4e kecerses 4e ke4e
0s 3mart Clients podem consumir e utilizar dierentes servios e dados na rede. Lles so uma maneira
eiciente de recuperar dados de muitas ontes distintas e podem ser projetados para analisar ou
agregar dados, permitindo que o usurio tome decises mais eicientes e melhor inormadas. Por
eemplo, um 3mart Client poderia usar um servio de mapeamento para ornecer detalhes sobre
localizao e orientaes de endereo. /plicaes 3mart Client devem estar conectadas o mimo de
tempo possivel e utilizar os recursos e servios disponiveis na rede. Llas no devem ser aplicaes
independentes e deveriam sempre ser parte de uma soluo distribuida mais abrangente. No minimo,
uma aplicao 3mart Client deveria utilizar servios centralizados que ajudem a manter a
implementao e ornecer servios de aplicao e atualizao.
/ natureza conectada de uma aplicao 3mart Client permite que ela ornea uma valiosa
concentrao de dados, anlise e servios de transormao. Lsta concentrao pode permitir que os
usurios colaborem em tareas em tempo real durante um determinado periodo. Lm muitos casos,
uma aplicao 3mart Client pode ornecer recursos de portal ao usurio, permitindo que diversos dados
e servios sejam coordenados e integrados em uma soluo completa.
Para maiores detalhes sobre como projetar seu 3mart Client para azer uso de servios conectados,
consulte: Capitulo 3, Conectando-se.
0lerecea4e Seperte aes 0sear|es 0cas|eaa|meate 0eaecta4es
0s 3mart Clients podem ser projetados para ornecer uncionalidade aos usurios que estejam
ocasionalmente conectados rede, permitindo que o usurio continue a trabalhar eicientemente
quando oline, em condies de banda estreita ou rede de alta latncia, ou quando a conectividade or
intermitente. Para aplicaes mveis, 3mart Clients tambm podem otimizar a largura de banda, por
eemplo, enviando blocos de solicitaes ao servidor para azer um melhor uso da cara conectividade.
Mesmo quando o cliente est conectado rede durante a maior parte do tempo, as aplicaes 3mart
Client podem melhorar a desempenho e o aproveitamento criando cach de dados e gerenciando a
coneo de orma inteligente. Lm um ambiente de banda estreita ou alta latncia, por eemplo, uma
aplicao 3mart Client pode gerenciar a coneo de tal orma que o aproveitamento e a responsividade
da aplicao no so prejudicados e o usurio pode continuar a trabalhar eicazmente.
/ possibilidade de se trabalhar desconectado ou ocasionalmente conectado aumenta a produtividade e
a satisao do usurio. Uma aplicao 3mart Client deveria buscar ornecer o mimo de
uncionalidade possivel quando utilizada oline.
Para obter detalhes adicionais sobre como projetar sua aplicao 3mart Client para oerecer suporte a
usurios conectados ocasionalmente, consulte: Capitulo 4, 3mart Clients Conectados
0casionalmente.
feraecea4e lasta|ae e Atea||zae late||geates
/lguns dos maiores problemas com os Rich Clients tradicionais ocorrem quando a aplicao
implementada ou atualizada. Muitas aplicaes Rich Client tm um grande nmero de compleos
requerimentos de instalao e pode compartilhar cdigos registrando componentes e/ou instalando
DLLs em um local comum, resultando em ragilidade da aplicao e diiculdades de atualizao.
4 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
/plicaes 3mart Client podem ser projetadas para gerenciar sua prpria implementao e atualizao
de maneira muito mais leivel e inteligente que aplicaes Rich Client tradicionais. Llas podem evitar
esses problemas comuns, o que pode ajudar a reduzir os custos de gerenciamento de sua aplicao.
H muitas maneiras de se implementar 3mart Clients. lsso inclui a simples cpia de arquivos em um
computador local, o download automtico de cdigos a partir de um servidor central utilizando uma
implementao no-touch ou implementando-se o pacote de instalao do windows utilizando
tecnologia de ponta para empresas, como o Microsot 3ystems Management 3erver (3M3). 0 mtodo
escolhido depender de sua situao especiica.
/plicaes 3mart Client podem atualizar-se automaticamente, seja durante sua eecuo ou em
segundo plano. Lsse recurso permite que elas sejam atualizadas em uma base de uno por uno;
atualizado de orma encenado, permitindo que as aplicaes sejam enviadas para grupos piloto ou um
conjunto limitado de usurios; ou atualizado de acordo com um planejamento estabelecido.
0 .NLJ Framework permite que se nomeiem os componentes da aplicao, o que signiica que ele
poder especiicar e eecutar as verses eatas dos componentes com os quais oi construido e
testado. 0 .NLJ Framework permite que aplicaes sejam isoladas para que a instalao de uma
aplicao no prejudique a de outra, e para que dierentes verses da mesma aplicao possam ser
implementadas lado a lado. Lsses recursos simpliicam bastante a implementao da aplicao e
removem muitos dos problemas de ragilidade da aplicao associados s aplicaes Rich Client.
Para obter mais inormaes sobre instalao inteligente e atualizaes, consulte Capitulo 7,
lmplementao.
feraecea4e f|ex|h|||4a4e para 0|spes|t|res 4e 0||eate
0s 3mart Clients podem oerecer um ambiente de cliente leivel e personalizvel, permitindo que o
usurio conigure a aplicao para oerecer suporte a seu modo de trabalho preerido. /plicaes
3mart Client no se restringem a desktops ou laptops. Com o aumento da capacidade de
conectividade dos dispositivos de menor escala, a necessidade de aplicaes cliente teis e que
orneam acesso a dados e servios essenciais em dispositivos diversos tambm aumenta. /o lado do
.NLJ Compact Framework, o .NLJ Framework oerece uma plataorma comum onde aplicaes 3mart
Client podem ser criadas.
3mart Clients podem ser projetados para adaptar-se ao ambiente do host local, oerecendo
uncionalidade apropriada ao dispositivo no qual so eecutados. Por eemplo, uma aplicao 3mart
Client projetada para ser eecutada em um Pocket PC deveria ornecer uma interace de cliente
adequada para utilizar uma caneta 3tylus em uma pequena rea da tela.
Lm muitos casos, ser preciso projetar diversas verses de uma aplicao 3mart Client, cada uma
visando um tipo especiico de dispositivo para tirar vantagem mima dos recursos particulares para os
quais cada dispositivo possui suporte. Como os dispositivos de menor escala so tipicamente limitados
em sua habilidade de entregar um grande nmero de recursos das aplicaes 3mart Client, eles
podem ornecer acesso mvel a apenas um subconjunto de dados e servios que somente uma
aplicao 3mart Client oerece ou ser utilizados para coletar e agregar dados quando o usurio estiver
mvel. Lsses dados podem ser analisados ou processados por uma aplicao 3mart Client com mais
recursos ou por uma aplicao de servidor.
Uma percepo no ambiente dos recursos e utilizao de um determinado dispositivo de destino, seja
um desktop, laptop, tablet ou dispositivo mvel, e a habilidade de projetar a aplicao de modo a
ornecer uncionalidade apropriada so recursos essenciais de muitas aplicaes 3mart Client.
0bservao: Lste guia no abrange detalhes espeoifioos de design e arquitetura para o desenvolvimento de
aplioaes 3mart Client para exeouo em dispositivos moveis, porm, muitos dos topioos abordados so
igualmente relevantes, mesmo que a aplioao seja exeoutada em um desktop ou em outro dispositivo.
5 0ap|te|e 1 - latre4ee
1|pes 4e Smart 0||eats
3mart Clients variam imensamente em design e implementao, tanto em requerimentos de aplicao
quanto em nmero de cenrios e ambientes nos quais podem ser usados. 3mart Clients podem,
portanto, adotar dierentes ormas e estilos. Lssas ormas podem ser divididas em trs categorias mais
amplas, de acordo com a plataorma de destino da aplicao 3mart Client:
/plicaes 3mart Client do windows;
L comum para uma aplicao 3mart Client ter como destino uma ou mais dessas plataormas,
dependendo da uno do usurio e a uncionalidade necessria. Lssa leibilidade um dos pontos
ortes das aplicaes 3mart Client.
0 restante deste guia se concentra em assuntos comuns a todos os trs tipos de aplicaes 3mart
Client, em vez de oerecer eplicaes detalhadas de problemas que aetam cada categoria
individualmente. Lntretanto, til eaminar brevemente cada tipo para que seja possivel determinar
qual estilo de aplicao ser melhor para a sua situao.
Ap||caes Smart 0||eat 4e w|a4ews
uando voc pensa em uma aplicao Rich Client, deve geralmente pensar em uma aplicao de
desktop que utiliza os recursos de sistema disponiveis e que oerece uma interace de usurio rica.
/plicaes 3mart Client para windows representam uma evoluo das aplicaes Rich Client
tradicionais e ornecem uncionalidades especiicas.
Lsses tipos de aplicaes geralmente utilizam o windows Forms para oerecer uma interace de usurio
amiliar no estilo windows, na qual a prpria aplicao ornece grande parte da uncionalidade e no
depende de outra para oerecer a interace de usurio principal. Lsses 3mart Clients podem ir desde
aplicaes simples implementados em HJJP at aplicaes muito soisticadas.
Uma aplicao 3mart Client do windows adequada em situaes no qual a aplicao necessita ser
implementada e acessada como uma aplicao amiliar do tipo desktop. Lsses tipos ornecem,
geralmente, a maioria de suas uncionalidades sozinhas e podem integrar ou coordenar outras
aplicaes quando apropriado. Llas proporcionam uncionalidade de aplicao em sintonia com tareas
particulares para oerecer processamento especiico ou de alto desempenho ou capacidades gricas.
/plicaes 3mart Client do windows so, em geral, mais adequadas para aplicaes eecutadas em
Desktops, laptops ou tablet PCs. /lm disso, elas oerecem uncionalidades que no esto associadas
com um documento ou tipo de documento em particular.
Lsses tipos de aplicaes 3mart Client do windows podem ser utilizadas em uma grande variedade de
situaes, por eemplo, como uma aplicao L0B, inanceira, cientiica ou colaborativa. Lemplos
desses tipos de aplicao so o Microsot Money e o Microsot 0utlook Messaging and Collaboration
Client.
Ap||caes Smart 0||eat 4e 0ll|ce
0 Microsot 0ice 3ystem 2003 oerece uma plataorma eicaz para construo de aplicaes 3mart
Client, especialmente em ambiente corporativo. Com uma soluo de 3mart Client do 0ice, possivel
integrar origens de dados, acessadas por meio de servios da web, com os recursos do word 2003,
Lcel 2003, lnoPath 2003 ou qualquer um das aplicaes do 0ice para desenvolver solues de
3mart Clients.
0 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Lssas aplicaes 3mart Client do 0ice podem tornar-se parte integrada de um ciclo de gerenciamento
de inormaes de uma organizao e no somente um local esttico para dados de documentos. Llas
podem ornecer dados sensiveis a conteto conorme o usurio trabalhe em um documento, bem como
luo de trabalho e direcionamento de tareas, anlise de dados, colaborao, relatrio e recursos de
apresentao que transormam dados eibidos pelos web 3ervices em inormaes teis.
0 Microsot 0ice suporta XML e separa os dados de outros aspectos de um documento para que eles
possam ser reutilizados por outras aplicaes. Como os dados da aplicao no Microsot 0ice podem
ser descritos pelo mesmo esquema XML deinido pelo cliente atravs de aplicaes mltiplas, os
desenvolvedores podem integrar esses dados a aplicaes 3mart Client.
0 Microsot 0ice 2003 tem muitos recursos chave e opes para a construo de solues 3mart
Client, incluindo:
5mart tags. 3mart tags do aplicao uma maneira de ornecer o usurio com dados sensiveis a
interaja com web 3ervices e documentos de negcios. 0s 3mart documents so um novo tipo de
modelo de soluo para word 2003 e Lcel 2003, tm uma estrutura XML subjacente e um painel
de tareas que pode ser utilizado para eibir inormaes de conteto, tareas, erramentas, primos
passos e outras inormaes relevantes para o usurio. 0 usurio poder iniciar outras tareas e
aes interagindo com o painel de tareas, permitindo que solues de negcio abrangentes sejam
construidas.
Ierramentas do Mcrosoft vsua| 5tudo para o Mcrosoft 0ffce 5ystem. Lsse conjunto de
erramentas permite que os desenvolvedores criem aplicaes 3mart Client do 0ice de cdigo
gerenciado utilizando o sistema de desenvolvimento Microsot visual 3tudio .NLJ 2003. 0s
desenvolvedores podem separar solues de documento a partir dos cdigos subjacentes (uma
alternativa a modelos anteriores de 3mart Client que continham macros em visual Basic or
/pplications com lgica personalizada). Utilizar cdigos gerenciados, o Microsot 0ice ornece aos
desenvolvedores opes mais eetivas para criar, implementar e gerenciar atualizaes para
solues 3mart Client.
Mcrosoft 0ffce InfoPath" 2003. 0 lnoPath 2003 uma aplicao que pode reunir dados
estruturados do usurio utilizando uma interace de ormulrio. Lle suporta web 3ervices XML, uma
interace de usurio com base em ormulrios e oerece suporte para tecnologias padro como
w3DL e UDDl. 0 lnoPath 2003 tambm suporta uso oline limitado, permitindo que o usurio
interaja com o ormulrio quando est oline para depois permitir que ele envie o ormulrio a um
servio da web quando estiver on-line.
Lste guia no pretende abordar qualquer um dos assuntos especiicos sobre 3mart Clients do 0ice,
mas a maioria dos tpicos cobertos completamente relevante s aplicaes 3mart Client discutidas
acima.
T 0ap|te|e 1 - latre4ee
Ap||caes Mere|s Smart 0||eat
0s 3mart Clients mveis so aplicaes que so eecutadas em dispositivos inteligentes, Pocket PCs,
3martphones e outros pequenos dispositivos. Lssas aplicaes so desenvolvidas utilizando o .NLJ
Compact Framework, que um subconjunto do .NLJ Framework completo. 0 .NLJ Compact Framework
contm muitos dos atributos do .NLJ Framework completo, suporta XML e utiliza servios da web. L
otimizado para uso em pequenos dispositivos e inclui o windows Forms Designer para desenvolvimento
da interace de usurio.
Utilizando o visual 3tudio .NLJ 3mart Device Projects, pode-se desenvolver 3mart Clients que sero
eecutados no .NLJ Compact Framework. Lssa abordagem permite desenvolver, testar e depurar uma
aplicao utilizando o visual 3tudio .NLJ em um emulador de pequenos dispositivos. 0 uso de um
emulador aumenta signiicativamente a velocidade de desenvolvimento e testes desses tipos de
aplicaes.
/plicaes 3mart Client mveis so utilizadas geralmente para oerecer acesso mvel a dados e
servidores essenciais ou para coletar e agregar dados quando o usurio est em movimento. Lemplos
desses tipos de aplicaes so: aplicaes que coletam e agregam dados inanceiros e de seguro,
aplicaes de gerenciamento de estoque e aplicaes de gerenciamento de produtividade pessoal.
Lste guia no se concentra em aplicaes 3mart Cliente mveis, embora muitos dos assuntos de
arquitetura e solues discutidas sejam relevantes para dispositivos inteligentes.
sce|hea4e eatre Smart 0||eats e 1h|a 0||eats
Para a escolha da arquitetura de aplicao correta para sua situao, deve se considerado diversos
atores. Para determinar se uma abordagem 3mart Client a mais apropriada para sua aplicao,
considere cuidadosamente as necessidades atuais e uturas de sua aplicao de negcios. 3e sua
aplicao or baseada em uma arquitetura inadequada, poder no atender aos requisitos e
epectativas dos usurios e do negcio como um todo. Mudar a arquitetura posteriormente para
satisazer novos requisitos ou tirar vantagens de novas oportunidades pode ser etremamente caro.
Uma arquitetura Jhin Client , reqentemente, a mais apropriada se voc precisa tornar uma aplicao
eterna disponivel para um grupo eterno diverso, enquanto uma arquitetura 3mart Client geralmente
a mais apropriada para uma aplicao interna que necessita integrar-se com ou coordenar outras
aplicaes ou hardware do cliente, ou que seja requerido que trabalhe oline ou ornea uncionalidade
de alto desempenho especiico por meio de uma interace de usurio com boa resposta.
Na realidade, essas duas abordagens se sobrepem em grande parte e cada uma tem suas vantagens
e desvantagens. voc s conseguir escolher a abordagem correta depois de considerar
cuidadosamente suas necessidades e entender como cada abordagem se aplica sua situao. Use a
Jabela 1.1 como auilio para escolher entre a arquitetura 3mart Client e a Jhin Client.
Feature 1hin client Smart client
3im
1abela 1.1: Reoursos de 1hin Clients e 3mart Clients
lorneoe uma rioa interfaoe
de usuario
3im, mas difioil de desenvolver,
testar e depurar. 0eralmente
atrela a aplioao a um unioo
navegador
3im. Mais faoil de desenvolver,
testar e depurar
Pode tirar vantagem dos
reoursos de hardware no
oomputador looal
(ccnt|n0ai
3im, mas somente atravs
de oomponentes C0M
8 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0esal|es 4a Arqe|tetera Smart 0||eat
0s desaios da arquitetura de um 3mart Client dierem dos desaios de um Jhin Client, e voc precisar
se preparar para eles durante o projeto da aplicao. 0s beneicios de aplicaes 3mart Client so
signiicativos, mas voc os entender somente se cuidar desses desaios da maneira correta.
3mart Clients permitem que dados e lgica sejam distribuidos para o computador cliente, enquanto
Jhin Clients mantm dados e lgica centralizados no servidor web e em outros servios back-end.
Lmbora a abordagem 3mart Client permita que voc torne a aplicao mais eiciente, sem voltas ao
servidor para determinar os passos seguintes, deve-se levar em conta que a aplicao e seus dados
esto mais amplamente distribuidos do que em aplicaes Jhin Client e modiicar seu projeto de
acordo. 3e estiver implementando regras de negcios no cliente, ser necessrio atualiz-las conorme
solicitado, sem atualizar toda a aplicao. lsso signiica ter que utilizar mecanismos dierenciadores
para atualizar a aplicao e atualizar as regras de negcios dentro da aplicao.
Colocar dados em cach no cliente, ar com que o desempenho e o aproveitamento melhorem
signiicativamente, mas voc deve assegurar que os dados sejam atualizados adequadamente e os que
estejam desatualizados no sejam utilizados. Como muitos usurios podem acessar e utilizar os
mesmo dados, voc tambm deve considerar os eeitos de dados simultneos. 3ua aplicao deve
estar capacitada para lidar com conlito de dados ou problemas de reconciliaes que eventualmente
possam surgir, j que a aplicao agora amplamente distribuida e pode operar oline. 0 Capitulo 3,
Manipulando Dados, trata desse assunto mais proundamente.
0 .NLJ Framework oerece uma grande leibilidade na maneira como suas aplicaes 3mart Client
sero hospedadas. /s aplicaes podem ser eecutadas como aplicaes desktop tradicionais ou
podem ser hospedadas dentro do 0ice ou do Microsot lnternet Lplorer. Muitas combinaes so
possiveis. Por eemplo, uma aplicao windows Forms pode hospedar componentes do lnternet
Lplorer ou do 0ice, e qualquer host pode incluir qualquer outra aplicao. voc pode seguimentar
partes lgicas volteis da aplicao (como regras de negcio controlando descontos para pedidos de
grande volume) em montagens que so transeridas quando necessrio atravs do HJJP.
lsso torna bvia a necessidade de implementar novas verses da aplicao cliente conorme novas
lgicas de aplicao so desenvolvidas. Pode utilizar o mesmo modelo para atributos de aplicao
adicionais (ou raramente utilizados), para que o tamanho inicial da aplicao seja mantido ao minimo e
recursos adicionais sejam instalados de acordo com a necessidade.
3im. Pode ser implementado em
qualquer plataforma que suporte
.NL1 lramework (inoluindo o
.NL1 Compaot lramework).
3im
3im
3im
3im
Pode interagir oom outras
aplioaes looais
No
Pode ser multi-threaded
lunoiona offline
No
No
No 1em bom desempenho em
ambientes de banda estreita e
de alta latnoia
3im laoil de implementar variaes. Uifiouldade depende
dos requisitos da aplioao
Baixos oustos de manuteno
e mudana de gerenoiamento
3im variaes. Custos dependem
das 3olioitaes da aplioao
Pode ser implementado para
uma larga variedade de olientes
oom varias habilidades
3im, apesar de mais oomplexos
1hin Clients podem neoessitar
um navegar unioo.
Feature 1hin client Smart client
0 0ap|te|e 1 - latre4ee
Pode-se decidir implementar seu 3mart client como uma aplicao combinada, em que muitas
aplicaes se combinam para ormar uma soluo coerente. Jais solues podem ser ormadas
agrupando-se aplicaes de desktop ou ornecendo uma aplicao de ormato genrico que inclua
mltiplas aplicaes leves que juntas ormam uma soluo.
/s aplicaes combinadas so especialmente teis em situaes nas quais os usurios tm que
acessar muitas aplicaes para realizar seu trabalho. Por eemplo, agentes de atendimento ao
consumidor em call centers geralmente trabalham com muitas aplicaes L0B, incluindo desktop,
baseado em navegador e aplicaes com base no terminal. Jodas essas aplicaes podem ser
hospedadas dentro de uma aplicao genrica do windows Forms, que oerece integrao entre eles,
simpliicando enormemente o trabalho do usurio e, mais importante, reduzindo o tempo gasto em
uma chamada em particular. /o oerecer um ormato genrico para hospedar essas aplicaes L0B,
recursos comuns de inra-estrutura, como segurana, aplicao, gerenciamento de janelas, integrao
de aplicaes, auditoria e assim sucessivamente, podem ser desenvolvidas, testadas e reutilizadas em
distintas solues, permitindo que os desenvolvedores de aplicaes L0B concentrem-se na
uncionalidade do negcio.
0 advento de arquiteturas orientadas a servios signiica que voc pode projetar 3mart Clients para
utilizar servios de rede. Jodos esses servios so ornecidos em padres da indstria, o que melhora a
interoperabilidade, suporte erramenta de programao e a acilidade com que novos atributos
podem ser desenvolvidos em uma aplicao 3mart Client.
scepe 4este 0e|a
Lste guia concentra nos assuntos de arquitetura e projeto das aplicaes 3mart Client construidos com
as tecnologias Microsot .NLJ. Lle supe que se esteja construindo as aplicaes 3mart Client
utilizando o Microsot .NLJ Framework e utilizando o Microsot .NLJ windows Forms para construo de
qualquer interace de usurio.
Lste guia no trata proundamente de assuntos relacionados implementao. 0s detalhes sobre a
implementao de uma aplicao 3mart Client no Microsot 0ice 2003 ou em um dispositivo mvel,
embora muitos dos assuntos abordados neste guia sejam relevantes aplicaes 3mart Client.
3ejam elas windows Forms independentes, 0ice, ou de dispositivos mveis.
0eme et|||zar este 0e|a
Lste guia oi desenvolvido para ser utilizado de duas ormas. Primeiramente, o guia estruturado para
oerecer uma viso geral razoavelmente abrangente dos assuntos de arquitetura e design com os quais
voc poder deparar-se durante a construo de uma aplicao 3mart Client. / leitura deste guia do
comeo ao im dar um entendimento completo dos problemas com os quais voc poder deparar-se e
como super-los.
Como alternativa, caso preira eplorar proundamente os assuntos acerca de um tpico especiico,
pode-se ler os capitulos individualmente e analisar independentemente os temas relevantes.
qeem 0ere ler ste 0e|a
Lste guia destina-se a arquitetos de sotware e desenvolvedores que estejam construindo aplicaes
3mart Client em tecnologias Microsot .NLJ.
Pre-reqe|s|tes
Para se beneiciar completamente deste guia, voc j deve possuir uma compreenso das seguintes
tecnologias e conceitos:
10 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Microsot .NLJ Framework
Multithreading
0bservao: Para mais informaes a respeito de Arquitetura e Projeto de Aplioaes Uistribuidas, oonsulte
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usvsenr7
hrm|vxor|les|gn0ons|oerar|onslorl|srr|bureo4pp||oar|ons.asp e
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usvsenr7
hrm|vxor|p|ann|ngo|srr|bureoapp||oar|ons.asp.
keseme 4e 0ap|te|es
Lste guia composto pelos capitulos abaio; cada um dos quais abordando um tema especiico
relevante para 3mart Clients. Cada capitulo oi escrito para ser lido completo ou em partes, de acordo
com sua necessidade.
0ap|te|e 1: latre4ee
Lste capitulo oerece uma descrio de alto nivel sobre as aplicaes 3mart Client e descreve algumas
de suas propriedades bsicas e beneicios. Lle tambm discute alguns dos problemas de arquitetura de
alto nivel e oerece uma orientao para ajud-lo a determinar se uma arquitetura 3mart Client ideal
para sua aplicao.
0ap|te|e 2: Maa|pe|ae 4e 0a4es
Lm 3mart Clients, os dados da aplicao esto disponiveis no cliente. Lsses dados precisam ser
gerenciados corretamente para assegurar que eles permaneam vlidos, consistentes e seguros. 3e os
dados orem ornecidos por uma aplicao de servidor, a aplicao 3mart Client pode colocar em cach
os dados para melhorar o desempenho ou permitir o uso quando oline. 3e sua aplicao 3mart Client
oerecer a possibilidade de modiicar dados localmente, as mudanas no cliente tm que ser
sincronizadas com a aplicao do servidor posteriormente. Lste capitulo eamina as diversas
consideraes para a manipulao de dados no cliente, incluindo chave de dados, simultaneidade de
dados e o uso de datasets e vinculo de dados no windows Forms.
0ap|te|e 3: 0eaectaa4e-se
/plicaes 3mart Client geralmente ormam parte de uma aplicao distribuida maior, portanto,
reqentemente esto conectados a uma rede e interagem com recursos desta, como 3ervios da
web, juntamente com componentes ou processos no prprio computador cliente. Lste capitulo
descreve as vrias ormas de conectar sua aplicao e utilizar esses recursos, alm de discutir os
pontos ortes e racos de cada uma dessas ormas.
0ap|te|e 4: Smart 0||eats 0eaecta4es 0cas|eaa|meate
Lste capitulo traz uma discusso sobre os problemas enrentados durante o projeto e a construo de
aplicaes 3mart Client conectadas ocasionalmente rede. /borda o conceito de conectividade,
descreve as duas abordagens principais para implementao de recursos 0line e discute algumas dos
pontos que so necessrios considerar para tornar sua aplicao disponivel oline.
11 0ap|te|e 1 - latre4ee
0ap|te|e 5: 0eas|4eraes 4e Segeraaa
Lste Capitulo abrange temas de segurana de 3mart Client. 0s 3mart Clients distribuem dados e lgica
para o computador cliente, portanto, as preocupaes com segurana so dierentes das associadas a
uma aplicao Jhin Client, na qual os dados e lgica icam mais coninados no servidor. Lste capitulo
discute segurana de dados, autenticao, autorizao e a uno da segurana de acesso do cdigo
em uma aplicao 3mart Client.
0ap|te|e 0: 0t|||zaa4e 1hrea4s Me|t|p|es
Lste capitulo discute os assuntos que envolvem o uso de threads mltiplos em aplicaes 3mart Client.
Para maimizar a responsividade de suas aplicaes 3mart Client, necessrio considerar
cuidadosamente como e quando utilizar threads mltiplos. Jhreads podem melhorar signiicativamente
o aproveitamento e desempenho de sua aplicao, porm requerem cuidadosa anlise para determinar
como iro interagir com a interace de usurio.
0ap|te|e T: lmp|emeataa4e e Atea||zaa4e Ap||caes Smart 0||eat
3mart Clients no sorem dos tradicionais problemas de implementao e atualizao associados s
aplicaes Rich Client. 0s recursos ornecidos pelo .NLJ Framework e pela plataorma windows ajudam
a evitar muitos problemas associados a aplicaes Rich Client tradicionais. Lste capitulo descreve
como melhor utilizar esses atributos e como escolher entre os mecanismos de aplicao e atualizao
disponiveis.
0ap|te|e 8: Perlermaace 4a Ap||cae Smart 0||eat
Lste capitulo eamina tcnicas podem ser utilizadas ao arquitetar e projetar sua aplicao 3mart Client
para assegurar que seu desempenho seja otimizado. Lsta seo demonstra as erramentas e tcnicas
que podem ser utilizadas para identiicar problemas de desempenho em suas aplicaes 3mart Client.
Semar|e
Janto Jhin Clients como 3mart Clients podem ser utilizados para oerecer aplicaes L0B para sua
empresa. Lntretanto, cada tipo de cliente tem suas vantagens e desvantagens. Durante o projeto de
sua aplicao, importante considerar cuidadosamente as especiicidades de sua situao antes de
determinar qual a mais apropriada. Lste capitulo eplicou como 3mart Clients se desenvolvem, bem
como os seus recursos associados . /gora, voc pode utilizar o restante deste guia para determinar
como projetar e implementar 3mart Clients em sua empresa.
lalermaes A4|c|eaa|s
0s recursos abaio oerecem mais inormaes sobre prticas & padres, 3mart Clients e outros blocos
de aplicaes que podem ser utilizados para orientaes especiicas.
web site prticas & padres em |tt.//www.m|crcsc|t.ccm/resc0rces/ract|ce/oe|a0|t.ms
viso 0eral das aplicaes 3mart Client no Microsot 0ice 3ystem no M3DN em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/coc_|2003_ta/|tm|
/coc_|P0|||ce2003SmartC||ent.as
/rquitetura de /plicao para.NLJ: Projetando /plicaes e 3ervios em M3DN em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onooa/|tm|/o|sta.as
12 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
2
Maa|pe|ae 4e 0a4es
Lm 3mart Clients, os dados da aplicao esto disponiveis no cliente. Para seus 3mart Clients
uncionarem com eiccia, essencial que esses dados sejam gerenciados corretamente para
assegurar que permaneam vlidos, consistentes e seguros.
0s dados da aplicao podem ser disponibilizados ao cliente por meio de uma aplicao de servidor
(por eemplo, um 3ervio da web), ou a aplicao pode utilizar seus prprios dados locais. 3e os
dados orem ornecidos por uma aplicao de servidor, a aplicao 3mart Client pode armazenar em
cach os dados para melhorar o desempenho ou permitir o uso oline. Neste caso, voc precisa decidir
como a aplicao do cliente deve manipular dados antigos em relao ao servidor. 3e sua aplicao
3mart Client oerece o recurso de modiicar dados localmente e as mudanas do cliente devem ser
sincronizadas com a aplicao do servidor posteriormente. Neste caso, a deciso vai de como a
aplicao do cliente ir lidar com conlitos de dados e como registrar as mudanas que sero enviadas
ao servidor.
L preciso considerar cuidadosamente esses e muitos outros assuntos ao projetar sua aplicao 3mart
Client. Lste capitulo eamina as muitas consideraes para a manipulao de dados no cliente,
incluindo:
Jipos de dados
Cach de dados
3imultaneidade de dados
Dados temporrios.
0eralmente, esses tipos de dados necessitam ser manipulados de ormas distintas, portanto
necessrio eaminar cada uma dessas ormas detalhadamente.
0a4es 4e kelerac|a Semeate para le|tera
Dados de reerncia somente para leitura no so alterados pelo cliente e so utilizados pelo cliente
para propsitos de reerncia. Portanto, do ponto de vista do cliente, os dados so somente para
leitura e o cliente no eetua operaes de atualizao, insero ou ecluso. Dados de reerncia
somente para leitura so prontamente armazenados em cach no cliente. Dados de reerncia tm
certas utilidades em uma aplicao 3mart Client, incluindo:
0ferecer referncia esttica cu lcckup data. Lemplos incluem inormaes de produto, lista de
interace.
/o armazenar e utilizar dados de reerncia no cliente, voc pode reduzir a quantidade de dados que
necessitam ser transportados do cliente ao servidor, melhora o desempenho de sua aplicao, ajuda a
permitir mais capacidade oline e oerece validao de dados rapidamente, aumentando o
aproveitamento de sua aplicao.
Lmbora dados de reerncia somente para leitura no possam ser mudados pelo cliente, eles podem
ser alterados no servidor (por um administrador ou supervisor, por eemplo). voc precisa determinar
uma estratgia para atualizao do cliente quando as mudanas de dados ocorrerem. Lssa estratgia
pode transerir as mudanas para o cliente quando uma mudana ocorrer ou trazer as mudanas do
servidor em intervalos determinados ou antes de certas aes no cliente. Lntretanto, como os dados
so somente para leitura no cliente, voc no precisa registrar as mudanas nele. lsso simpliica o
modo como dados de reerncia somente para leitura precisam ser manipulados.
0a4es 1emperar|es
Dados temporrios podem ser modiicados tanto no cliente quanto no servidor. De modo geral, dados
temporrios mudam como resultado direto ou indireto das entradas e manipulaes do usurio. Neste
caso, mudanas eitas tanto no cliente como no servidor precisam ser sincronizadas em algum
momento. Lsse tipo de dados tem um grande nmero de utilidades em um 3mart Client, incluindo:
Inclusc de ncvas infcrmaes. Lemplos englobam a incluso de transaes bancrias ou
detalhes de consumidores.
Mcdificac de infcrmac existente. Um eemplo a atualizao de detalhes dos
consumidores.
Apagar infcrmac existente. Um eemplo a remoo de um consumidor de um banco de
dados.
14 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Um dos aspectos mais desaiadores ao lidar com dados temporrios em 3mart Clients o ato de que
ele geralmente pode ser modiicado em diversos clientes ao mesmo tempo. Lste problema
acentuado quando os dados so muito volteis, porque as mudanas tendem a entrar em conlito
umas com as outras.
L preciso registrar qualquer mudana de cliente realizada em dados temporrios. /t que os dados
sejam sincronizados com o servidor e qualquer conlito seja resolvido, no se deve considerar dados
temporrios como conirmados. Deve-se ter bastante cuidado para no contar com dados que no
tenham sido conirmados na hora de tomada de decises importantes ou utiliz-los com base para
outras mudanas locais sem considerar cuidadosamente como a consistncia de dados pode ser
garantida mesmo em caso de alha durante a sincronizao.
Para mais detalhes sobre o assunto manipulao de dados oline e como manipular a sincronizao de
dados, consulte o Capitulo 4, 3mart Clients Conectados 0casionalmente.
0e|ecaa4e 0a4es em 0ache
3mart Clients reqentemente realizam cache de dados localmente, seja de reerncia somente para
leitura ou dados temporrios. Colocar dados em cache tem o potencial melhorar o desempenho da
aplicao e ornecer os dados necessrios para trabalho oline. Lntretanto, voc necessita considerar
com cuidado que dados deve ser colocados em cache no cliente, como esses dados devem ser
controlados, e no conteto em que esses dados podem ser usados.
Para permitir que os dados sejam colocados em cache, sua aplicao 3mart Client dever implementar
alguns ormulrios de inra-estrutura de cache que possa manej-los de orma transparente. 3ua inra-
estrutura de cache deve incluir um ou mais dos seguintes mecanismos:
Shcrt-term data caching. Colocar dados em cache na memria bom para o desempenho mas
no persistente, assim que voc pode necessitar puar dados da onte quando a aplicao rodada
novamente. /gir dessa orma pode prevenir que sua aplicao opere quando oline.
Lcng-term data caching. Colocar dados em cache em um meio persistente, tal como um
armazenamento isolado ou um sistema de local de arquivos, permite que se use a aplicao quando
no h nenhuma conectividade ao usurio. voc pode escolher combinar o armazenamento a longo
prazo com o armazenamento a curto prazo para melhorar a perormance.
/pesar dos mecanismos de cache que voc adota, voc deve assegurar que somente dados a que o
usurio tem o acesso estejam disponiveis no cliente. Jambm, os dados sensiveis colocados em cache
no cliente requerem a manipulao cuidadosa para assegurar que sejam mantidos seguros.
Conseqentemente, voc pode necessitar codiicar os dados enquanto so transeridos ao cliente e
enquanto so armazenados no cliente. Para mais inormaes, ver Manipulando Dados 3ensiveis no
Capitulo 5, Consideraes de 3egurana.
Conorme voc arquiteta sua aplicao 3mart Client para suportar dados em cache, deve ser
considerado ornecer um mecanismo a seu cliente para pedir dados recentes, no obstante o estado
do cache. lsto signiica que voc pode estar certo de que a aplicao est pronta para eecutar
transaes novas sem usar dados antigos. voc tambm pode conigurar seu cliente a dados recm
trazidos que possam suavizar o risco de estar oline quando osdados em cache epirarem.
3empre que possivel, voc deve associar algum ormulrio do metadado com os dados para permitir
que o cliente os controle de maneira inteligente. Jal metadado pode ser usado para especiicar a
identidade de dados e todos os coninamentos ou comportamentos desejados associados com os
dados. 3ua inra-estrutura de cache deve consumir este metadado e us-lo para manejar
apropriadamente os dados em cache.
15 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
Jodos os dados colocados em cache no cliente devem ser ecepcionalmente identiicveis (por
eemplo, atravs de um nmero de verso ou de um time stamp), de modo que se possa identiicar
corretamente ao determinar a necessidade de ser atualizado. 3ua inra-estrutura de cache pode ento
pedir ao servidor se os dados so atualmente vlidos e tambm determinar se alguma atualizao
necessria.
0 metadado tambm pode ser usado para especiicar as restries ou os comportamentos que se
relacionam ao uso e a manipulao dos dados em cache. 0s eemplos incluem:
Restric tempcral. Lstas restries especiicam o tempo ou a escala da data em que os dados
em cache podem ser usados. uando os dados se tornam antigos ou epiram, podem ser ecluidos
do cache ou automaticamente atualizados obtendo os ltimos dados do usurio. Lm alguns casos,
pode ser apropriado deiar o cliente usar dados de reerncia separado e mape-los com dados
atualizados quando so sincronizados com o servidor.
Restries 0ecgrficas. /lguns dados podem ser apropriados somente para uma regio particular.
Por eemplo, voc pode ter listas de preo dierentes para posies dierentes. 3ua inra-estrutura
de cache pode ser usada para alcanar e armazenar dados em uma base de por-local.
Exigncias da segurana. 0s dados que so pretendidos especiicamente para um usurio
particular podem ser codiicados para assegurar que somente o usurio apropriado possa acess-lo.
Neste caso, os dados so ornecidos j codiicados, e o usurio tem que ornecer as credenciais
inra-estructure de cache para permitir que os dados sejam descodiicados.
Regras de Negcics. voc pode ter regras de negcios associadas com seus dado sem cache que
ditam como eles devem ser usados. Por eemplo, sua inra-estrutura de cache pode azer um eame
na considerao do papel do usurio para determinar como os dados sero ornecidos e como sero
manejados.
0 metadado associado com os dados permite a sua inra-estrutura de cache assegurar
apropriadamente os dados de modo que sua aplicao no tenha que se preocupar com a colocao
de dados em cache ou detalhes da eecuo. voc pode passar o metadado associado com os dados
reerncia dentro do prprio dado, ou usar um mecanismo out-o-band. 0 mecanismo eato usado
para transportar o metadado ao cliente depende de como sua aplicao se comunica com os servios
de rede. uando usar 3ervios da web, usando encabeamentos do 30/P para comunicar o metadado
com cliente uma boa soluo.
/s dierenas entre os dados de reerncia somente de leitura e dos dados temporrios s vezes
signiica a necessidade de usar dois caches, um para dados de reerncia e outro para dados
temporrios. 0s dados de reerncia so de leitura apenas no cliente e no necessitam ser
sincronizados com o servidor, mas necessitam ser atualizados ocasionalmente para reletir todas as
mudanas e atualizaes realizadas no servidor.
0s dados temporrios podem ser alterados tanto no cliente como no servidor. Com os dados no cache
sendo atualizado algumas vezes no cliente, outras no servidor, e s vezes em ambos, todas as
mudanas eitas nos dados do cliente necessitam ser sincronizadas com o servidor em algum ponto.
3e os dados mudarem no servidor enquanto isso, ocorre um conlito de dados e haver a necessidade
de uma manipulao apropriada. Para ajudar a assegurar que a consistncia dos dados seja mantida, e
evitar o uso de dados imprprios, deve-se ter cuidado em manter o controle de todas as mudanas que
orem realizadas aos dados temporrios no cliente. Jais mudanas so descompromissadas ou tentam
at que sejam sincronizadas ou conirmadas com sucesso pelo servidor.
voc deve projetar sua aplicao 3mart Client de modo que ela possa dierenciar os dados que oram
sincronizados com sucesso com o servidor e os dados que ainda so tentativas. Lssa distino ajuda
sua aplicao a detectar mais acilmente e manejar conlitos de dados. Jambm, voc pode querer
10 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
restringir a aplicao ou o usurio de tomar decises importantes ou de iniciar as aes importantes
baseadas em dados de tentativa. Jais dados no devem ser coniados sobre at que estejam
sincronizados com o usurio. Usando uma inra-estrutura de cache apropriada, voc pode manter-se a
par de dados conirmados e de tentativa.
0 0ach|ag App||cat|ea 8|eck
0 Caching /pplication Block uma etenso do Microsot .NLJ Framework que permite que os
desenvolvedores acilmente armazenem em cache os dados dos ornecedores de servio. Lle oi
construido e projetado para encapsular as prticas recomendadas pela Microsot para colocar em cach
as aplicaes .NLJ Framework, conorme descrito em Caching /rchitecture 0uide or .NLJ Framework
/pplications em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onooa/|tm|
/Cac||ng^rc|.as.
/ arquitetura completa do bloco caching pode ser vista na Figura 2.1.
RetrieveCaohe
Client 3ervioe
Agent
CaoheManager LoadCaohe
ClearCaohe
Uata
3tore
f|gera 2.1
0aoh|ng b|ook workf|ow
0 luo de trabalho de caching consiste dos seguintes passos:
1. Um cliente ou agente de servio az uma solicitao de itens colocados em cache para o
CacheManager.
2. 3e o item j tiver sido armazenado em cache, o CacheManager restaura o item do armazenamento
e o retorna como um objeto CacheItem. 3e o item ainda no oi armazenado em cache, o cliente
notiicado.
3. /ps restaurar dados no armazenados em cache de um provedor de servio, o cliente envia os
dados para o CacheManager. 0 CacheManager adiciona uma assinatura (ou seja, metadado)
como uma chave, validade ou prioridade ao item e o carrega no cache.
4. 0 CacheService monitora o tempo de vida dos CacheItems. uando termina a validade de um
CacheItem, o CacheService o remove e, opcionalmente, chama um callback delegado.
5. 0 CacheService tambm pode eliminar todos os itens do cache.
0 caching block oerece diversas opes de validade de caching so descritos na Jabela 2.1.
1T 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
0s mecanismos de armazenamento abaio esto disponiveis para o caching block:
Memcry-mapped file (MMF). MMFs so mais apropriados para um cenrio de cache de alto
desempenho com base no cliente. voc pode utilizar os MMFs para desenvolver um cache que pode
ser compartilhado em muitos dominios de aplicao e processos dentro do mesmo computador. 0
.NLJ Framework no oerece suporte a MMFs, portanto qualquer implementao de um cache MMF
eecutada como cdigo no gerenciado e no se beneicia de qualquer recurso do .NLJ
Framework, incluindo recursos de gerenciamento de memria (como veriicao de lieira) e
recursos de segurana (como segurana de acesso de cdigo).
0bjetc Singletcn. Um objeto 3ingleton .NLJ pode ser usado para eetuar cache de dados que
podem ser compartilhados atravs de processos em um ou muitos computadores. lsso eito com a
implementao de um servio de cache utilizando um objeto singleton que sirva a mltiplos clientes
pelo .NLJ remoto. 0 cache 3ingleton simples de ser implantado, mas no tem o desempenho e a
escalabilidade oerecida pelas solues baseadas no Microsot 3L 3erver'.
ancc de Dadcs Micrcscft SL Server 2000. 0 armazenamento 3L 3erver 2000 mais
apropriado para uma aplicao que necessite de alta durabilidade ou quando or necessrio eetuar
cache de uma grande quantidade de dados. Como o servio de cache precisa acessar o 3L 3erver
atravs de uma rede e os dados so restaurados utilizando consultas de banco de dados, o acesso
aos dados relativamente lento.
Micrcscft SL Server Desktcp Engine (MSDE). 0 M3DL um banco de dados leve e uma
alternativa ao 3L 3erver 2000. Lle oerece recursos de coniabilidade e segurana, mas possui
uma quantidade de cliente menor que o 3L 3erver, necessitando de menos coniguraes. Como o
M3DL oerece suporte ao 3L, os desenvolvedores tambm ganham muito com o poder de um
banco de dados. voc pode migrar um banco de dados M3DL para um banco de dados 3L 3erver
caso seja necessrio.
S|me|taae|4a4e 4e 0a4es
Como mencionado anteriormente, um problema na utilizao de 3mart Clients que mudanas nos
dados que acontecem no servidor podem ocorrer antes que mudanas eitas pelo cliente sejam
sincronizadas. voc precisa de um mecanismo que assegure que, quando os dados orem
sincronizados, qualquer conlito de dados seja manipulado adequadamente e que os dados resultantes
sejam consistentes e corretos. / atualizao de dados por mais de um cliente conhecida como
simultaneidade de dados.
Listem duas abordagens que podem ser utilizadas para lidar com um caso de simultaneidade de
dados:
U|asse 0escro
Absolute1ime
Lxtendedlormat1ime
lileUependenoy
3liding1ime
utilizado para ajustar a expirao para quando um arquivo alterado.
utilizada para ajustar o tempo absoluto de expirao.
utilizado para ajustar uma expirao baseada em uma expresso (oomo a
oada minuto ou a oada segunda-feira).
utilizado para ajustar o tempo de vida para um item espeoifioando uma
expirao baseada em quando foi aoessado pela ultima vez.
1ahe|a 2.1: 0pes 4e xp|rae 4e 0ach|ag
18 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Simultaneidade Pessimista. / simultaneidade pessimista permite que um cliente mantenha um
bloqueio de dados para evitar que qualquer outro cliente modiique os dados at que as mudanas
do primeiro cliente tenham sido concluidas. Nesses casos, se outro cliente tentar modiicar os
dados, a tentativa alhar ou ser bloqueada at que o responsvel libere o bloqueio.
/ simultaneidade pessimista pode ser problemtica porque um nico usurio ou cliente pode
manter essa trava por um periodo signiicativo, possivelmente sem saber. Portanto, a trava pode
impedir que recursos importantes, como linhas de bancos de dados ou arquivos sejam liberados de
modo oportuno, o que pode aetar seriamente a escalabilidade e a aproveitamento da aplicao. No
entanto, a simultaneidade pessimista pode ser apropriada quando preciso ter controle total sobre
as mudanas eitas a recursos importantes. 0bserve que ela no pode ser utilizada se seus clientes
trabalham oline, porque no ser possivel bloquear os dados.
Simultaneidade 0timista. / simultaneidade otimista no bloqueia os dados. Para decidir se uma
atualizao realmente necessria, os dados originais podem ser enviados juntamente com as
solicitaes de atualizao e os dados modiicados. 0s dados originais so veriicados em relao
aos dados atuais para procurar por atualizaes. 3e os dados originais e os atuais orem iguais, a
atualizao eecutada; do contrrio, a solicitao negada, produzindo uma alha otimista. Para
otimizar esse processo, pode-se utilizar um timestamp ou um contador de atualizaes nos dados
em vez de enviar os originais e nesse caso, somente o timestamp ou o contador precisaro ser
veriicados.
/ simultaneidade otimista oerece um bom mecanismo para atualizar dados mestres que no
mudam com reqncia, como teleones ou endereos de consumidores. / simultaneidade otimista
permite que todos leiam os dados e em situaes em que as atualizaes so menos provveis que
operaes de leitura, o risco de uma alha otimista pode ser aceitvel. / simultaneidade otimista
pode no ser adequada em situaes nas quais os dados so modiicados com reqncia ou nas
quais as atualizaes otimistas tm mais probabilidade de alhar com maior reqncia.
Na maioria dos cenrios 3mart Client, incluindo aqueles nos quais os clientes trabalham oline, a
simultaneidade otimista a abordagem correta, por permitir que mltiplos clientes trabalhem nos
dados ao mesmo tempo sem bloque-los desnecessariamente, aetando todos os outros clientes.
Para mais inormaes sobre simultaneidade pessimista e otimista, consulte 0ptimistic Concurrency
no .NLJ Framework Developer's 0uide em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/cg0|oe/|tm|/cccnct|m|st|cccnc0rrenc,.as.
0t|||zaa4e 0ataSets A00.N1 para 0ereac|ar 0a4es
Um DataSet um objeto que representa uma ou mais tabelas de banco de dados relacional. 0s
Datasets armazenam dados em um cache desconectado. / estrutura de um dataset semelhante de
um banco de dados relacional: Lles epem um modelo de objeto hierrquico de tabelas, linhas e
colunas. /lm disso, eles contm relacionamentos e restries deinidos para o dataset.
Um DataSet /D0.NLJ contm uma coleo de zero ou mais tabelas representadas por objetos
DataJable. Uma Data1able deinido no espao de nome System.Data e representa uma tabela
nica de dados residentes na memria e contm um conjunto de colunas representado por um
DataCclumnCcllecticn e restries representadas por um CcnstraintCcllecticn que juntos deinem o
esquema da tabela. Uma Data1able tambm contm uma coleo de linhas representadas pelo
DataRcwCcllecticn que contm os dados da tabela. 1untamente com seu estado atual, um DataRcw
retm tanto a verso atual quanto a original para identiicar mudanas nos valores armazenados na
linha. 0s Datasets podem ser strongly typed ou untyped. Um DataSet typed herda da classe bsica
do Data3et, mas adiciona uncionalidade de linguagem strong typed, permitindo que os usurios
10 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
acessem contedos de modo programtico com strongly typed. 0s dois tipos podem ser utilizados na
construo de aplicaes. No entanto, o sistema de desenvolvimento Microsot visual 3tudio suporta
melhor typed datasets, e eles tornam a programao com datasets mais cil e com menor propenso
a erros.
Datasets so particularmente teis em ambiente 3mart Client porque oerecem uncionalidade para
ajudar os clientes a trabalhar com dados enquanto esto oline. Lles podem registrar mudanas locais
nos dados, o que ajuda a sincronizar os dados com o servidor e solucionar conlitos, podendo ser
utilizados para mesclar dados de dierentes origens.
Para mais inormaes sobre trabalho com datasets, consulte lntroduction to Datasets em
visual Basic and visual C# Concepts em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~
/||orar,/en-0s/.occn/|tm|/.occnDataSets.as.
Mesc|aa4e 0a4es cem 0atasets
0s Datasets possuem a habilidade de mesclar os contedos de objeto do DataSet, Data1able, ou
DataRcw em datasets eistentes. Lssa uncionalidade especialmente til para registrar mudanas no
cliente e mescl-las com contedos atualizados do servidor.
/ Figura 2.2 mostra um 3mart Client solicitando uma atualizao do 3ervio da web e os novos dados
sendo devolvidos como objeto de transerncia de dados (DJ0). Um DJ0 um padro corporativo que
permite que se agrupe em um objeto todos os dados necessrios para comunicar-se com um 3ervio
da web. Utilizar um DJ0 geralmente signiica que voc pode azer uma s chamada para um 3ervio da
web em vez de diversas chamadas.
3
1
2
Cliente 3ervios da web
Cria Uata3et da mesola de dados U10
oom o Uata3et looal
3olioita a Atualizao
U10
f|gera 2.2
luso oe oaoos no o||enre usanoo oarasers
Neste eemplo, quando o DJ0 retorna para o cliente, ele usado para criar um novo dataset
localmente.
0bservao: Apos uma operao de mesola, o AU0.NL1 no muda automatioamente o estado de alterado para
inalterado. Portanto, apos mesolar os novos datasets oom o dataset de oliente looal, preoiso invooar o mtodo
AoooeptChanges em seu dataset para reoonfigurar a propriedade do Row3tate para inalterado.
Para mais inormaes sobre a utilizao de datasets, consulte Merging Data3et Contents no .NLJ
Framework Developer's 0uide em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/cg0|oe/|tm|/cccnmerg|ngoatasetccntents.as.
Aemeataa4e e 0esempeahe 4es 0atasets
0s Datasets reqentemente contm um grande nmero de dados que, se transmitidos pela rede,
podem resultar em problemas de desempenho. Felizmente, com o /D0.NLJ Data3ets, voc pode usar
o mtodo 0etChanges em seus datasets para assegurar que somente os dados modiicados em um
dataset comuniquem-se entre o cliente e o servidor, acomodando os dados em um DJ0. Lm seguida,
os dados so mesclados com o dataset em seu destino.
Figura 2.3 mostra um 3mart Client que az mudanas em dados locais e utiliza o mtodo 0etChanges
em um dataset para submeter somente os dados modiicados ao servidor. 0s dados so transeridos a
um DJ0 por motivos de desempenho.
20 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
f|gera2.3
usanoo um l1U para me|horar o oesempenho
0 mtodo 0etChanges pode ser usado por aplicaes 3mart Client que precisam icar oline. uando a
aplicao estiver on-line novamente, voc pode utilizar o mtodo 0etChanges para determinar quais
inormaes mudaram e, em seguida, gerar um DJ0 para se comunicar com o 3ervio da web e
assegurar que as mudanas sejam enviadas ao banco de dados.
|ace|ae 4e 0a4es ae w|a4ews ferms
/ vinculao de dados no windows Forms permite que conecte a interace de usurio de sua aplicao
aos dados subjacentes da aplicao. / vinculao de dados no windows Forms suporta vinculao
bidirecional para que se possa vincular uma estrutura de dados com a interace de usurio, mostrar os
valores atuais de dados ao usurio, permitir que o usurio edite esses dados e depois atualizar os
dados subjacente automaticamente, utilizando os valores inseridos pelo usurio.
voc pode usar a vinculao de dados no windows Forms para conectar praticamente qualquer
estrutura de dados ou objeto a qualquer propriedade dos controles da interace do usurio. voc pode
vincular um nico item de dados a uma propriedade nica de controle ou de dados mais compleos
(por eemplo, uma coleo de itens de dados ou uma tabela de banco de dados) ao controle para que
ele possa mostrar todos os dados em data grid ou list bo.
0bservao: voo pode vinoular qualquer objeto que suporte uma ou mais propriedades publioas. L possivel
vinoular apenas as propriedades publioas da sua olasse e no a membros publioos.
/ vinculao de dados no windows Forms permite que voc oerea uma interace de usurio leivel e
data-driven com suas aplicaes. voc pode utilizar a vinculao de dados para oerecer controle
personalizado sobre a aparncia de sua interace de usurio (por eemplo, vinculando a propriedades
de controle como cor de segundo plano ou de primeiro plano, tamanho, imagem ou icone).
/ vinculao de dados possui muitos usos. Por eemplo:
Mostrar dados somente de leitura aos usurios;
0erecer uncionalidade lookup na tabela, permitindo que a interace de usurio conecte-se a nomes
interace de usurio. Fornecedores de dados podem ser qualquer objeto que tenha propriedades
pblicas, um conjunto ou uma coleo que suporte a interace lList ou uma instncia de uma classe
de dados complea (por eemplo, DataSet ou Data1able).
CurrencyManager. 0 objeto CurrencyManager registra a posio atual de dados dentro de um
nica propriedade de um controle e a propriedade de outro objeto ou a do objeto atual em uma lista
de objetos.
|ace|ae 4e 0a4es a 0eatre|es 4e w|a4ews ferms
H diversas propriedades e mtodos que se pode utilizar para vincular a controles especiicos do
windows Forms. / Jabela 2.2 mostra alguns dos mais importantes.
1ahe|a 2.2: Prepr|e4a4es e Mete4es para |ace|ae 4e 0a4es a 0eatre|es 4e w|a4ews ferms
Propredade ou Mtodo Uontro|e do Wndows Iorms 0escro
Propriedade Uata3ouroe ListControls (por exemplo:
ListBox ou Combo Box),
Uata0rid Control
Permite espeoifioar o objeto provedor dos
dados (oara prov|oer) para ser a ligao o
oontrole da interfaoe do usuario.
Propriedade
UisplayMember
ListControls Permite espeoifioar o membro do provedor
de dados (oara prov|oer) que sera
apresentado ao usuario.
Propriedade valueMember ListControls Permite espeoifioar o valor assooiado oom
o apresentado para um uso interno da sua
aplioao.
Propriedade UataMember Uata0rid oontrol 3e o 0ata5ource oonter mais de uma fonte
de dados (por exemplo, se for espeoifioado
que o 0ata5et oontenha multiplas tabelas),
utilizarem a propriedade do 0ataMember
para espeoifioar um para ser a ligao oom o
gr|o (veja nota abaixo).
Mtodo 3etUataBinding Uata0rid oontrol Permite que se reinioie o mtodo
Uata3ouroe em tempo de exeouo.
23 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
instncias a outros objetos. 3e voc conigurar o caminho de navegao para uma cadeia vazia, o
mtodo 1cString chamado no objeto subjacente da origem de dados.
0bservao: 3e uma propriedade somente para leitura (ou seja, o objeto no suporta um oonjunto de operaes
para essa propriedade), a vinoulao de dados no torna, por padro, o oontrole do windows lorms vinoulado
somente para leitura. lsso pode deixar o usuario oonfuso, pois ele podera editar o valor na interfaoe do usuario,
mas o valor no objeto vinoulado no sera atualizado. Portanto, assegure que os sinalizadores de 'somente leitura'
estejam definidas para true em todos os oontroles do windows lorm que esto vinoulados a propriedades de
'somente leitura'.
|ace|aa4e 0eatre|es aes 0ataSets
Freqentemente, til vincular controles a datasets. lsso possibilita eibir os dados dataset em um
data grid, e isso permite que o usurio acilmente atualize os dados. voc pode vincular um controle
data grid a um DataSet usando o seguinte cdigo.
Dafa5ef neWDafa5ef = Web5ev1cePoxy.GefDafa5ef{}
fh1s.dafaG1d.5efDafa81nd1ng{ neWDafa5ef, "fab1eName" }
/lgumas vezes necessrio substituir os contedos de seu dataset depois de todos os vinculos com
seus controles terem sido estabelecidos. No entanto, quando voc substitui sets eistentes com sets
novos, todos os vinculos permanecem com os datasets antigos.
Lm vez de recriar manualmente os vinculos de dados com a nova onte, voc pode utilizar o mtodo
Merge da classe DataSet para trazer os dados do novo data set ao eistente, como mostrado no
eemplo de cdigo abaio.
Dafa5ef neWDafa5ef = my5ev1ce.GefDafa5ef{}
fh1s.dafa5ef1.C1ea{}
fh1s.dafa5ef1.Mege{ neWDafa5ef }
0bservao: Para evitar questes de threading, deve-se atualizar apenas objetos de dados vinoulados no
enoadeamento ul. Para mais informaes, oonsulte Capitulo 6, 'utilizando 1hreads Multiplos.'
Naregaa4e Atrares 4e ema 0e|ee 4e 0a4es
3e sua origem de dados possui uma coleo de itens, voc pode vincular a coleo de dados a seus
controles do windows Forms e navegar atravs da coleo de dados, um item de cada vez. / interace
de usurio atualizada automaticamente para reletir o item atual na coleo.
voc pode vincular a qualquer objeto de coleo que suporte a interace IList. uando voc vincula a
uma coleo de objetos, possivel permitir ao usurio navegar atravs de cada item da coleo,
atualizando-a automaticamente para cada item. Muitas das colees e classes de dados compleas
oerecidas pelo .NLJ Framework j suportam a interace IList, para que se possa acilmente vincular
conjuntos ou dados compleos como data rows ou data views. Por eemplo, qualquer objeto de array
que seja uma instncia da classe System.Array implementa a interace IList como padro e portanto
pode ser vinculado interace de usurio. Muitos dos objetos /D0.NLJ tambm suportam a interace
lList ou uma derivao, permitindo que esses objetos sejam acilmente vinculados tambm. Por
eemplo, todas as classes DataViewManager, DataSet, Data1able, DataView e DataCclumn
suportam vinculao de dados dessa orma.
0rigens de dados que implementam a interace IList so gerenciadas pelo objeto CurrencyManager.
Lste objeto mantm um indice na coleo de dados atravs da sua propriedade Pcsiticn. 0 indice
usado para garantir que todos os controles vinculados onte de dados leiam e gravem no mesmo item
da coleo de dados.
24 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
3e seu ormulrio contm controles vinculados a mltiplas origens de dados, ele ter mltiplos objetos
CurrencyManager, um para cada origem de dados distinta. 0 objeto indingCcntext ornece acesso
cil a todos os objetos CurrencyManager do ormulrio. 0 seguinte eemplo de cdigo mostra como
incrementar a posio atual dentro de uma coleo de consumidores.
fh1s.81nd1ngConfexf| dafasef, "cusfomes" ].Pos1f1on += 1
Deve-se utilizar a propriedade Ccunt no objeto CurrencyManager, como demonstrado no cdigo
abaio, para assegurar que uma posio invlida no seja deinida.
1f { fh1s.81nd1ngConfexf| dafasef, "cusfome" ].Pos1f1on <
{ fh1s.81nd1ngConfexf| dafasef, "cusfome" ].Counf 1 } }
{
fh1s.81nd1ngConfexf| dafasef, "cusfomes" ].Pos1f1on += 1
}
0 objeto CurrencyManager tambm suporta um evento PcsiticnChanged. voc pode criar um
manipulador para este evento, para que seja possivel atualizar sua interace de usurio de modo a
reletir a posio de vinculo atual. 0 seguinte eemplo de cdigo eibe uma etiqueta para visualizao
da posio atual e o nmero total de registros.
fh1s.81nd1ngConfexf| dafasef, "cusfomes" ].Pos1f1onChanged +=
neW Lvenfhand1e{ fh1s.81nd1ngPos1f1onChanged }
0 mtodo indingPcsiticnChanged implementado da seguinte orma.
p1vafe vo1d 81nd1ngPos1f1onChanged{ obecf sende, 5ysfem.LvenfAgs e }
{
pos1f1onLabe1.1exf = sf1ng.Iomaf{ "kecod {0}of {1}",
fh1s.81nd1ngConfexf|dsPubs1, "aufhos"].Pos1f1on + 1,
fh1s.81nd1ngConfexf|dsPubs1, "aufhos"].Counf }
}
fermatae Perseaa||za4a e 0earerse 0ata 1ype
voc pode ornecer ormatao personalizada para dados vinculados a um controle utilizando os
eventos Fcrmat e Parse da classe inding. Lsses eventos permitem que se controle o modo de
eibio de dados na interace de usurio e como os dados sero retirados da interace e eaminados,
para que os dados subjacentes possam ser atualizados. Lsses eventos tambm podem ser utilizados
para converter tipos de dados para que tanto a origem quanto o destino sejam compativeis.
0bservao: 3e o tipo de dados da propriedade vinoulada no oontrole no oorresponder ao tipo de dados da
origem de dados, sera emitida uma exoeo. 3e voo preoisar vinoular tipos inoompativeis, voo deve utilizar os
eventos Iormat e Parse no objeto ndng.
0 evento Fcrmat ocorre quando os dados so lidos a partir da origem de dados e eibidos no controle
e quando os dados so lidos do controle e usados para atualizar a origem de dados. uando os dados
so lidos a partir da origem de dados, o objeto inding usa o evento Fcrmat para eibir os dados
ormatados no controle. uando os dados so lidos a partir do controle e utilizados para atualizar a
origem de dados, o objeto inding eamina os dados utilizando o evento Parse.
0s eventos Fcrmat e Parse permitem que voc crie ormatao personalizada para a eibio de
dados. Por eemplo, se os dados na tabela orem do tipo Decimal, voc pode eibi-los no ormato de
25 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
moeda local conigurando a propriedade Value do objeto CcnvertEventArgs para o valor ormatado no
evento Fcrmat. Conseqentemente, voc dever ormatar o valor eibido no evento Parse.
0 eemplo de cdigo abaio vincula um valor de pedido a uma caia de teto. 0s eventos Fcrmat e
Parse so usados para converter entre o string esperado pela caia de teto e os tipos decimais
esperados pela origem dos dados.
p1vafe vo1d 81ndConfo1{}
{
81nd1ng b1nd1ng = neW 81nd1ng{ "1exf", dafasef,
"cusfomes.cusf1oOdes.OdeAmounf" }
// Add fhe de1egafes fo fhe evenf.
b1nd1ng.Iomaf += neW ConvefLvenfhand1e{ Dec1ma11oCuency5f1ng }
b1nd1ng.Pase += neW ConvefLvenfhand1e{ Cuency5f1ng1oDec1ma1 }
fexf1.Dafa81nd1ngs.Add{ b1nd1ng }
}
p1vafe vo1d Dec1ma11oCuency5f1ng{ obecf sende, ConvefLvenfAgs
cevenf }
{
// 1he mefhod convefs on1y fo sf1ng fype. 1esf fh1s us1ng fhe
Des1ed1ype.
1f{ cevenf.Des1ed1ype != fypeof{ sf1ng } } efun
// use fhe 1o5f1ng mefhod fo fomaf fhe va1ue as cuency {"c"}.
cevenf.va1ue = {{dec1ma1}cevenf.va1ue}.1o5f1ng{ "c" }
}
p1vafe vo1d Cuency5f1ng1oDec1ma1{ obecf sende, ConvefLvenfAgs
cevenf }
{
// 1he mefhod convefs back fo dec1ma1 fype on1y.
1f{ cevenf.Des1ed1ype != fypeof{ dec1ma1 } } efun
// Convefs fhe sf1ng back fo dec1ma1 us1ng fhe sfaf1c Pase
mefhod.
cevenf.va1ue = Dec1ma1.Pase{ cevenf.va1ue.1o5f1ng{},
Numbe5fy1es.Cuency, nu11 }
}
0t|||zaa4e e Pa4re Me4e| |ew 0eatre||er para lmp|emeatar a||4ae 4e
0a4es
vincular uma estrutura de dados a um elemento de interace de usurio permite ao usurio editar
dados e assegura que essas mudanas sejam gravadas novamente na estrutura de dados subjacente.
Freqentemente, voc precisar veriicar as mudanas eitas nos dados pelos usurios para assegurar-
se de que os dados inseridos so vlidos.
20 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0s eventos Fcrmat e Parse descritos na sesso anterior oerecem uma maneira de interceptar as
mudanas eitas pelos usurios nos dados, para que sua validao possa ser veriicada. No entanto,
esta abordagem requer que a lgica de validao de dados seja implementada juntamente com o
cdigo de ormatao personalizada, geralmente no nivel do ormulrio. lmplementar essas duas
responsabilidades juntas nos manipuladores de evento podem tornar seu cdigo diicil de entender e
manter.
Uma abordagem mais correto projetar seu cdigo para que ele utilize o padro Model-view-Controller
(MvC). 0 padro oerece separao natural das vrias responsabilidades envolvidas na edio e
alterao de dados atravs da vinculao de dados. voc deve implementar a ormatao
personalizada dentro do ormulrio responsvel pela apresentao de dados em um determinado
ormato e associar as regras de validao com os dados em si, para que essas regras possam ser
reutilizadas de dierentes maneiras.
No padro MvC, os dados so condensados em um objeto modelo. 0 objeto visualizado o ccntrc|e oc
w|nocws |crms ao qual o dado est vinculado. Jodas as alteraes a este modelo so manipuladas por
um objeto controlador intermedirio, responsvel pelo ornecimento de acesso aos dados e pelo
controle de quaisquer mudanas eitas nos dados atravs do objeto visualizado. 0 controlador de
objeto oerece uma localizao natural para a validao de alteraes eitas nos dados e toda lgica de
validao de interace de usurio deve ser implementada nesse local.
A f|gera 2.5 ||estra e re|ac|eaameate estretera| eatre es trs ehjetes 4e em pa4re M0.
Controller
Model
view
f|gere 2.5
Ubjeros no paoro Mooe|-v|ew-0onrro||er
Utilizar um objeto controlador desse modo possui muitas vantagens. voc pode conigurar um
controlador genrico para ornecer regras padro de validao, que podem ser coniguradas durante o
tempo de eecuo de acordo com inormaes contetuais (por eemplo, a uno do usurio). voc
tambm pode ornecer diversos objetos controladores, com cada um implementando regras de
validao especiicas e depois selecionar o objeto apropriado no tempo de eecuo. De qualquer
maneira, como toda lgica de validao est condensada no objeto controlador, os objetos view e
modelo no precisam ser alterados.
/lm de separao de dados, lgica de validao e controles de interace de usurio, o modelo MvC
oerece uma maneira simples de atualizar automaticamente a interace de usurio quando os dados
subjacentes so alterados. 0 objeto controlador responsvel pela notiicao da interace de usurio
quando alteraes de dados acontecem por meio de outras maneiras de programao. / vinculao de
dados no windows Forms que escuta os eventos gerados pelos objetos que so limitados aos controles
de modo que interace de usurio possa automaticamente responder s mudanas eitas nos dados
subjacentes.
2T 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
Para implementar atualizaes automticas da interace de usurio, deve ser assegurado de que o
controlador implemente um evento de notiicao de alterao para cada propriedade que possa ser
alterada. 0s eventos devem seguir a conveno de nomenclatura <roerty>Changed, em que
<roerty> o nome da propriedade. Por eemplo, se o controlador suporta uma propriedade Name,
ele deve suportar tambm um evento NameChanged. 3e o valor da propriedade nome mudar, esse
evento deveria ser disparado para que a vinculao de dados no windows Forms possa manipul-lo e
atualizar a interace de usurio.
0 eemplo de cdigo abaio deine um objeto Custcmer, que implementa uma propriedade Name. 0
objeto CustcmerCcntrcller manipula a lgica de validao para um objeto Custcmer e suporta uma
propriedade Name que, por sua vez, representa a propriedade Name no objeto Custcmer subjacente.
Lste controlador dispara um evento sempre que o nome or alterado.
pub11c c1ass Cusfome
{
p1vafe sf1ng name
pub11c Cusfome{ sf1ng name } {name = name }
pub11c sf1ng Name
{
gef {efun name }
sef {name = va1ue }
}
}
pub11c c1ass CusfomeConfo11e
{
p1vafe Cusfome cusfome = nu11
pub11c evenf Lvenfhand1e NameChanged
pub11c Cusfome{ Cusfome cusfome }
{
fh1s.cusfome = cusfome
}
pub11c sf1ng Name
{
gef {efun cusfome.Name }
sef
{
// 1ODO: va11dafe neW name fo make sue 1f 1s va11d.
cusfome.Name = va1ue
// Nof1fy bound confo1 of change.
1f { NameChanged != nu11 }
NameChanged{ fh1s, LvenfAgs.Lmpfy }
}
}
}
28 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0bservao: Membros da origem de dados de oonsumidores neoessitam ser inioializados quando so deolarados.
No exemplo anterior, o membro consumer.Name preoisa ser inioializado em uma oadeia vazia. lsso aoonteoe
porque o .NL1 lramework no tem ohanoe de interagir oom o objeto e aplioar a oonfigurao padro em uma
oadeia vazia antes que a vinoulao de dados ooorra. 3e o membro da origem de dados de oonsumidores no for
inioializado, a tentativa de reouperar um valor de uma variavel no inioializada oausa uma exoeo de tempo de
exeouo.
No eemplo de cdigo a seguir, 0 ormulrio tem um objeto 1extcx, textbcx1, que precisa ser
vinculado ao nome do cliente. 0 cdigo vincula a propriedade 1ext do objeto 1extcx propriedade
Name do controlador.
cusfome = neW Cusfome{ "ke11y 81ue" }
confo11e = neW CusfomeConfo11e{ cusfome }
81nd1ng b1nd1ng = neW 81nd1ng{ "1exf", confo11e, "Name" }
fexf8ox1.Dafa81nd1ngs.Add{ b1nd1ng }
3e o nome do consumidor mudar (utilizando a propriedade Name no controlador), o evento
NameChanged disparado e a caia de teto atualizada automaticamente, reletindo o novo valor
de nome.
Atea||zaa4e a laterlace 4e 0sear|e qeaa4e es 0a4es Sehjaceates se
A|tera4es
voc pode usar a vinculao de dados do windows Forms para atualizar automaticamente a interace
de usurio quando os dados subjacentes correspondentes so alterados. lsso eito implementando-
se um evento de notiicao de mudana no objeto vinculado. Lventos de notiicao de mudana so
nomeados de acordo com a seguinte conveno:
pub11c evenf Lvenfhand1e <popefyName>Changed
Por eemplo, se voc vincula uma propriedade do objeto Name interace de usurio e o nome do
objeto muda como resultado de outro processamento, voc pode atualizar automaticamente a interace
de usurio para reletir o novo valor Name implementando o evento NameChanged no objeto vinculado.
Semar|e
H muitas consideraes dierentes envolvidas na determinao de como manipular dados em seus
3mart Clients. voc precisa determinar se e como eetuar cache de seus dados e como lidar com
problemas de simultaneidade de dados. Freqentemente voc decidir pela utilizao de datesets
/D0.NLJ para manipular seus dados e voc provavelmente tambm decidir tirar vantagem da
uncionalidade de vinculao de dados do windows Forms.
Lm muitos casos, dados de reerncia somente de leitura e dados temporrios necessitaro ser
tratados de maneira distinta. Como os 3mart Clients geralmente utilizam os dois tipos de dados,
necessrio determinar a melhor orma de manipular cada categoria de dados em sua aplicao.
20 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
3
0eaectaa4e-se
Por deinio, 3mart Clients necessitam se conectar e comunicar com outros recursos e ormar parte
de uma aplicao distribuida. Lsses recursos podem ser processos ou componentes do cliente ou ser
recursos de rede, como um 3ervio da web.
Lste capitulo eamina a natureza da comunicao entre 3mart Clients e outros recursos. Lle trata das
dierentes tecnologias disponiveis para coneo e uso de recursos em outros processos, componentes
ou servios remotos e discute como escolher entre elas. Finalmente, eamina como projetar melhor
seu 3mart Client para conectar-se aos recursos.
S|stemas leese|y 0eep|e4 e 1|ght|y 0eep|e4
Uma aplicao de cliente pode conectar e utilizar componentes e servios em outros processos, tanto
localmente como na rede, de muitas maneiras dierentes. L interessante categorizar as dierentes
abordagens pela quantidade de acoplamento (coupling) eistente entre o servio e o cliente.
Coupling o grau em que um componente (em um sistema distribuido) depende do outro. / natureza
do coupling entre clientes e os servios com os quais se comunicam pode aetar muitos aspectos do
projeto do 3mart Client, incluindo a interoperabilidade, recursos oline, desempenho de comunicao
com a rede, implementao e consideraes de manuteno.
3istemas Jightly Coupled (rouamente acoplado) reqentemente ornecem comunicao direta
objeto-a-objeto, com o objeto no cliente recebendo inormaes detalhadas sobre o objeto remoto.
Lsse sistema pode evitar atualizaes independentes no cliente ou no servidor. Como envolvem
comunicao direta objeto-a-objeto, os objetos geralmente interagem com mais reqncia do que em
sistemas Loosely Coupled (irmemente acoplado), que podem causar problemas de latncia e de
desempenho caso os dois objetos estejam em computadores separados e sejam separados por uma
coneo de rede.
3istemas Loosely Coupled so geralmente sistemas baseados em mensagens, sem que o cliente e o
servio remoto tenham conhecimento de como o outro implementado. ualquer comunicao entre
o cliente e o servio ditada pelo esquema da mensagem. Contanto que as mensagens estejam em
conormidade com o esquema acordado, a implementao do cliente ou do servio pode ser alterada
segundo necessrio sem que eista o temor de intereerncia sobre o outro.
0s mecanismos de comunicao Loosely Coupled oerecem diversas vantagens sobre os mecanismos
Jightly Coupled e ajudam a reduzir a dependncia entre o cliente e o servio remoto. No entanto, Jight
Coupling reqentemente oerece beneicios de desempenho e permitem uma integrao mais prima
entre o cliente e o servio, o que pode ser necessrio devido a eigncias de segurana ou de
transao.
Jodos os clientes distribuidos que se comunicam com servios ou componentes remotos tm algum
grau de coupling. voc precisa estar ciente das dierentes caracteristicas entre as diversas abordagens
de Loosely Coupled e Jightly Coupled para que voc possa escolher o grau correto de integrao para
sua aplicao.
0pes 4e 0emea|cae
uando voc projeta a sua aplicao 3mart Client, voc pode escolher dentre um certo nmero de
mtodos para conecta-la a outros recursos, incluindo:
Micrcscft .NE1 Enterprise Services
Servics da Web
/grupamento de 0bjetos
/linhamento de Componentes
/tivao 1ust-in-Jime
Um componente .NLJ que utilize servios C0M+ conhecido como serviced component. Como os
serviced components so hospedados por uma aplicao C0M+, eles devem estar acessiveis para
essa aplicao. lsso introduz diversos requisitos de registro e conigurao:
/ montagem deve derivar-se da classe ServicedCcmpcnent no espao de nomes
System.EnterpriseServices.
0 assembly deve ser strong-named.
Deinies de tipo de biblioteca para a montagem devem ser registradas e instaladas em uma
antes de mensagens menos importantes, ajudando a garantir tempo de resposta adequado para
aplicaes criticas.
0bservao: 3o possivel oonfigurar prioridade de mensagens para mensagens no-transaoionais.
Recurscs 0ffline. 3e as mensagens no puderem ser entregues porque o cliente est oline, elas
pode enviar muitas mensagens relacionadas ou projetar sua aplicao para que ela participe de
uma transao distribuida e garantir que todas as mensagens sejam entregues em ordem e apenas
uma vez. 3e qualquer erro ocorrer dentro de uma transao, toda a transao cancelada e
nenhuma mensagem enviada.
Segurana. / tecnologia do Message ueuing na qual o componente Messageueue est
baseado utiliza a segurana do windows para proteger o controle de acesso, ornecer auditoria e
criptograar e autenticar as mensagens que o seu componente envia e recebe. /s mensagens do
Message ueuing podem ser criptograadas sem coneo para torn-las impermeveis a packet
sniers. voc tambm pode impedir que as ilas recebam mensagens no criptograadas.
34 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
/s aplicaes que utilizam o Message ueuing podem enviar e ler mensagens a partir de ilas utilizando
as classes no espao de nomes System.Messaging. / classe de Message condensa uma mensagem
a ser enviada para uma ila, enquanto a classe Messageueue oerece acesso a uma ila especiica e
a suas propriedades.
L necessrio instalar e conigurar o Message ueuing em todos os computadores que orem utiliz-lo.
0 Message ueuing est disponivel para o sistema operacional windows e para o Microsot windows
CL .NLJ, permitindo que ele seja utilizado em dispositivos mveis como Pocket PCs.
0 Message ueuing uma boa opo de interao com servios que oeream acesso baseado em
mensagens. voc pode utiliz-lo para comunicar com outros sistemas que tenham o Message ueuing
instalado. / interoperabilidade com outros sistemas limitada, embora voc possa utilizar toolkits de
conectividade para se comunicar com outros sistemas de messaging como o M3eries da lBM.
Para mais inormaes sobre como utilizar o Message ueuing, consulte Message ueuing (M3M)
na documentao Microsot Platorm 3DK em http://msdn.microsot.com/library/deault.asp?url~
/library/en-us/msmq/msmq_overview_4ilh.asp?rame~true.
Para inormaes sobre o M3M-M3eries bridge programming, consulte Programming Considerations
Using M3M-M3eries Bridge Ltensions em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/||s/|tm
/_sna_rcgramm|ng_ccns|oerat|cns_0s|ng_msmq_mqser|es_or|oge_etens|cns_a|.as.
weh Serr|ces
Um 3ervio da web um componente de aplicao que:
Lpe uncionalidades teis a outras aplicaes e web 3ervices atravs dos protocolos de web
3ervices padro.
0erece descrio detalhada de suas interaces, permitindo que voc construa aplicaes cliente
/s mensagens XML baseadas em 30/P dos web 3ervices podem ter partes eplicitas (estruturada e
escrita) ou partes Jightly Coupled (rouamente deinidas) usando arbitrariamente XML. lsso signiica
que os web 3ervices podem ser tanto loosely coupled ou tightly coupled e podem ser usados para
implementar sistemas baseados em mensagens ou em estilo RPC, dependendo das eatas
necessidades de seu ambiente.
voc pode usar para construir aplicaes modulares dentro e atravs de organizaes em ambientes
heterogneos. Lssas aplicaes so interoperveis com uma ampla variedade de implementaes,
plataormas e dispositivos. ualquer sistema que tenha capacidade de enviar XML atravs de HJJP
pode utilizar servios da web. Como os web 3ervices so baseados em padres, sistemas escritos em
dierentes linguagens e para dierentes plataormas podem usar os servios um dos outros. lsso
reqentemente chamado de arquitetura orientada a servios.
0s principais padres utilizados nos web 3ervices so HJJP, 30/P, UDDl, e w3DL. web 3ervices
independem do transporte de protocolos. No entanto, HJJP o mecanismo mais comum para
transporte de mensagens 30/P. Portanto, web 3ervices so adequados para aplicaes que passam
por redes e irewalls corporativos, como 3mart Clients que precisam comunicar-se com os servios da
internet.
35 0ap|te|e 3 - 0eaectaa4e-se
Diversos padres de web 3ervices esto surgindo para ampliar a uncionalidade dos 3ervios da web.
0 Microsot web 3ervice Lnhancements (w3L) 2.0 suporta padres web 3ervices recentes, como w3-
3ecurity, w3-3ecureConversation, w3-Jrust, w3-Policy, w3-/ddressing, w3-Reerrals e w3-
/ttachments e Direct lnternet Message Lncapsulation (DlML). 0 w3L oerece um modelo de
programao para implementar as diversas especiicaes que ele suporta.
Para mais inormaes consulte web 3ervice Lnhancements (w3L) em
|tt.//mson.m|crcsc|t.ccm/weoser.|ces/o0||o|ng/wse/oe|a0|t.as.
Para mais inormaes sobre o 30/P consulte Understanding 30/P em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onsca/|tm|/0noerstanosca.as.
Para mais inormaes sobre o w3-3ecurity consulte web 3ervices 3ecurity 3peciications lnde Page
em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/ong|cosec/|tm|
/wssec0rsec|noe.as.
/s comunicaes dos web 3ervices podem ser coarse-grained, sel-contained e stateless. No entanto,
web 3ervices so geralmente bastante eloqentes se comparados a outras ormas de comunicao.
0s web 3ervices so a melhor abordagem para a construo da maioria das aplicaes 3mart Client.
0 alto grau de interoperabilidade permite que os web 3ervices se comuniquem com um grande nmero
de aplicaes. 0 uso de padres largamente adotados signiica que eles podem passar atravs da
inra-estrutura de rede e de irewalls com conigurao adicional minima (comparado a outras
tecnologias que precisam que portas proprietrias sejam abertas). 0 suporte a web 3ervices no
sistema de desenvolvimento Microsot visual 3tudio signiica que voc pode trabalhar com eles em
um nico ambiente de desenvolvimento.
0s web 3ervices podem no ser adequados em aplicaes de alto desempenho porque so eloqentes
e possuem payloads de mensagens relativamente pesados, se comparado a outras tecnologias de
mensagens como o .NLJ Remoting e o Message ueuing.
Para mais inormaes sobre como construir e utilizar web 3ervices consulte XML web 3ervices
Created Using /3P.NLJ and XML web 3ervice Clients no .NLJ Framework Developer's 0uide em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/cg0|oe/|tm|
/cccnasneto0||o|ngweoser.|cesasnetweoser.|cec||ents.as?|rame~tr0e.
sce|hea4e ema 0pe 4e 0emea|cae
0pes de comunicao dierentes so adequadas em situaes dierentes. / Jabela 3.1 resume as
dierentes opes para conectar-se.
1ahe|a 3.1: 0pes Smart 0||eat
0po vantagens 0esvantagens
Lnterprise 3ervioes Prov aoessos aos servios C0M+
Permite que a identidade flua oom
a ohamada
Requer 3ervioed Components
instalados no oliente
utilizavel somente para o mesmo
prooesso ou oomputador
.NL1 remoting Rapido
Ajustavel
3uporta protooolos oustomizados
Requer o .NL1 lramework para
exeoutar
Proprietario
No atravessa lirewall sem a
abertura de portas RPC
No ha lnfra-estrutura de segurana
(ccnt|n0ai
30 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Message ueuing
util para oomunioao oom sistemas
de mensagens
3eguro
0arante a entrega da mensagem
web servioes
0po vantagens 0esvantagens
Como ilustra a Jabela 3.1, h algumas situaes nas quais o Lnterprise 3ervices, NLJ Remoting e o
Message ueuing podem ser tecnologias apropriadas para comunicao entre 3mart Clients e os
recursos conectados. No entanto, na maioria dos casos, os web 3ervices so os melhores mecanismos
para conectar aplicaes 3mart Client aos servios.
Uma arquitetura construida com base na comunicaes de web 3ervices pode uncionar bem, tanto
em ambientes conectados como oline. / dependncia de protocolos de lnternet permite uma larga
distribuio do cliente a qualquer um na lnternet.
Prejetaa4e Ap||caes Smart 0||eat 0eaecta4as
Durante o projeto de seu 3mart Client, h algumas recomendaes que se considerar, incluindo:
Utilizar mensagens ccarse-grained, em cpsula.
protocolo de comunicaes que o servidor possa usar para decidir quando iniciar uma transao e
como notiicar o cliente com relao ao ito ou alha da concluso da transao processada em
sua totalidade.
r|tar e ar|e 4e 0atasets Atrares 4a ke4e
Datasets podem ser grandes e densos demais para serem usados como mecanismos de carga para
envio de dados atravs de mltiplas camadas. Lm vez disso, voc deveria usar objetos de transerncia
de dados (DJ0s) para diminuir ao carga de mensagens em suas interaces eternas. Para mudana de
dados, voc deveria considerar o envio somente dos dados modiicados em vez de todos os dados.
Para mais inormaes sobre DJ0s consulte o Capitulo 2, Manipulando Dados.
0|r|4|r 0raa4es 0atasets
0randes datasets podem causar problemas de desempenho no cliente se voc tentar apresent-los ao
mesmo tempo. Portanto, necessrio dividi-los em datasets menores. Lssa diviso de dados
conhecida como ag|ng. Por eemplo, em vez de mostrar todo o contedo de uma lista telenica, voc
pode escolher mostrar uma pgina por vez (por eemplo, 20 registros por tela, dispostos
alabeticamente). 3e voc projetar o cliente para que ele use o ag|ng, deve assegurar que a interace
de usurio esteja projetada para acilitar a navegao entre pginas para o usurio.
Lsse conceito de dividir grandes datesets tambm se aplica comunicao com o servidor atravs da
rede. 3e dividir os dados em pedaos gerenciveis, ento poder carregar os dados solicitados
conorme orem necessrios, tcnica conhecida como |az, |cao|ng. No eemplo da lista telenica,
apenas os dados necessrios para a operao atual seriam carregados, reduzindo o impacto na
aplicao e na rede e potencialmente tornando ambas mais responsivas.
Para melhorar a eperincia do usurio, utilize encadeamentos adicionais para eecutar processamento
e comunicao em segundo plano com servios, antencipando solicitaes dos usurios.
Lmbora o suporte para lazy loading possa ser um importante aspecto do projeto de sua aplicao
3mart Client, voc deve ter em mente as necessidades oline de sua aplicao. Lazy loading de dados
que traegam atravs da rede pode impedir que sua aplicao uncione oline conorme desejado.
ers|eae sees Assemh||es e weh Serr|ces
uando voc az atualizaes e lana novas verses do seu sotware 3mart Client para os clientes, crie
novas verses das montagens. 3e voc utiliza montagens versionadas e projeta seus web 3ervice para
suportar interaces retrocompativeis, voc pode suportar verses mltiplas do sotware do cliente. /o
lanar novas verses dos seus servios da web, dierencie-os com uma conveno de nome cannica.
Mudar os espaos de nome de cada lanamento para que eles contenham inormaes de data de
modo a tornar clara a verso dos web 3ervices com a qual o cliente est se comunicando.
Para mais detalhes sobre como lidar com mltiplas verses de montagens, consulte o Capitulo 7,
lmplantando e /tualizando /plicaes 3mart Client.
38 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Semar|e
0s 3mart Clients precisam acessar recursos locais ou remotos para uncionar. / maneira como voc
lida com essas comunicaes um ator critico para seu sucesso ao projetar 3mart Clients coniveis e
responsivos ao usurio. Requisitos como desempenho, segurana e leibilidade aetam a escolha de
conectividade apropriada para o seu ambiente. Com as orientaes deste capitulo, determine que
ormas de conectividade so ideais para seus 3mart Clients e projetar adequadamente os 3mart Clients
e os recursos com os quais se comunicam.
30 0ap|te|e 3 - 0eaectaa4e-se
4
Smart 0||eats 0cas|eaa|meate
0eaecta4es
vivemos em um mundo cada vez mais conectado. No entanto, no podemos coniar na conectividade
todo o tempo. 3eus usurios podem viajar, perder sua coneo sem io temporariamente, ter
problemas de latncia ou de largura de banda, ou voc pode precisar desligar partes de sua rede para
manuteno. Mesmo que os usurios tenham uma boa coneo com a rede, as aplicaes podem no
ser capazes de acessar recursos de rede todo o tempo. Um servio solicitado pode estar ocupado, sem
acesso ou apenas indisponivel temporariamente.
Uma aplicao chamada de ccas|cna|mente conectada se em alguns momentos ela ica impedida de
interagir com os servios ou dados atravs de uma rede. 3e voc puder permitir que seus usurios
sejam produtivos em suas aplicaes quando oline e ainda oerecer-lhes os beneicios de uma
aplicao conectada quando a coneo estiver uncionando, aumentar a produtividade e eicincia do
usurio e a aproveitamento de suas aplicaes.
Um dos beneicios principais dos 3mart Clients sobre as aplicaes baseadas na web que eles
permitem que os usurios continuem trabalhando quando a aplicao no consegue conectar-se aos
recursos da rede. 3mart Clients ocasionalmente conectados so capazes de eecutar seu trabalho
quando no estiverem conectados aos recursos da rede e atualizar recursos da rede em segundo plano
posteriormente. / atualizao ocorrem quase que imediatamente, mas em alguns momentos, podem
ocorrer dias ou at semanas depois.
Para conceder a uma aplicao ocasionalmente conectada plenos recursos, necessrio oerecer uma
inra-estrutura que permita aos usurios trabalhar mesmo quando no tiverem uma coneo aos
recursos de rede. Lssa inra-estrutura inclui cache de dados, de orma que todos os dados solicitados
estejam disponiveis no cliente e armazenamento de detalhes do trabalho do usurio, que sero
utilizados para sincronizar o cliente e os recursos de rede quando o usurio voltar a icar on-line . 0s
eatos recursos e capacidades que sua aplicao precisa para suportar operaes ocasionalmente
conectadas dependem da sua conectividade, do ambiente operacional e da uncionalidade que o
usurio espera ter ao estar on-line e oline. Lntretanto, todas as aplicaes 3mart Client devem
oerecer algum tipo de eperincia aos usurios quando no estiverem conectadas rede, mesmo que
etremamente limitada. /o projetar e construir suas aplicaes, evite sempre gerar mensagens de erro
no cliente pelo ato de um servidor no estar disponivel.
Lsse capitulo eamina os problemas que voc pode encontrar ao construir aplicaes com capacidades
oline. Lle revisa estratgias dierentes para projetar aplicaes oline, discute consideraes de
design em detalhes, eamina como estruturar aplicaes para usar tareas e eamina como suas
aplicaes devem manipular dados.
0eaar|es cemeas ecas|eaa|meate ceaecta4es
3mart clients ocasionalmente conectados so etremamente teis em muitas situaes comuns.
Muitos cenrios oline envolvem a necessidade de o usurio desconectar-se da rede e trabalhar sem
uma coneo de rede, como por eemplo:
Um agente de seguros pode precisar criar uma nova aplice de seguro enquanto est ora do
escritrio. Lle digita todos os dados relevantes, calcula prmios e emitir detalhes de aplice sem a
possibilidade de conectar-se ao sistema do escritrio.
Um representante de vendas pode ter de azer um grande pedido ainda conversando com o cliente,
em algum lugar onde o representante no possa se conectar ao servidor. Lle consulta as listas de
preos e inormaes de catlogo, digita todos os dados do pedido e oerece estimativas de entrega
e niveis de desconto sem se conectar.
Um tcnico de manuteno pode precisar de inormaes tcnicas detalhadas ao atender um
corporao central pode no ser de alta qualidade suiciente para permitir o uso on-line a todo o
momento. / aplicao deve oerecer capacidades oline, incluindo cache de dados, de modo que a
aproveitamento da aplicao seja mantida.
1untas mdicas viajando com Jablet PCs podem passar por interrupes na conectividade de rede
enquanto viajam. uando a aplicao conectada, ela deve sincronizar os dados em segundo plano
e no devem esperar por uma reconeo eplicita.
3mart clients ocasionalmente conectados devem ser desenvolvidos de modo a tirar mima vantagem
de uma coneo quando ela estiver disponivel, garantindo que aplicaes e dados estejam o mais
atualizados possivel, sem aetar o desempenho da aplicao.
strateg|as 4e Prejete 4e 0cas|eaa|meate 0eaecta4es
H duas abordagens gerais para a arquitetura de 3mart Clients ocasionalmente conectados: centraocs
ncs oaocs e cr|entaocs ara c ser.|c.
/s aplicaes que trabalham na estratgia centrada nos dados tm um sistema de gerenciamento de
banco de dados relacional (RDBM3) instalado localmente no cliente e utilizam os recursos integrados
do sistema de banco de dados para propagar alteraes de dados locais de volta ao servidor, manipular
o processo de sincronizao e detectar e solucionar quaisquer conlitos de dados.
/s aplicaes que trabalham na abordagem orientada para o servio armazenam inormaes em
mensagens e as organizam em ilas quando o cliente est oline. /ps a coneo ser restabelecida, as
mensagens em ila so enviadas ao servidor para processamento.
41 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
f|gera 4.1 ex|he as aher4ageas ceatra4as aes 4a4es e er|eata4as para e serr|e
3mart Clients
Abordagem orentada
para o servo
Logioa de lnterfaoe
do usuario
Abordagem Uentrada
nos 0ados
Logioa Looal de Uados
Logioa de lnterfaoe
do usuario
Logioa Business em ul
3ervidores
Logioa Business
Logioa Business
Replioao/Logioa Business
Mensagens
Lx: Chamados de servio da web
lnterfaoes de 3ervio
Agentes de 3ervio
f|gera 4.1
4boroagem or|enraoa para o serv|o x oenrraoa nos oaoos para oesenvo|v|menro oe ap||oaoes
ooas|ona|menre ooneoraoas
Lssa seo eamina as duas abordagens em maiores detalhes e eplica quando voc deve utilizar cada
uma.
Aher4agem 0ata-0eatr|c
uando voc utiliza a abordagem data-centric, o servidor geralmente publica os dados e o cliente cria
uma assinatura para os dados que ele precisa, de orma que possa copiar esses dados para o
armazenamento local antes de o cliente icar oline. uando o cliente est oline, ele az alteraes
nos dados locais por meio de chamadas ao armazenamento local de dados. uando o cliente volta a
icar on-line, o armazenamento de dados propaga as alteraes eitas aos dados no cliente de volta no
servidor. /s alteraes eitas aos dados no servidor tambm so propagadas de volta para o cliente.
uaisquer conlitos encontrados durante a ase de mesclagem so manipulados de acordo com as
regras de soluo de conlitos especiicadas no servidor ou no cliente, de acordo com regras
personalizadas deinidas pelo analista de negcios.
42 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0 processo de mesclagem de alteraes entre o cliente e o servidor conhecido como merge
re||cat|cn. /s alteraes ocorrem de maneira autnoma tanto no cliente quanto no servidor, assim, as
transaes /ClD no so usadas. Lm vez disso, quando uma mesclagem eecutada, todos os
assinantes do sistema utilizam os valores de dados ornecidos pelo publisher (Publicador).
/ principal vantagem da abordagem centrada nos dados que todo cdigo de monitoramento de
alterao ica dentro do banco de dados relacional. De maneira geral, isso inclui o cdigo para
deteco de conlito nos niveis de linha e coluna do banco de dados, cdigo de validao de dados e
restries. lsso signiica que voc no precisa escrever seu prprio cdigo de monitoramento de
alterao ou deteco e soluo de conlito, ainda que precise estar ciente do esquema de merge-
replication de modo a otimizar suas aplicaes para conlitos e atualizaes de dados.
No modelo centrado nos dados, o sistema de banco de dados manipula a sincronizao; portanto, voc
no precisa implementar toda a uncionalidade de sincronizao de dados sozinho. 0s usurios
deinem quais tabelas precisam de sincronizao de dados, e o sistema de banco de dados permite
que a inra-estrutura monitore as alteraes e detecte e solucione conlitos. voc estende a inra-
estrutura a im de solucionar ou evitar conlitos personalizados por meio de solucionadores
personalizados que utilizam objetos C0M ou procedimentos armazenados Jransact 3L (J3L). /lm
disso, por haver um nico repositrio de dados no sistema, a convergncia de dados garantida entre
um servidor e um cliente ao trmino da sincronizao.
H, contudo, algumas desvantagens na abordagem centrada nos dados. / necessidade de um banco
de dados local no cliente signiica que a abordagem pode no ser apropriada nas seguintes situaes:
3e a aplicao or eecutada em um pequeno equipamento
/ Microsot oerece sotware de banco de dados que pode ser eecutado em plataormas windows
client, windows 3erver' Pocket PC, mas no ornece sotware de banco de dados para equipamentos
3martPhone.
/lm disso, o tight coupling entre o banco de dados do servidor e o do cliente signiica que as
alteraes eitas ao esquema de banco de dados no servidor tero um impacto direto no cliente. lsso
diiculta o gerenciamento de alteraes em esquemas de banco de dados no cliente ou servidor.
Com um grande nmero de clientes, h uma necessidade de oerecer uma orma gerencivel e
escalvel de implementar conjuntos dierentes de dados. / merge replication suporta iltro dinmico, o
que permite que o administrador deina esses conjuntos de dados oline e implemente-os de uma
orma escalvel. voc deve aproveitar do mecanismo de iltro oerecido pelo banco de dados para
reduzir a quantidade de dados a ser enviada entre o cliente e o servidor e reduzir a probabilidade de
conlitos.
H muitos beneicios usando um banco de dados local para armazenar e manipular dados localmente.
Um deles usar a banco de dados para propagar alteraes locais de volta ao servidor e ajudar a
resolver problemas de sincronizao. voc deve usar a abordagem centrada nos dados quando:
lmplementar uma instncia de banco de dados no cliente.
de comunicao.
uiser monitoramento e sincronizao de alterao integrados.
local (L/N) ou de uma rede particular virtual (vPN/lP3ec). /s aplicaes escritas para a plataorma
Pocket PC podem sincronizar HJJP por meio de HJJP3.
0bservao: Lsse guia no oobre a abordagem oentrada nos dados em profundidade. Lla enoontrada oom mais
detalhes em muitos lugares, inoluindo o Miorosoft 3L 3erver Books 0n-line ou M3UN. Para maiores detalhes
sobre a abordagem oentrada nos dados, oonsulte 'Merge Replioation' em
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usrep|sq|rep|r,pes_6m,6.asp.
Aher4agem 0r|eata4a para e Serr|e
Com a abordagem orientada para o servio, o oliente interage oom quaisquer servios solioitados. Alm
disso, o oliente esta fooado nas proprias solioitaes de servio, em vez de prooeder s alteraes
diretas a dados mantidos looalmente. As solioitaes de servio levam a alteraes de estado no oliente
ou servidor, mas tais alteraes so sub-produtos das solioitaes de servio.
uma vantagem da estratgia orientada para o servio que no neoessario o uso de um banoo de
dados relaoional looal no oliente. lsso signifioa que a abordagem aplioada a muitos tipos diferentes de
olientes, inoluindo aqueles oom uma quantidade pequena de poder de prooessamento, oomo telefones
oelulares.
uma abordagem orientada para o servio partioularmente apropriada quando sua aplioao opera em
um ambiente de lnternet e extranet. 3e seu oliente opera fora do firewall e interage oom servios
oorporativos, ao usar a estratgia orientada para o servio, voo evita a neoessidade de abrir portas
espeoifioas no firewall oomo, por exemplo, para habilitar o aoesso direto a um banoo de dados ou ao
Miorosoft Message ueuing (M3M).
0 |oose ooup||ng signifioa que voo utilizar diferentes esquemas de dados no oliente e transformar os
dados no oliente. Na verdade, o oliente e o servidor no preoisam ter oonheoimento um do outro. voo
tambm atualiza os oomponentes dos dois de maneira independente.
A prinoipal desvantagem dessa abordagem a esorita de mais oodigos de infra-estrutura para faoilitar o
armazenamento e enoaminhamento de mensagens, bem oomo a deteoo de quando a aplioao
estiver on-line ou offline. lsso ofereoe mais flexibilidade no projeto, mas geralmente signifioa mais
trabalho para oriar seus olientes offline.
Nota: 0 3mart Client 0ffline Applioation Blook ofereoe um oodigo que suporta uma estratgia orientada para o
servio para olientes offline. voo pode usar esse blooo para deteotar quando uma aplioao esta on ou offline e
armazenar e enoaminhar mensagens para prooessamento em um servidor. Para uma viso geral sobre esse blooo
de aplioao, oonsulte 3mart Client 0ffline Applioation Blook em
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usonpaghrm|off||ne.asp.
A abordagem orientada para o servio mais adequada para olientes que neoessitam interagir oom
diversos servios diferentes. Pelo fato da oarga da mensagem estar enoapsulada, a oamada de
transporte varia sem afetar o oonteudo das mensagens. Por exemplo, uma mensagem destinada
originalmente para um servio da web poderia ser enviada oom a mesma faoilidade para um servio que
oonsumisse mensagens Message ueuing. 0 fato de a mensagem ser transport agnostio tambm
permite implementaes personalizadas de segurana pela aplioao.
voo deve usar a abordagem orientada para o servio quando:
Desejar separar o cliente e o servidor a im de permitir verses e usos independentes.
aplicao.
44 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Requerer um cliente enuto.
For capaz de estruturar sua aplicao em uma arquitetura orientada para o servio.
dierente do servidor.
3ua aplicao interagir com mltiplos ou dierentes servios (por eemplo, web 3ervices mltiplos
Lnquanto ambas abordagens (centradas nos dados e orientada para o servio) so abordagens
arquiteturais vlidas, muitas aplicaes 3mart Client no so capazes de suportar instncias relacionais
de banco de dados completas no cliente. Nesses casos, adotar uma abordagem orientada para o
servio e assegurar que tenha a inra-estrutura apropriada para manipular questes como cache de
dados e deteco e soluo de conlitos.
Por essa razo, o restante desse capitulo est ocado nas questes que desenvolvedores 3mart Client
precisam levar em considerao ao implementar a abordagem orientada para o servio.
Prejetaa4e Ap||caes Smart 0||eat 0cas|eaa|meate 0eaecta4as
0t|||zaa4e ema Aher4agem 0r|eata4a para e Serr|e
/o desenvolver seus 3mart Clients ocasionalmente conectados utilizando uma abordagem orientada
para o servio, h uma srie de questes que precisam ser levadas em considerao, incluindo:
Favcrecimentc de ccmunicac assincrnica.
0erenciamentc de ccnexes.
Manipulac de dependncias.
tipo de transporte baseado em mensagem e tem um atraso entre a solicitao e qualquer resposta
ou no espera qualquer resposta.
45 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
Nota: Nesse guia, a oomunioao sinornioa refere-se a toda oomunioao que espera uma resposta antes que o
prooessamento possa oontinuar, mesmo que o ohamado sinornioo seja exeoutado em um enoadeamento em uma
base separada.
3e voc estiver desenvolvendo uma nova aplicao 3mart Client, certiique que ela use primeiramente
uma comunicao assincrnica ao interagir com dados e servios localizados na rede. /plicaes
criadas para esperar um atraso entre a solicitao e a resposta so mais apropriadas para o uso
ocasionalmente conectado, contanto que a aplicao ornea uma uncionalidade signiicativa e til
enquanto o usurio espera por uma resposta, alm de no impedir que ele continue seu trabalho caso
a resposta demore.
uando a aplicao no estiver conectada aos recursos da rede, armazene as solicitaes localmente
e envie-as ao servio remoto quando a aplicao se conectar novamente. Janto nos casos on-line e
oline, pelo ato de a aplicao no estar esperando uma resposta imediata para uma solicitao, o
usurio no impedido de continuar a usar a aplicao e continuar trabalhando.
/s aplicaes que utilizam a comunicao sincrnica, mesmo em um encadeamento de background
(base), no so adequadas para serem ocasionalmente conectadas. /ssim, voc minimiza o uso de
comunicaes sincrnicas em seus 3mart Clients. 3e voc estiver projetando novamente uma
aplicao que utilize comunicao sincrnica para ser um 3mart Client, assegure-se que ela adote um
modelo mais assincrnico de comunicao, de modo a que possa uncionar oline. Lntretanto, em
muitos casos, voc pode implementar uma comunicao do tipo sincrnica por sobre de uma inra-
estrutura assincrnica (conhecida como modelo sync-on-async) de modo que sejam eitas poucas
alteraes ao design da aplicao.
Permitir que suas aplicaes utilizem a comunicao assincrnica pode trazer beneicios que vo alm
do uso ocasionalmente conectado. / maior parte das aplicaes criadas para comunicao
assincrnica so mais leiveis do que as que utilizam comunicaes sincrnicas. Por eemplo, uma
aplicao assincrnica pode se desligar em meio a uma tarea sem aetar o processamento de
solicitaes e respostas quando ela or iniciada novamente.
Na maioria dos casos, voc no precisa implementar os dois tipos de comportamento (sincrnico e
assincrnico) em uma aplicao para uso on-line e oline. Um comportamento assincrnico
apropriado para os dois tipos de uso, as solicitaes so processadas praticamente em tempo real
quando a aplicao estiver on-line.
M|a|m|zae 4e lateraes 0emp|exas 4e ke4e
3mart clients ocasionalmente conectados devem minimizar ou eliminar interaes compleas com
dados e servios localizados em rede. uando sua aplicao estiver oline, ela armazena as
solicitaes e envia-as quando a aplicao se conectar novamente, ou ela pode ter que esperar pelas
respostas. Lm qualquer um dos casos, a aplicao no capaz de saber imediatamente se uma
solicitao ir obter sucesso ou se j o obteve.
Para permitir que sua aplicao continue trabalhando oline, aa algumas suposies sobre o sucesso
das solicitaes de rede ou alteraes aos dados locais. Monitorar essas suposies e dependncias
entre solicitaes de servio e alteraes de dados pode ser compleo. Para acilitar essa tarea,
simpliique as interaes de rede de suas aplicaes 3mart Client o mimo possivel.
0eralmente, as solicitaes que no devolvem nenhum dado (solicitaes dispare-e-esquea, ou ire-
and-orget) no so um problema para aplicaes ocasionalmente conectadas; a aplicao pode
armazenar a solicitao e encaminh-la quando ela se conectar novamente. uando a aplicao
estiver oline, ela no sabe se houve ito na chamada; portanto, deve supor esse ito na chamada.
lsso pode inluenciar todo o processamento posterior.
40 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
3e uma solicitao retornar dados requeridos antes de a aplicao continuar trabalhando, sua
aplicao deve usar valores provisrios ou dummy, ou uncionar sem os dados. Nesse caso, desenvolva
a aplicao para que ela monitore dados conirmados e provisrios, e que a interace do usurio
inorme o usurio de dados que sejam provisrios ou estejam pendentes. lsso permite ao usurio ou
aplicao tomar decises inormadas baseadas na validade dos dados, alm de evitar problemas de
conlitos e corrupo de dados posteriormente.
Nas situaes nas quais o usurio conclui um nmero discreto de unidades de trabalho oline, permita
na sua aplicao que cada unidade de trabalho alhe ou tenha sucesso por si . Por eemplo, em uma
aplicao onde o usurio digita inormaes de pedido, a aplicao permite que o usurio digite tantos
pedidos quantos orem necessrios, mas deve garantir que um pedido no dependa do sucesso de
outro.
L relativamente cil garantir que no haja dependncias entre unidades de trabalho quando a
aplicao az apenas uma solicitao de servio por unidade de trabalho. lsso permite que sua
aplicao monitore solicitaes pendentes e as processe quando icar on-line . Contudo, em algumas
situaes, as tareas do usurio so mais complicadas e mltiplas solicitaes de servio tm de ser
eitas para completar essas tareas. Nesses casos, a aplicao certiica que cada solicitao seja
consistente com as outras de modo a manter a integridade dos dados.
A4|e 4e kecerses 4e 0ache 4e 0a4es
3ua aplicao precisa garantir que todos os dados necessrios para o usurio continuar trabalhando
estejam disponiveis no cliente quando ele icar oline. Lm alguns casos necessrio armazenar dados
no cliente para propsitos de desempenho, ainda que em muitas vezes sua aplicao deva armazenar
dados adicionais para permitir o uso ocasionalmente conectado. Por eemplo, os dados volteis no
so armazenados para uma aplicao desenvolvida para ser usada on-line, mas habilitam a mesma
para que ela trabalhe oline requerendo que os dados sejam armazenados no computador local. Janto
o cliente quanto o servidor devem ser desenvolvidos tendo em vista a volatilidade dos dados, de modo
que eles manipulam as atualizaes e conlitos de maneira apropriada.
uando uma aplicao estiver oline, voc pode optar por no ecluir dados desatualizados do cache
de dados da aplicao e permitir, por sua vez, que o usurio continue trabalhando com os dados
desatualizados. Lm outros casos, a aplicao os ecluir automaticamente do cache para evitar que os
usurios utilize-os, causando problemas uturos. No ltimo caso, a aplicao pode parar de ornecer a
uncionalidade requerida at que os novos dados tenham sido obtidos atravs de um processo de
sincronizao.
/ atualizao de dados no cache ocorrem de diversas maneiras, dependendo do estilo e da
uncionalidade da sua aplicao. Para algumas, os dados armazenados em cache so atualizados
automaticamente ao terminar sua validade, de acordo com algum tipo de planejamento, quando a
aplicao eecutar uma operao sincrnica ou quando o servidor alterar os dados e inormar a
aplicao sobre a mudana. 0utras aplicaes permitem ao usurio selecionar os dados manualmente
para serem armazenados, permitindo ao mesmo eaminar ou trabalhar com os dados enquanto estiver
oline.
0utras consideraes sobre armazenamento de dados tambm se aplicam, como segurana e
restries de manipulao de dados. Lssas questes no so encontradas somente em aplicaes
com capacidade oline e so descritas com maior proundidade no Capitulo 2, Manipulao de
Dados.
Maa|pe|ae 4e A|teraes em 0a4es 4e kelerac|a
Dados de reerncia mudam com pouca reqncia. 0eralmente, as aplicaes incluem uma quantia
signiicativa desse tipo de dados. Por eemplo, no registro de um consumidor, o nome de um
4T 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
consumidor no muda com reqncia. Lsses tipos de dados so armazenados acilmente em cache no
cliente, mas, s vezes, seus dados de reerncia iro mudar e voc ter que possuir um mecanismo
para propagar as alteraes para seus 3mart Clients.
voc tem duas opes para propagar os dados: o modelo push e o modelo pull.
No modelo push, o servidor notiica o cliente de orma pr-ativa e tenta empurrar (push) os dados para
ora. Na abordagem centrada nos dados, isso poderia ser uma mensagem contendo os dados
atualizados. (lsso requer, do cliente, a implementao de um ponto inal ao qual o servidor possa se
conectar).
No modelo pull, o cliente contata o servidor para uma atualizao. 0 cliente pode azer isso veriicando
regularmente o servidor ou eaminando os metadados com os dados originais que dizem quando a
validade dos dados de reerncia termina. 0 cliente pode, ainda, puar dados do servidor (uma lista de
preos, por eemplo) e us-los apenas quando se tornarem vlidos.
Lm alguns casos, voc pode optar por adotar um modelo no qual o servidor notiique o cliente quando
houver uma atualizao disponivel (por eemplo, enviando um alerta quando o cliente se conectar), e o
cliente, por sua vez, puar os dados do servidor.
0ereac|ameate 4e 0eaexes
/o desenvolver seus 3mart Clients ocasionalmente conectados, considere o ambiente no qual sua
aplicao opera, tanto em termos de conectividade disponivel, quanto em termos de comportamento
desejado de sua aplicao conorme alteraes nessa conectividade.
/lgumas aplicaes so desenvolvidas para operar por longos periodos de tempo (dias ou mesmo
semanas) sem uma coneo. 0utras desenvolvidas para esperar uma coneo em todas as vezes, mas
que tenham a habilidade de lidar com uma desconeo temporria sem maiores problemas. /lgumas
aplicaes oerecem apenas um subconjunto de uncionalidades quando em modo oline, ao passo
que outras a maioria das uncionalidades so para uso oline.
Lnquanto muitos cenrios ocasionalmente conectados envolvem a necessidade de o usurio
desconectar-se eplicitamente da rede e trabalhar sem uma coneo, s vezes a aplicao est oline
sem que ela esteja realmente desconectada da rede. 3uas aplicaes podem ser desenvolvidas para
lidar com um ou ambos os tipos de cenrios.
0ereac|ameate 4e 0eaexe Maaea|
3ua aplicao pode ser desenvolvida para uncionar quando o usurio decidir trabalhar oline. /
aplicao deve armazenar todos os dados que o usurio precisa no computador local. Nesse caso, o
usurio interage com a aplicao sabendo que ela est oline, e a aplicao no tenta eecutar
operaes em rede at que ela receba o comando de entrar no modo on-line e eecutar uma
operao de sincronizao.
voc tambm pode incluir o suporte para usurios para notiicar a aplicao quando eles estiverem
usando uma coneo que seja de alto custo de coneo ou de largura estreita, como um hotspot
comercial sem io ou uma coneo discada. Nesse caso, a aplicao desenvolvida de modo a unir
solicitaes para que quando uma coneo or estabelecida o uso possa ser maimizado.
0ereac|ameate Aetemat|ce 4e 0eaexe
3ua aplicao pode ser desenvolvida para adaptar-se dinamicamente quando houver alteraes
inesperadas na conectividade. Lssas alteraes podem incluir:
Ccnectividade intermitente. / aplicao adapta-se a lidar sem problemas com as ocasies nas
largura estreita ou alta latncia ou determina isso de maneira dinmica e alterar o comportamento
de modo a adequar-se ao ambiente. 3e a qualidade de coneo piorar, a aplicao armazena dados
em cache de maneira mais agressiva.
Dispcnibilidade varivel de servic. / aplicao lida com a indisponibilidade de servios com os
quais ela normalmente interage e alternar para o comportamento oline. 3e a aplicao interagir
com mais de um servio e um deles tornar-se indisponivel, ela considera todos os servios oline.
voc pode detectar se uma aplicao 3mart Client tem conectividade usando a wininet.dll. Jrata-se da
mesma DLL utilizada pelo Microsot lnternet Lplorer para determinar se os usurios esto conectados
lnternet. 0 seguinte cdigo ilustra como chamar a wininet.dll.
|D11lmpof{"W1n1nef.d11"}]
p1vafe exfen sfaf1c boo1 lnfenefGefConnecfed5fafe{ ouf 1nf
connecf1onDesc1pf1on, 1nf esevedva1ue }
pub11c boo1 lsConnecfed{} {
1nf connecf1onDesc1pf1on = 0
efun lnfenefGefConnecfed5fafe{ouf connecf1onDesc1pf1on, 0}
}
0eseare|r|meate 4e Mecaa|sme Stere-aa4-ferwar4
3e desenvolver sua aplicao para utilizar uma arquitetura orientada para o servio, voc deve ornecer
um mecanismo 3tore-and-Forward . Com esse mecanismo, as mensagens so criadas, armazenadas e
inalmente encaminhadas para os respectivos destinos. / implementao mais comum de 3tore-and-
Forward a ila de mensagem. Lssa a orma na qual produtos orientados para mensagens, como o
Microsot Message ueuing, uncionam. Conorme novas mensagens so criadas, elas so inseridas
em ilas de mensagem e encaminhadas para os endereos de destino. /inda que haja alternativas
3tore-and-Forward (como FJP ou arquivos de cpia entre cliente e servidor), esse guia est ocado
somente na implementao mais comum: a ila de mensagem.
3eus 3mart Clients precisam de uma nova maneira de persistir com as mensagens quando entram
para o modo oline. 3e sua aplicao necessita criar novas mensagens quando est oline, sua ila
deve possuir uma orma de persistir nelas para uturas atualizaes com o servidor. / escolha mais
bvia aqui copi-las para um disco.
3eu projeto deve incluir uma uncionalidade que garanta que as mensagens sejam entregues com
sucesso nos respectivos destinos. Para tanto, o projeto deve levar em considerao os seguintes
cenrios:
Falta de ccnfirmac de que uma mensagem fci adequadamente enviada. Lm geral, voc no
deve supor que uma mensagem oi recebida no servidor somente por t-la deiado em uma ila.
Perda de ccnectividade entre c cliente e c servidcr. Lm alguns casos, voc deve retornar uma
mensagem a uma ila pelo ato de a conectividade ter sido perdida entre o cliente e o servidor.
Falta de ccnfirmac de um servic. Nesse caso, voc envia uma conirmao independente
Reccnciliac terceirizada
System.0uid.
/tribuio de um lD temporrio no cliente e a substituio pelo lD real no servidor.
Uso do nome do usurio ou lD para preiar todos os lDs alocados e increment-los no cliente de
Para cada uma dessas tareas, um objeto 1arefa criado e usado para guiar o usurio pelo processo,
armazenar todo estado necessrio, interagir com a interace do usurio e com quaisquer outros
servios necessrios.
uando uma aplicao estiver operando oline, ela precisar enileirar solicitaes de servio e azer
possiveis alteraes locais de estado utilizando valores provisrios ou no-conirmados. Durante a
sincronizao, a aplicao precisa eecutar a solicitao atual de servio e azer possiveis alteraes
55 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
adicionais locais de estado para conirmar o sucesso da solicitao de servio. /o encapsular os
detalhes desse processo dentro de um nico objeto 1arefa, o que insere a solicitao na ila e
monitora alteraes de estado provisrias e conirmadas, simpliique o desenvolvimento da aplicao,
proteger contra alteraes de implementao e permitir que todas as tareas sejam manipuladas de
uma orma padro. 0 objeto Jarea pode oerecer inormaes detalhadas sobre o estado da tarea por
meio de vrias propriedades e eventos, incluindo:
Status pendente. lndica que a tarea est pendente de sincronizao.
Status de ccnflitc. lndica que um erro ocorreu durante a sincronizao. 0utras propriedades iro
Dispcnibilidade da tarefa. /lgumas tareas no estaro disponiveis quando a aplicao estiver on-
line ou oline, ou, se a tarea or parte de um worklow ou processo de interace de usurio, ela
pode no estar disponivel at que uma tarea pr-requisito tenha sido concluida. Lssa propriedade
pode ser ligada a lags habilitadas para itens de menu ou botes da barra de erramentas para evitar
que o usurio inicie tareas inapropriadas.
0utro beneicio da abordagem baseada em tarea que ela oca a aplicao nos usurios e suas
tareas, o que pode resultar em uma aplicao mais intuitiva.
Maa|pe|ae 4e 0epea4ac|as
3e uma tarea de usurio envolve mais de uma solicitao de servio, a tarea precisa ser manipulada
muito cuidadosamente de modo que o usurio possa concluir toda a tarea quando estiver oline. 0
desaio que as solicitaes de servio so reqentemente dependentes umas das outras. Por
eemplo, suponha que voc tenha uma aplicao que permita que consumidores possam azer
reservas para as rias. Para azer uma reserva, a aplicao utiliza uma srie de servios para eecutar
cada parte da tarea na seguinte seqncia:
1. Reservar um carro.
2. Reservar hotel.
3. Comprar passagens areas.
4. Lnviar conirmao por e-mail.
Cada um desses servios precisa ser implementado por sistemas dierentes, talvez at por companhias
dierentes. Lm um mundo pereito, cada solicitao de servio seria eita sem problemas todas as
vezes, de modo tal que seu usurio pudesse reservar o carro, reservar o hotel, e comprar as passagens
e, ainda, receber uma conirmao por e-mail de que tudo saiu a contento. Lntretanto, nem todas as
solicitaes de servio so pereitas, e sua aplicao deve ser capaz de resolver condies de erro e
manipular business rules que aetem o uncionamento de toda a tarea. Lscrever o cdigo para esse
tipo de tarea etremamente desaiador, uma vez que cada parte da tarea (ou seja, cada solicitao
de servio para um servio especiico) depende de outra parte da tarea.
/s dependncias podem, por si s, depender de lgica business complea, o que, mais adiante,
complicar a lgica por trs de toda a tarea. Por eemplo, sua aplicao de reserva de rias pode
permitir que as rias sejam reservadas mesmo que no haja carros disponiveis, contanto que as
reservas de hotel e vo possam ser eitas. /s dependncias entre solicitaes individuais de servio
podem ser tanto o|retas quanto re.ersas.
50 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Dependncias diretas. 3e, durante a sincronizao, a primeira solicitao obtiver ito, mas uma
solicitao subseqente alhar, voc poder ter que reverter a primeira solicitao atravs de uma
transao de compensao. Lsse requisito pode adicionar uma compleidade signiicativa
aplicao.
Dependncias reversas. 3e uma aplicao estiver operando oline e enviar uma solicitao de
servio como parte de uma tarea de solicitao multi-servios, ela ter que assumir que a
solicitao ser concluida com ito de orma que ela possa enileirar solicitaes subseqentes e
no evitar que o usurio conclua a tarea. Nesse caso, todas as solicitaes posteriores so
dependentes do sucesso da primeira. 3e a primeira solicitao alhar durante a sincronizao, a
aplicao deve ter cincia de que todas as solicitaes posteriores devero ser ecluidas ou
ignoradas.
Maa|pe|ae 4e 0epea4ac|as ae Serr|4er
Para reduzir as compleidades associadas com as dependncias entre solicitaes de servio, o servio
da web deve oerecer uma nica solicitao de servio por tarea de usurio. lsso permite que o
usurio conclua uma tarea que ser manipulada durante a ase de sincronizao como uma nica
solicitao atmica para o servio da web. Uma nica solicitao atmica elimina a necessidade de
monitorar dependncias de solicitao de servio, o que pode complicar signiicativamente a
implementao da aplicao do lado do cliente ou do servidor.
Por eemplo, em vez de escrever suas trs interaces de servio como trs etapas separadas:
8ookCa{}
8ookhofe1{}
8ookA111ne11ckefs{}
voc pode combin-las em uma nica etapa:
8ookvacaf1on{ Ca ca, hofe1 hofe1, 11ckefs a111ne11ckefs }
Combinar as etapas dessa orma signiica que, agora, voc tem uma interao atmica em vez de trs
separadas. No eemplo, o servio da web Bookvacation (Reserva de rias) seria responsvel pela
coordenao necessria entre os elementos que perazem o servio.
Maa|pe|ae 4e 0epea4ac|as ae 0||eate
voc tambm pode monitorar as dependncias de solicitao de servio no cliente. Lssa abordagem
oerece uma leibilidade signiicativa, e permite que o cliente controle a coordenao entre quaisquer
nmeros de servios. Lntretanto, essa abordagem de diicil desenvolvimento e teste. / abordagem
baseada em tarea uma boa orma de monitorar dependncias de solicitao de servio no cliente, e
ornece uma orma de encapsular tudo que or necessrio da lgica business e manipulao de erro
em um nico lugar, o que simpliica o desenvolvimento e o teste. Para maiores inormaes sobre a
abordagem baseada em tarea, consulte Uso de uma /bordagem Baseada em Jarea, mais acima,
nesse capitulo.
Por eemplo, o objeto 1arefa usado para reservar rias saberia que ele teria que eecutar trs
solicitaes de servio. Lle implementaria a lgica business necessria de modo que pudesse controlar
as solicitaes de servio apropriadamente se uma condio de erro osse encontrada. 3e a chamada
de servio cckCar (Reservar carro) alhasse, ele seguiria com as chamadas de servio para
cckHctel (Reservar hotel)e cckAirline1ickets (Reservar passagens areas). 3e essa ltima
5T 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
3ervio de otel
ul 1hread
1ask 1hread
Lstado da 1arefa
3ervio de Carro
3ervio Areo
0b[eto 1arefa/
Agente de servo
Ap|cao
Interface
do usuro
Uhamadas de
Propredade e Mtodo
U|ente
Lventos
(lired on
1hread ul)
web
3ervio
Chamadas
f|gera 4.2
4boroagem baseaoa em rarefa oom |nrer-oepenono|as
0se 4a 0rqeestrae M|44|eware
s vezes, as dependncias e regras de negcios correspondentes em suas aplicaes so
suicientemente compleas para requerer alguma orma de orquestrao middleware, como
Microsot BizJalk 3erver, que coordena as interaes entre mltiplos web 3ervices e uma aplicao
de cliente. / orquestrao middleware est localizada na camada intermediria e oerece um servio da
web de aada para interagir com o 3mart Client.
0 servio da web de aada apresenta uma interace apropriada, especiica para a aplicao, que
permite uma nica solicitao web por tarea de usurio. uando uma solicitao de servio
recebida, o servio de orquestrao processa a solicitao iniciando e coordenando as chamadas para
os web 3ervices necessrios, possivelmente agregando os resultados antes de retorn-los para o
cliente. Lssa abordagem oerece uma maneira mais escalvel de dar conta das interaes entre
mltiplos servios da web. 0 BizJalk tambm oerece servios importantes, como transormao de
dados e mecanismo de business rules que podem ajudar signiicativamente ao interagir com web
3ervices distintos ou sistemas de legado e em cenrios business compleos. /lm disso, essa
abordagem ornece garantias importantes de disponibilidade e coniana, o que ajuda a garantir a
consistncia entre os mltiplos servios. / Figura 4.3 ilustra o uso da orquestrao middleware.
alhasse, ele seria, ento, responsvel pelo cancelamento de qualquer reserva de carro ou hotel,
criando uma solicitao de servio de transao de compensao para cada servio / Figura 4.2 ilustra
essa abordagem baseada em tarea.
58 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Chamadas de
Propriedade e
Mtodo
0b[eto 1arefa/
Agente de
5ervo
Cliente
Lventos
(Fired on
Ul Jhread)
Lstado
da 1arefa
laohada
3ervio
ul 1hread 1ask 1hread
Ap|cao
Usuro
Interface
3ervio de otel
3ervio de Carro
3ervio Areo
web
3ervio
Chamadas
0rquestrao
de Cliente
3ervio
f|gera 4.3
Urquesrrao m|oo|eware usaoa para oooroenar oepenono|as oe serv|o
Semar|e
/lguns clientes precisam operar com eicincia quando conectados e desconectados da rede. /o
desenvolver seus 3mart Clients, voc precisa certiicar-se de que eles podem uncionar eetivamente
em ambas situaes, e transitar sem problemas entre as duas.
H duas estratgias amplas para desenvolver comunicaes 3mart Client: orientada para o servio e
centrada nos dados. /ps determinar qual dessas duas usar, voc precisar tomar algumas decises
undamentais de design para permitir que seus 3mart Clients trabalhem em modo oline. Na maioria
dos casos, os clientes devem ser desenvolvidos para utilizar a comunicao assincrnica e interaes
simples de rede. 0s clientes precisaro armazenar dados em cache para uso quando estiverem oline,
e voc precisar de um mtodo para manipular conlitos de dados e de business rules quando o cliente
voltar ao modo on-line . Lm muitos casos, clientes oline permitem que os usurios eecutem uma
srie de tareas que so dependentes umas das outras. 3er necessrio lidar com essas dependncias
no evento em que uma dessas tareas alhe quando alcanar o servidor. 3eus 3mart Clients podem,
tambm, precisar interagir com web 3ervices de padro CRUD.
/ abordagem baseada em tarea pode simpliicar dramaticamente o processo de aplicaes oline.
Considere a opo de implementar essa abordagem em seus 3mart Clients, ela tambm pode oerecer
uma orma eetiva de manipulao de dependncias, tanto no servidor quanto no cliente.
50 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
5
0eas|4eraes 4e Segeraaa
0s 3mart Clients so aplicaes distribuidas que, geralmente, espalham produtos e tecnologias
dierentes. 0erenciar a segurana nessas aplicaes pode ser uma tarea muito desaiadora. No
servidor, voc precisa adotar uma abordagem de proteo da rede, do prprio servidor e, a seguir, da
aplicao. No cliente, voc deve concentrar-se no uso de recursos de segurana da plataorma
(incluindo o sistema operacional e o Microsot.NLJ Framework), nas operaes privilegiadas que o
cdigo de cliente pode eecutar (segurana de acesso ao cdigo) e nas interaes com a plataorma
do servidor (dominio) e aplicao do servidor.
/ segurana eetiva depende de uma abordagem de deesa em proundidade. /o proteger seus 3mart
Clients, muito importante considerar todos os aspectos de segurana, incluindo:
Autenticac. Lssa operao identiica de maneira nica o usurio da aplicao cliente de orma
que somente usurios aprovados possam acessar toda a aplicao ou parte dela.
Autcrizac. lsso determina as operaes que o usurio unicamente identiicado pode eecutar.
Lssas operaes podem ser tareas ou operaes em recursos aos quais o usurio autenticado
tenha acesso.
Validac de dadcs. lsso uma garantia de que somente dados vlidos e apropriados so aceitos
pela aplicao. 3e voc permitir qualquer registro sem validar os dados primeiro, poder estar
disponivel a ataques por meio da entrada de dados maliciosos.
Prctec de dadcs sensveis. lsso signiica que o armazenamento de dados sensiveis (como
apropriada. 0s detalhes das ecees podem ser registrados no log de registro ou no log da
aplicao.
0erenciamentc de alterac de ccnfigurac. 0arante que voc monitore a conigurao de seu
ambiente de Jl e quaisquer alteraes que ocorram nele. /o azer isso, voc poder ver se houve
qualquer alterao no-autorizada e determinar as implicaes de segurana de quaisquer
alteraes autorizadas.
Lsse capitulo eamina em detalhes alguns dos principais desaios-chave de segurana que voc
encontrar ao desenvolver suas aplicaes 3mart Client, especialmente ocando em autenticao,
autorizao, validao de dados, e proteo de dados sensiveis. 0 capitulo cobre a segurana do
acesso ao cdigo, a tecnologia-chave no .NLJ Framework para gerenciar a segurana em nivel de
cdigo e no em nivel de usurio.
0utro aspecto importante que voc deve levar em considerao ao eaminar a segurana do 3mart
Client a orma com que seu 3mart Client utilizado. Para maiores inormaes sobre questes de
segurana que aetem o uso, consulte o capitulo 7, Uso e /tualizao de /plicaes 3mart Client.
Nota: ualquer cdigo utilizado em sua aplicao deve ser analisado com o FCop. Lssa erramenta
permite a voc veriicar mdulos gerenciados de cdigos para conormidade com as diretrizes de design
do.NLJ Framework, incluindo um nivel base de conormidade de segurana. 0 FCop pode ser baiado
do site 0otDotNet em |tt.//www.gctoctnet.ccm/team/|cc/.
Aeteat|cae
/ autenticao o processo compreendido pela identiicao nica de um usurio por meio da
veriicao de suas credenciais. / autenticao de usurio pode ser requerida quando o usurio tentar
eecutar ou instalar a aplicao ou quando a aplicao estabelecer uma coneo a um servio remoto
ou acessar dados mantido localmente.
Lssa seo eamina alguns cenrios de autenticao comuns a 3mart Clients, cobre alguns dos
dierentes modos pelos quais voc pode azer chamadas de rede autenticadas e discute como recolher
credenciais de usurios e valid-las quando em modo oline.
0eaar|es 4e Aeteat|cae Smart 0||eat
Dependendo do estilo e uncionalidade da sua aplicao 3mart Client, voc pode precisar autenticar o
usurio em um ou mais pontos durante a interao do usurio com a aplicao. H quatro pontos nos
quais voc desejveis para autenticar o usurio:
uando a aplicao instalada.
lasta|ae
3e sua aplicao implementada centralmente (por eemplo, usando implementao no-touch), voc
protege a aplicao no servidor web de orma que ela ser instalada apenas por usurios autorizados.
Lsses usurios devem, primeiramente, acessar a aplicao e azer o download para os computadores
cliente.
Proteger o acesso a uma aplicao 3mart Client implementada de modo no-touch um procedimento
similar ao de proteo de qualquer outro arteato localizado no servidor web, como uma pgina web.
0s 3ervios de lnormaes da lnternet da Microsot (Microsot lnternet lnormation 3ervices-ll3)
ornecem uma srie de mecanismos de autenticao, como integrada do windows, digest, ou
autenticao bsica.
01 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Nota: As autentioaes basioa e digest no so apropriadas se voo estiver usando uma implementao no-touoh
e se sua aplioao utilizar um arquivo de oonfigurao para armazenar as definies de oonfigurao, uma vez
que o arquivo de oonfigurao no pode ser baixado automatioamente pelo.NL1 lramework usando esses
meoanismos.
/ps selecionar o mecanismo apropriado de autenticao, e o ll3 identiicar o usurio a partir das
credenciais, voc protege a aplicao e os mdulos dependentes deinindo permisses de arquivos na
aplicao e nos arquivos do mdulo. Para acilitar o gerenciamento de uma grande quantidade de
usurios, considerar a possibilidade de oerecer acesso a um Microsot windows group (por eemplo,
3martClient/ppUsers) e inserir usurios individuais no grupo.
Jodos os usurios que voc precisar autenticar devem ter uma identidade windows no servidor para
que o ll3 possa proteger o acesso aplicao e seus mdulos, mas eles no precisam
necessariamente estar logados aos computadores clientes usando essa identidade. 3e a conta de
logon do usurio no or conhecida pelo servidor, o usurio solicitado a ornecer um nome de usurio
e senha quando clicar no link para o arquivo eecutvel da aplicao.
3e usar a autenticao integrada do windows, as credenciais do usurio logado so automaticamente
utilizadas para tentar ganhar acesso novamente aplicao. lsso permitir acesso seguro e continuo
quando o usurio estiver logado com uma identidade comum tanto ao cliente quanto ao servidor.
Acesse Aeteat|ca4e a Ap||cae
/utenticar usurios para instalar uma aplicao garante que somente os usurios autenticados e
autorizados possam ser capazes de eecutar sua aplicao de um local central. Lntretanto, pelo ato de
a aplicao e seus arteatos dependentes poderem ter sido armazenados em cache no computador
cliente, voc no pode coniar em seu mecanismo para autenticar o usurio toda vez que a aplicao
or eecutada. Nesse caso, ou quando a aplicao or implementada localmente, voc precisa
considerar cuidadosamente como a autenticao de usurio deve ser eita pela sua aplicao. voc
necessita autenticar os usurios toda vez que eles eecutarem a aplicao, principalmente se sua
aplicao oerecer uncionalidade sensivel ou se voc precisar ser capaz de revogar a autorizao de
um usurio para eecutar a aplicao a qualquer momento.
Nos casos em que o usurio tenha logado ao computador cliente utilizando uma identidade comum
tanto ao cliente quando ao servidor, voc ser capaz de coniar no ato de que o usurio pde logar no
computador cliente como autenticao suiciente para eecutar a aplicao. Lssa abordagem permite a
voc usar o sistema operacional Microsot windows para oerecer autenticao de usurio, eliminando
a necessidade de implementar isso no cdigo. /lm disso, pelo ato de o windows poder armazenar,
em cache, as credenciais de usurios em modo oline, voc no precisar armazen-las.
Para computadores cliente nos quais voc no tenha qualquer controle sobre acesso de usurios,
como aqueles de ora da intranet de sua organizao, adote um mecanismo de autenticao
personalizada para angariar as credenciais de usurio e autentic-las contra uma autoridade de
segurana remota. 3e a aplicao or capaz de operar oline, ser necessrio armazenar em cache
credenciais vlidas no cliente, de modo que a re-autenticar o usurio contra elas quando ele iniciar a
aplicao. voc deve reorar a re-autenticao on-line periodicamente para evitar o uso ilimitado de
tais aplicaes.
Acesse Aeteat|ca4e aes 0a4es leca|s
Uma aplicao 3mart Client geralmente armazena, em cache, dados obtidos de um servio remoto (por
eemplo, para aumentar a resposta ou permitir capacidades oline). 3e os dados orem sensiveis,
considere a possibilidade de autenticar o usurio antes de ornecer acesso a ele. Nesse caso, voc
opte por permitir que usurios no-autenticados eecutem a aplicao, mas requerer que os usurios
sejam totalmente autenticados e autorizados antes de ornecer acesso a dados sensiveis.
02 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Nota: L importante garantir que somente os dados aos quais o usuario esteja autorizado a aoessar sejam
armazenados looalmente. 3e os dados forem sensiveis, voo tambm preoisara oertifioar-se de que medidas
adequadas sejam tomadas para garantir a segurana. Para detalhes, oonsulte: 'Manipulao de Uados 3ensiveis'
mais adiante nesse oapitulo.
Dados mantidos localmente devem ser mantidos em um lugar seguro e criptograados.
lndependentemente de como os usurios sejam autenticados, voc geralmente ir desejar usar as
credenciais de alguma orma para acessar e proteger os dados.
Utilize as credenciais padro que oram utilizadas para azer login no computador cliente, ou poder
precisar obter credenciais personalizadas para autenticar o usurio contra uma autoridade de
segurana remota. / primeira possibilidade mais apropriada para aplicaes que so eecutadas em
uma situao de intranet, ao passo que a segunda opo apropriada para aplicaes eecutadas em
uma situao de lnternet ou etranet, onde os usurios no estejam geralmente no mesmo dominio
dos servios remotos por eles acessados. Um dos beneicios do uso da autenticao integrada o de
que o sistema operacional autentica o usurio, protege a aplicao e dados locais e pode armazenar as
credenciais de usurio quando o usurio estiver oline.
Para maiores inormaes sobre como armazenar dados sensiveis localmente, consulte Manipulao
de Dados 3ensiveis mais adiante, nesse capitulo.
Acesse Aeteat|ca4e a ke4e
voc pode optar por permitir o acesso annimo aplicao e permitir que qualquer usurio aa o
download e eecute-a. Lntretanto, aps a aplicao ser eecutada no cliente, ela acessa servios
remotos na rede, como um servio da web, a im de obter dados e servios.
0 acesso a dados e servios na rede necessitam ser protegido para evitar o acesso no autorizado. H
muitas ormas de proteger o acesso ao servio remoto, mas voc normalmente precisa passar as
credenciais de usurio para o servio remoto para que ele eecute a autenticao de usurio.
/utenticar usurios quando eles tiverem acesso a servios remotos na rede uma questo importante.
/lgumas das opes para garantir chamadas autenticadas de servio na rede so descritas em maior
proundidade em Jipos de /utenticao de /cesso de Rede mais adiante nesse capitulo.
sce|her e Me4e|e 0erte 4e Aeteat|cae
/ seo anterior descreveu quatro estgios nos quais voc pode optar por autenticar o usurio. voc
pode optar por autenticar o usurio em um ou mais desses pontos, dependendo da natureza da sua
aplicao e de sua uncionalidade. L importante escolher o ponto certo para ajudar a garantir que sua
aplicao e dados permaneam seguros, enquanto minimiza qualquer impacto no aproveitamento de
sua aplicao. 3e sua aplicao or implementada centralmente (por eemplo, se or implementada
usando o mtodo no-touch ou se or implementada em um arquivo compartilhado), voc pode optar
por restringir o acesso aos usurios que no estejam autorizados. Caso desejar que sua aplicao
esteja disponivel para qualquer um que queira us-la, no ser necessrio autenticar o usurio quando
a aplicao or instalada.
0s computadores cliente, via de regra, no so isicamente seguros e podem, at mesmo, ser
acessiveis publicamente. 3e esse or o caso, e sua aplicao ornecer uncionalidade sensivel, voc
precisar autenticar o usurio reqentemente quando a aplicao or eecutada. 3e sua aplicao
ornecer uncionalidade genrica que esteja disponivel para usurios annimos, voc no precisar
autenticar o usurio nesse ponto. Lntretanto, opte por ornecer uma poro das uncionalidades de sua
aplicao para usurios annimos, mas requerer autenticao antes de permitir que eles acessem
uncionalidades mais restritas. Proteger o acesso a dados sensiveis mantidos localmente muito
importante. 3e sua aplicao or implementada em um equipamento que no seja isicamente
protegido ou que seja acessivel ao pblico, os dados sensiveis devem ser protegidos e devem ser
05 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
acessiveis apenas para usurios autenticados e autorizados. 3ua aplicao poder ornecer
uncionalidades genricas para usurios annimos, mas requerer autenticao de usurio quando os
usurios tentarem acessar dados sensiveis.
0 uso da autenticao integrada do windows tem beneicios quando a aplicao or eecutada em
modo oline. Nesse caso, o windows armazena as credenciais do usurio de modo que o usurio seja
autenticado quando logar-se ao computador cliente em modo oline. Lsse comportamento elimina a
necessidade de seu cliente autenticar o usurio caso voc precise da autenticao de usurio quando
a aplicao or eecutada ou acessar dados sensiveis mantidos localmente.
1|pes 4e Aeteat|cae 4e Acesse 4e ke4e
H muitas tecnologias dierentes que voc pode usar para autenticar os usurios ao acessar servios
remotos, incluindo:
Autenticac integrada dc Windcws
Autenticac perscnalizada
intenes pode comprometer sua aplicao. Por eemplo, uma aplicao que utilize dados de
entrada sem validao de cdigo 3L criado dinamicamente pode estar vulnervel a ataques de
injeo 3L.
Verifique c tipc, fcrmatc cu extensc dcs dadcs de entrada. Considere o uso de epresses
regulares para eecutar essas veriicaes. 0 uso de epresses regulares permite a voc veriicar o
08 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
tipo (por eemplo, string ou integer), ormato (por eemplo, cumprimento de requisitos de politica de
senha como uso de nmeros, caracteres especiais e uma mistura de letras maisculas e
minsculas), e etenso (por eemplo, um nome de usurio com um minimo de 6 e mimo de 25
caracteres).
0 eemplo de cdigo a seguir reora o uso de uma senha que tenha entre 8 e 10 caracteres de
etenso juntamente com uma combinao de letras maisculas, minsculas e caracteres numricos.
// va11dafe fhe use supp11ed passWod.
1f{ !kegex.Mafch{ fexf8ox1.1exf,
0"^{?=."\d}{?=."|a-z]}{?=."|A-Z]}.{,10}$",
kegexOpf1ons.None }.5uccess }
{
// lnva11d ema11 addess.
}
/o desenvolver uma caia de dilogo, com uma caia de campo de teto para senha, certiique-se
de que a propriedade PasswcrdChar seja deinida para um caractere que possa ser eibido quando
teto or digitado no controle, conorme demonstrado no eemplo a seguir.
// 1he passWod chaacfe 1s sef fo asfe1sk.
fexf8ox1.PassWodCha = `"`
0|retr|zes 4e Aeteat|cae
/o desenvolver autenticaes para suas aplicaes, voc deve considerar as seguintes diretrizes:
Determine quando a autenticao precisa ocorrer durante a interao do usurio com sua
aplicao.
Considere o uso da autenticao integrada do windows para autenticar os usurios conorme eles
se loguem ao cliente e antes que eles possam acessar sua aplicao, dados e qualquer tipo de
servio remoto.
3e sua aplicao or centralmente implementada e voc precisar restringir o acesso apenas a
cumprimento de uma politica orte de nome de usurio e senha. Como uma prtica geral, voc deve
requerer um minimo de 8 caracteres e uma mistura de letras maisculas e minsculas, nmeros e
caracteres especiais.
3olicite autenticao de usurio para acesso a servios remotos na rede caso eles orneam acesso
/lgumas ormas de autenticao evitam totalmente passar credenciais de usurios pela rede mas,
caso elas tenham que ser transmitidas, voc deve certiicar-se de que elas sejam criptograadas ou
enviadas por uma coneo segura.
00 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Para maiores inormaes, consulte /utenticao no Capitulo 4 Desenvolvimento de Diretrizes para
/plicaes web 3eguras de lmproving web /pplication 3ecurity: Jhreats and Countermeasures em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onnetsec/|tm|/!|CMC|04.as.
Aeter|zae
/ps os usurios serem autenticados, voc pode determinar ao que eles tero acesso no sistema pelo
uso da autorizao. / autorizao a conirmao de que um usurio autenticado tenha permisso
para eecutar uma operao. / autorizao governa os recursos (por eemplo, arquivos e bases de
dados) que um usurio pode acessar e as operaes (por eemplo, alterar senhas ou ecluir arquivos)
que podem ser eecutadas. 0s usurios que no orem autenticados (ou seja, usurios annimos) no
sero capazes de ser especiicamente autorizados e precisaro ter um conjunto padro de permisses
a eles atribuidas.
Uma srie de atores determina eatamente como voc eecuta a autorizao em seu ambiente.
Determine se ir gerenciar a autorizao baseado nas uncionalidades da aplicao ou nos recursos do
sistema. voc precisa decidir se ir eecutar a autorizao no interior do mtodo ou eecutar
veriicaes ao nivel do mtodo.
Determine tambm onde a inormao de usurio solicitada para autorizao est armazenada (por
eemplo no /ctive Directory ou em uma banco de dados Microsot 3L 3erver'). 3e voc pretende
permitir que seus 3mart Clients trabalhem em modo oline, voc precisa de uma estratgia para a
autorizao de clientes oline.
0 .NLJ Framework ornece a interace IPrincipal, utilizada em conjunto com a interace IIdentity para
deinir as propriedades e mtodos para gerenciar o conteto de segurana do cdigo eecutado. Duas
implementaes dessa interace tambm so ornecidas: WindcwsPrincipal e 0enericPrincipal.
/plicaes cliente que utilizam a autenticao integrada do windows, usam o WindcwsPrincipal, ao
passo que aplicaes cliente que utilizam a autenticao personalizada, usam o 0enericPrincipal.
1|pes 4e Aeter|zae
Dois mtodos de autorizao so comumente utilizados no sistema operacional windows: a autorizao
baseada em recursos e a autorizao baseada em unes. / autorizao baseada em recursos conia
nas listas de controle de acesso (/CLs), enquanto que a autorizao baseada em unes eecuta a
autorizao baseada nas unes dos usurios.
Aeter|zae 8asea4a em kecerses
Para a autorizao baseada em recursos, anee listas discricionrias de controle de acesso a objetos
protegiveis. 0 sistema, ento, passar a tomar decises relativas ao acesso comparando os membros
de grupo aos contedos das /CL's para determinar se o usurio tem o acesso solicitado. 0 modelo /CL
o ideal para muitos tipos de aplicao. Lntretanto, ele no apropriado para todas as situaes. Por
eemplo, voc pode precisar tomar decises relativas ao acesso baseadas em lgica business ou em
objetos no-persistentes criados quando necessrios.
Aeter|zae 8asea4a em feaes
/ autorizao baseada em unes permite a voc associar usurios e grupos com as permisses que
eles precisam para eecutar seus trabalhos. uando um usurio ou grupo adicionado a um papel, o
usurio ou grupo herda, automaticamente, as vrias permisses de segurana. Lssas podem ser
permisses para eecutar aes ou para acessar vrios recursos. / Figura 5.1 mostra a relao entre
as unes e permisses em uma autorizao baseada em unes.
T0 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
f|gera 5.1
4uror|zao baseaoa em funoes
Nos sistemas operacionais Microsot windows 2000 3erver 3ervice Pack 4 (3P4) e windows 3erver'
2003, a autorizao baseada em unes geralmente administrada utilizando o 0erenciador de
/utorizaes. 0 0erenciador de /utorizaes um conjunto de interaces run-time baseadas em C0M,
juntamente com um snap-in Microsot Management Console (MMC) para conigurao. 0s
desenvolvedores podem usar o 0erenciador de /utorizaes para garantir que as aplicaes possam
gerenciar e veriicar solicitaes de cliente para eecutar operaes da aplicao, e os administradores
da aplicao podem us-lo para gerenciar unes e permisses de usurios. Com o 0erenciador de
/utorizaes, agregue operaes de baio nivel em grupos chamados Jasks (Jareas) e gerenciar a
autorizao nesse nivel. Lle tambm permite a voc eecutar lgica de autorizao personalizada antes
e depois da autorizao.
Uma vantagem signiicativa do 0erenciador de /utorizaes a de que ele posteriormente abstrai o
armazenamento de autorizaes da aplicao que requer autorizao, signiicando que os
desenvolvedores sempre podero comunicar-se com o 0erenciador de /utorizaes,
independentemente se o armazenamento estiver no /ctive Directory ou baseado em arquivo.
A4|e 4e 0apac|4a4es 4e Aeter|zae em sea Ap||cae
0 .NLJ Framework ornece uma srie de opes para adicionar capacidades de autorizao em sua
aplicao, incluindo:
Executar demandas declarativas utilizandc c PrincipalPermissicnAttribute
voc pode usar a autorizao baseada em unes, para autorizar o acesso baseado na identidade
do usurio e iliao ao papel. / autenticao integrada do windows com /CL's do windows em
recursos protegidos (como arquivos ou o registro) determina se o chamado tem permisso de
acesso para o recurso. Para mdulos, autorize cdigo de chamada baseado em evidncia, como um
nome ou local de mdulo.
0aranta que as funes sejam definidas ccm granularidade suficiente para separar cs
privilgics de maneira adequada. Lvite conceder privilgios elevados apenas para satisazer os
requisitos de certos usurios; em vez disso, considere a opo de adicionar novas unes para
estar de acordo com tais requisitos.
uandc pcssvel, use demandas declarativas em vez de demandas imperativas. /s
demandas declarativas ornecem ou negam acesso para todas as uncionalidades do mtodo. Llas
tambm trabalham muito melhor com erramentas de segurana e ajudam na questo de auditorias
de segurana, uma vez que as erramentas so capazes de acessar essas demandas eaminando a
aplicao.
T3 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Se vcc precisar determinar se c principal est em mais de um papel, ccnsidere c usc de
Mapear identidades mltiplas para um nico usurio, etendendo a idia de uma identidade para
/Pl no-gerenciado. lsso evitar o sobrecarregamento do buer. voc deve limitar os dados de
entrada de usurio que so passados para /Pl's no-gerenciados.
3empre valide os dados obtidos de todas as ontes eternas, como sites e servios da web.
Nunca conie na validao de dados por parte do cliente e que seja passada para seu servio ou
para dados incorretos. L mais cil veriicar uma lista limitada de valores conhecidos do que veriicar
uma lista ininita de tipos de dados desconhecidos e maliciosos. voc pode tanto rejeitar o dado
ruim quanto limp-lo (ou seja, retirar caracteres potencialmente no-seguros) antes de utiliz-lo.
Restrinja os dados de entrada validando-os de acordo com o tipo, tamanho, ormato e etenso.
Uma orma de azer isso utilizar epresses regulares (disponivel a partir do namespace
System.1ext.RegularExpressicns) para validar dados de entrada de usurio.
Rejeite dados ruins e, em seguir, limpe os dados. 3e sua aplicao precisar aceitar alguns dados de
entrada de usurio em um ormulrio livre (por eemplo, comentrios em uma caia de teto, limpe
os dados de entrada conorme demonstrado no eemplo abaio.
p1vafe sf1ng 5an1f1zelnpuf{ sf1ng 1npuf }
{
// Lxamp1e 11sf of chaacfes fo emove fom 1npuf.
kegex badChakep1ace = neW kegex{ 0"{|<>""`x{}&]}" }
sf1ng goodChas = badChakep1ace.kep1ace{ 1npuf, "" }
efun goodChas
}
Considere a opo de centralizar suas rotinas de validao para reduzir o esoro de
eecutar uma operao privilegiada. 0 Microsot .NLJ Framework ornece permisses de acesso ao
cdigo e permisses de identidade do cdigo. /s permisses de acesso ao cdigo englobam a
habilidade de acessar um determinando recurso ou eecutar uma operao privilegiada em
particular. Por eemplo, o FileI0Permissicn necessrio antes de a aplicao poder eecutar
quaisquer operaes l/0 de arquivo. /s permisses de identidade do cdigo so utilizadas para
restringir o acesso ao cdigo, baseadas no aspecto da identidade do cdigo chamado, como seu
nome orte.
Ccnjuntcs de permissc. 0 .NLJ Framework deine um nmero de conjuntos de permisses, que
representam um grupo de permisses comumente atribuidas como um todo. Por eemplo, o .NLJ
Framework deine o conjunto de permisso Full1rust, que atribui todas as permisses para cdigos
totalmente coniveis, e o conjunto de permisso LccalIntranet, que atribui um nmero muito
limitado de permisses.
Evidence. / evidncia utilizada pelo sistema de segurana .NLJ Framework para identiicar
mdulos. / politica de acesso ao cdigo utiliza evidncias para ajudar a conceder as permisses
corretas para o mdulo correto. / evidncia pode estar relacionada ao local (por eemplo, URL, site,
diretrio de aplicao ou zona) ou relacionada ao autor (por eemplo, nome orte, publisher, ou
hash).
Pcltica. / politica de segurana do acesso ao cdigo conigurada por administradores e
determina as permisses concedidas aos mdulos. / politica pode ser estabelecida nos niveis de
enterprise, mquina, usurio e dominio de aplicao. Cada politica deinida em um arquivo de
conigurao em XML.
0rupcs de cdigc. Cada arquivo de politica contm uma coleo hierrquica de grupos de cdigo.
0s grupos de cdigo so utilizados para atribuir permisses a mdulos. Um grupo de cdigo consiste
em uma condio de iliao (baseada em evidncias) e em um conjunto de permisses. 0 .NLJ
Framework deine um nmero de grupos de cdigo padro, como lnternet, lntranet local, Restrito e
Zonas coniveis.
T0 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Para maiores informaes sobre segurana do aoesso ao oodigo, oonsulte os seguintes oapitulos de
lmproving web Applioation 3eourity: 1hrears ano oounrermeasures: 'Chapter 7 Building 3eoure
Montagens' em hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-
usonnerseohrm|1l0M0h07.asp e '0haprer 3 0ooe 4ooess Seour|r, |n lraor|oe' em
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usonnerseohrm|1l0M0h03.asp.
kese|ee 4e Perm|sse 4e Segeraaa 4e Acesse ae 0e4|ge
/ segurana do acesso ao cdigo utiliza os passos realados na Figura 5.2 para determinar quais
permisses so atribuidas para um mdulo.
Carregar Modulo
Reoolher Lvidnoias
ash
Nome lorte
Publisher 3ig
Lona
uRL
3ite
Lnterprise
Maquina
usuario
AppUomain
(A3P.NL1)
Permisso de demanda
Continuar oom operao
privilegiada (ou aoesso a reourso)
1hrow 3eourity Lxoeption
Politioa de segurana
NA0
3lM
Modulo exeouta
0perao privilegiada
Permisso
Conoedida?
Administrador de
Politioa de segurana
Conoeder oonjunto
de permisses
(ofereoendo permisses)
f|gera 5.2
lererm|nanoo qua|s perm|ssoes sero arr|bu|oas para um moou|o
80 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0s passos a seguir descrevem o procedimento com maiores detalhes:
1. Um mdulo carregado, e evidncias so recolhidas e apresentadas ao host.
2. / evidncia avaliada de acordo com a politica de segurana para o ambiente hosting.
3. 0 resultado dessa avaliao um conjunto de permisses concedidas ao mdulo. Lssas permisses
deinem o que o mdulo pode ou no azer nesse ambiente.
4. uando o mdulo pede para eecutar uma operao privilegiada, as demandas daquela operao
so comparadas com as permisses do mdulo. 3e o mdulo tiver permisso, ao cdigo permitido
eecutar a operao, caso contrrio, uma eceo de segurana lanada.
0eseare|r|meate para Segeraaa 4e Acesse ae 0e4|ge
/s permisses atribuidas a seu cdigo dependem da evidncia associada com seu cdigo e a politica
de segurana vigente no computador cliente. Para garantir a segurana de sua aplicao enquanto
mantm sua uncionalidade, voc precisa considerar cuidadosamente as permisses requeridas pela
sua aplicao e a orma pela qual essas permisses so concedidas.
/s aplicaes s quais so concedidas todas as permisses (aquelas aplicaes deinidas no conjunto
de permisses FullJrust) so conhecidas como aplicaes totalmente coniveis. /s aplicaes s quais
no so concedidas todas as permisses so conhecidas como aplicaes parcialmente coniveis. Lm
teoria, geralmente preerivel desenvolver suas aplicaes para serem parcialmente coniveis.
Lntretanto, aplicaes 3mart Client precisam, com reqncia, eecutar uma srie de operaes que as
aplicaes parcialmente coniveis no podem eecutar por padro. Lssas operaes incluem:
/cessar servidores que no seja aquele a partir do qual a aplicao est sendo eecutada ou
3e sua 3mart Client precisa eecutar esses tipos de operaes, voc deve considerar a opo de azer,
dela, uma aplicao totalmente conivel ou conceder a ela as permisses adicionais especiicas que
ela necessita para operar de maneira adequada.
Nota: As aplioaes implementadas utilizando a implementao no-touoh so, por padro, automatioamente
paroialmente oonfiaveis. 3e sua 3mart Client preoisa exeoutar operaes adioionais que no sejam exeoutadas por
aplioaes paroialmente oonfiaveis, voo preoisa implementar uma nova politioa de segurana ou utilizar um
mtodo alternativo para implementar a aplioao.
Desenvolver e construir aplicaes parcialmente coniveis pode ser uma tarea desaiadora, mas o ato
de considerar com cuidado e restringir as permisses que so concedidas para sua aplicao ajuda a
garantir que ela no possa eecutar aes inapropriadas ou acessar recursos que no sejam
eplicitamente solicitados.
Jodo cdigo precisa ter a permisso para ser eecutado antes da eecuo, mas o cdigo que acessa
recursos protegidos ou eecuta outras operaes sensiveis segurana (como chamar cdigo no
gerenciado ou acessar o sistema de arquivo local) deve ter permisses adicionais concedidas pelo .NLJ
Framework para ser capaz de uncionar. Lsse tipo de cdigo conhecido como cdigo privilegiado. De
maneira similar, o cdigo no-privilegiado no precisa acessar recursos sensiveis e necessita somente
de permisso para ser eecutado. /o desenvolver e construir sua aplicao e seus mdulos, voc deve
identiicar e documentar ambos os tipos de cdigo. /o azer isso, voc estar determinando as
permisses requeridas por seu cdigo.
81 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
voc tambm deve eaminar com cuidado qual evidncia utilizada pelo .NLJ Framework para atribuir
permisses para seu cdigo. / evidncia baseada no local da aplicao (por eemplo, um
compartilhamento de arquivo ou servidor web) deve ser considerada somente se o local central or
seguro. De maneira similar, as aplicaes cujas evidncias orem baseadas em uma chave comum
utilizada para assinar todos os cdigos (por eemplo, pelo departamento de Jl de uma organizao)
devem ser utilizadas somente quando a chave or segura. Lntretanto, geralmente mais seguro coniar
em uma evidncia de nome orte do que em uma evidncia baseada em local, como um endereo de
servidor web.
0eseare|rer Ap||caes Parc|a|meate 0eal|are|s
Use as seguintes diretrizes ao desenvolver aplicaes parcialmente coniveis:
Ccnhecer cs cenrics de implementac da sua aplicac
excees. Por eemplo, para aplicaes baseadas em intranet, em vez de a aplicao abrir
automaticamente e ler um arquivo do disco rigido, voc pode usar o 0penFileDialcg para eibir
uma caia de dilogo que instrua o usurio sobre como selecionar o arquivo.
82 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Verifique as permisses para que pcssam lidar bem ccm as excees (de maneira especial,
SecurityExcepticn). Lm seu cdigo, crie uma instncia de uma classe de permisso especiica
para o recurso que voc esteja tentando acessar e veriique se h as permisses necessrias antes
de acessar o recurso. Por eemplo voc pode usar a classe FileDialcgPermissicn e o mtodo
esttico SecurityManager.Is0ranted para veriicar as permisses quando tiver uma caia de
dilogo sendo eibida utilizando 0penFileDialcg ou SaveFileDialcg, conorme segue.
I11eD1a1ogPem1ss1on f11eD1a1ogPem1ss1on = neW
I11eD1a1ogPem1ss1on{ I11eD1a1ogPem1ss1onAccess.5ave }
1f { !5ecu1fyManage.lsGanfed{ f11eD1a1ogPem1ss1on } }
{
// Nof a11oWed fo save f11e.
}
Nota: IsUranted no garante que uma operao tenha xito porque ela no atravessa a pilha para determinar se
todos os oodigos upstream tenham as permisses neoessarias.
Considere a opo de azer prottipos e testar o cenrio de sua aplicao para vrias zonas de
implementao:
3e sua aplicao or desenvolvida para ser eecutada a partir de um compartilhamento de
arquivo, voc pode simular esse cenrio endereando a aplicao como sendo um
compartilhamento de rede (por eemplo, \\MachineName\c$\our/ppPath\our/pp.ee) e
eecutando-a a partir de seu disco rigido.
3e sua aplicao or desenvolvida para ser eecutada a partir da zona lnternet web, utilize o
cdigo por utilizar a delayed signing, utilizando a poro pblica do par de chaves de nome orte em
vez da chave particular. Para usar a delayed signing, o desenvolvedor pode adicionar os seguintes
atributos ao arquivo montagem.cs para seu projeto.
|monfagem:MonfagemkeyI11e{"pub11ckey.snk"}]
|monfagem:MonfagemDe1ay51gn{fue}]
Prcteja as chaves particulares geradas. / linha de comando a seguir eibe o uso da erramenta
de nome orte (3n.ee), onecida pelo .NLJ Framework 3DK, para gerar o par de chaves
(Keypair.snk) diretamente em um equipamento de armazenamento removivel.(No eemplo, a
unidade F utilizada uma unidade U3B.)
84 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
sn -k f:\keypa1.snk
sn -p f:\keypa1.snk f:\pub11ckey.snk
/ chave particular (Publickey.snk) usada para delayed signing pelos desenvolvedores. 0 par de
chaves armazenado em um local seguro com acesso altamente restrito.
Desabilite a verificac para teste. Para testar um mdulo que tenha sido delay signed, voc
pode registr-lo em computadores de teste usando 3n.ee. / Jabela 5.1 lista as variaes de linha
de comando mais comumente utilizadas.
1ahe|a 5.1: ar|aes 4e l|aha 4e 0emaa4e Ma|s 0ememeate 0t|||za4as
Uomando 0escro
sn -v monfagem.d11 Uesabilita a verifioao para um modulo espeoifioo.
sn -v ",pub11ckeyfoken
Desabilita a veriicao para todos os mdulos com uma
chave pblica especiica. 0 asterisco () registra todos os
mdulos delayed signed com uma chave correspondente
chave pblica ornecida para pular a veriicao.
Assinar ccm a chave particular para lanamentc. Para completar o processo de assinatura,
0s/onnetsec/|tm|/!|CMC|03.as.
Delay 3igning em Chapter 7 Building 3ecure Montagens em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onnetsec/|tm|/!|CMC|07.as.
Chapter 5 /rchitecture and Design Review or 3ecurity em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onnetsec/|tm|/!|CMC|05.as.
Chapter 21 Code Review em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onnetsec/|tm|/!|CMC|21.as.
Consulte o artigo: 3trong Name 3igning Using 3mart Cards in Lnterprise 3otware Production
Lnvironment em |tt.//www.octnett||s.ccm/^rt|c|es/SNanoSmartCaros.|tm.
r|tar 0eace4er 1eta| 0eal|aaa para 2eaas kestr|tas
Como uma alternativa rpida para resolver os problemas de segurana com aplicaes
parcialmente coniveis, voc pode desejar conceder total coniana para zonas restritas, como a
zona de lnternet ou de lntranet Local. Fazer isso permite que qualquer aplicao seja eecutada
sem veriicaes de segurana do cdigo de acesso, o que, por sua vez, pode se tornar um
problema se a aplicao or de uma onte maliciosa. Lntretanto, se os cenrios de implementao
orem considerados durante a ase de design, voc no dever abrir a segurana para permitir que
aplicaes sejam eecutadas.
85 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
0eseare|rer Ap||caes 1eta|meate 0eal|are|s
Pelo ato de as aplicaes parcialmente coniveis poderem ter pouco acesso aos recursos do
sistema, sua aplicao pode vir a requerer mais permisses do que as originalmente atribuidas por
padro de modo a poder operar adequadamente. /s aplicaes que precisam ser capazes de
eecutar tareas como abrir aplicaes do 0ice ou o Microsot lnternet Lplorer, chamando para o
legado componentes C0M ou azendo gravaes no sistema de arquivo precisam ser eecutadas
com permisses que habilitem eplicitamente essas operaes.
Pode ser tentador atribuir sua aplicao como uma aplicao totalmente conivel de orma que
ela possa ter a concesso de todas as permisses possiveis. Lntretanto, mais seguro desenvolver
e implementar sua aplicao para requerer a quantidade minima de permisses necessrias para
que ela opere apropriadamente. Caso voc realmente precise eecutar sua aplicao como uma
aplicao totalmente conivel, siga as seguintes diretrizes:
ldentiique os tipos de recursos que seu mdulo precisa acessar e avalie as ameaas potenciais
acesso ao cdigo pode restringir o que seu mdulo tem permisso para azer.
Reduza a supericie de ataque utilizando o modiicador de acesso pblico somente para classes
e membros que ormam parte da interace pblica do mdulo. 3empre que possivel, restrinja o
acesso para todas as outras classes e membros utilizando o modiicador de acesso particular ou
protegido.
Use a palavra-chave sealed para evitar a herana de classes que no sejam designadas como
Lecutar operaes que possam levar um longo tempo para serem concluidas
Basic .NLJ para criar uma seo critica, mas tome cuidado ao azer chamadas de mtodo do
interior de uma seo critica para evitar deadlocks.
Use o mtodo Synchrcnized para obter colees .NLJ que sejam seguras para thread.
proteo desnecessria.
Certiique-se de que o estado esttico seja seguro para thread.
Para maiores inormaes sobre tcnicas de proteo e sincronizao, consulte Jhreading Design
0uidelines em .NLJ Framework 0eneral Reerence at |tt.//mson.m|crcsc|t.ccm/||orar,
/oe|a0|t.as?0r|~/||orar,/en-0s/cgenre|/|tm|/cccnt|reao|ngoes|gng0|oe||nes.as
0t|||zaa4e 1|mers
Lm algumas situaes, voc pode no precisar utilizar um thread separado. 3e sua aplicao precisar
eecutar operaes simples, relacionadas a Ul periodicamente, voc deve considerar a opo de utilizar
um process timer. Process timers so utilizados, s vezes, em aplicaes 3mart Client para:
Lecutar operaes em intervalos regulares de tempo.
eecutados.
0 .NLJ Framework ornece trs process timers:
System.Windcw.Fcrms.1imer
System.1imers.1imer
System.1hreading.1imer
remoto.
Lecutar operaes locais de time-consuming que poderia causar o travamento do Ul.
Jransaes distribuidas
Muitos atores determinam o quo rpido um servio de rede responde a solicitao de uma aplicao,
incluindo a natureza da solicitao, latncia da rede, coniabilidade e reqncia de uma coneo, e
quo ocupados esto o servio e o servidor.
00 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Lsta imprevisibilidade pode causar problemas de resposta em aplicaes single-threaded, e os
multithreading so reqentemente uma boa soluo. voc deveria criar um thread separado do Ul para
todas as comunicaes atravs da rede, e ento passe os dados novamente para o Ul thread quando a
resposta or recebida.
Nem sempre necessrio criar threads separados para comunicao de rede. 3e a sua aplicao se
comunica atravs da rede assincrnica, utilizando o Microsot windows Message ueuing (Jambm
conhecido como M3M) por eemplo, ela no espera por uma resposta antes de seguir. No entanto,
mesmo nesse caso, voc ainda deveria usar um thread separado para ouvir e processar a resposta
quando ela chegue.
xecetar 0peraes leca|s
Mesmo em situaes onde o processamento ocorre localmente, algumas operaes podem tomar
tempo suiciente para aetar negativamente a responsividade de sua aplicao. Jais operaes incluem:
lmage rendering
Manipulao de Dados
Data sorting
Busca
voc no deve eecutar operaes como essas no Ul thread porque isso pode causar problemas de
perormance em sua aplicao. Lm vez disso, voc deveria utilizar um thread adicional para eecutar
essas operaes assincrnicamente e prevenir o bloqueio do Ul thread.
Lm muitos casos, voc tambm deveria arquitetar a aplicao para que ela relate o progresso e o
sucesso ou alha das operaes em curso no background. Considere permitir ao usurio o
cancelamento de operaes de background para melhorar a usabilidade.
0|st|age|r tarelas 4e Pr|er|4a4e ar|aate
Nem todas as tareas que a sua aplicao tem que eecutar tero a mesma prioridade. /lgumas
tareas sero criticas, e outras no. Lm outros casos, voc pode descobrir que um thread
dependente dos resultados de processamento de um outro thread.
Crie threads de dierentes propriedades para reletir as prioridades da tarea em eecuo. Por
eemplo, voc deveria usar um thread de alta prioridade para gerenciar tareas time-critical, e um
thread de baia prioridade para eecutar tareas passivas ou tareas que no sejam time-sensitive.
Startep 4a Ap||cae
3ua aplicao requentemente tem que eecutar um nmero de operaes em sua primeira eecuo.
Por eemplo, ela pode precisar inicializar seu estado, restaurar ou atualizar dados e abrir conees para
recursos locais. voc deve considerar o uso de um thread separado para inicializar sua aplicao,
permitindo que o usurio comece a utilizar a aplicao o quanto antes. Utilizar um thread em separado
para a inicializao aumenta a resposta e ushabilidade da sua aplicao.
3e voc eecutar a inicializao em um thread separado, voc deve prevenir o usurio sobre as
operaes iniciais que dependem da completa inicializao, atualizando o menu e barra de erramentas
do Ul quando a inicializao estiver completa. voc tambm deve ornecer eedback claro, que
notiique o usurio sobre os progressos na inicializao.
01 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
0r|aa4e e 0t|||zaa4e 1hrea4s
Listem diversas maneiras de criar e utilizar threads de background no .NLJ Framework. voc pode usar
a classe 1hreadPccl para acessar o pool de threads gerenciados pelo .NLJ Framework para um dado
processo, ou voc pode utilizar a classe 1hread para criar e gerenciar eplicitamente um thread.
/lternativamente, voc pode utilizar objetos delegados ou um proy web service para causar
processamento especiico em um thread no-Ul. Lssa sesso eamina cada um desses dierentes
mtodos e az recomendaes sobre como cada um deles deve ser usado.
0t|||zaa4e a 0|asse 1hrea4Pee|
voc j deve ter percebido que muitas de suas aplicaes se beneiciariam do multithreading. No
entanto, 0 gerenciamento de thread no somente uma questo de criar um novo thread cada vez
que voc queira eecutar uma tarea dierente. Possuir muitos threads pode azer com que uma
aplicao utilize um nmero desnecessrio de recursos do sistema, particularmente se voc tiver um
nmero grande de operaes short-running, todas rodando em threads. L tambm, gerenciar um
nmero grande threads pode ser bastante compleo.
0 thread pooling resolve esses problemas ornecendo a sua aplicao um pool de threads
trabalhadores que so gerenciados por um sistema, permitindo que voc se concentre mais nas tareas
da aplicao do que no gerenciamento dos threads.
Jhreads podem ser adicionados ao thread pool conorme solicitado por uma aplicao. uando o CLR
comea inicialmente, o thread pool no contm threads adicionais. No entanto, conorme sua
aplicao solicita threads, eles so dinamicamente criados e armazenados no pool. 3e os threads no
so utilizados por algum tempo, eles podem ser eliminados, para que o thread pool encolha e cresa
de acordo com as demandas da aplicao.
Nota: L oriado um thread pool por prooesso, ento, se voo exeoutar muitos dominios de aplioao dentro de um
mesmo prooesso, um erro em um dominio de aplioao pode afetar todos os outros dentro de um mesmo
prooesso, ja que eles utilizam o mesmo thread pool.
Um thread pool consiste em dois tipos de threads:
Wcrker threads (1hreads trabalhadcres). 0s worker threads so parte de um pool de sistema
padro. Lles so threads padro gerenciados pelo .NLJ Framework, e a maioria das unes so
eecutadas neles.
Ccmpleticn pcrt threads (1hreads de ccnclusc de pcrta). Lste tipo de thread usado para
No necessite ter controle absoluto sobre o thread utilizado para eecutar uma tarea.
Jenha uma tarea que pode eecutar por muito tempo (e portanto, bloquear outras tareas).
Necessite assegurar que assemblies particulares possam ser acessados por um nico thread.
0 objeto 1hread contm um nmero de propriedades e mtodos que o ajudam a controlar os threads.
voc pode deinir a prioridade de um thread, questionar o estado atual do thread, abortar threads,
bloquear threads temporariamente e eecutar muitas outras tareas de gerenciamento.
0 eemplo de cdigo a seguir demonstra os uso do objeto 1hread para criar e comear um thread.
sfaf1c vo1d Ma1n{}
{
5ysfem.1head1ng.1head Woke1head =
neW 5ysfem.1head1ng.1head{ 5omeDe1egafe }
Woke1head.5faf{}
}
pub11c sfaf1c vo1d 5omeDe1egafe {} {Conso1e.W1feL1ne{ "Do some Wok."
} }
03 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
Neste eemplo, ScmeDelegate um 1hreadStart delegado uma reerncia para o cdigo que ser
eecutado no novo thread. 0 1hread.Start submete uma solicitao ao sistema operacional para
iniciar o thread.
3e voc instanciar um thread dessa maneira, voc no poder passar nenhum argumento para o
1hreadStart delegado. 3e voc precisar passar um argumento para um mtodo para ser eecutado em
outro thread, voc deveria criar um custom delegate com a assinatura do mtodo solicitado e invoc-lo
assincrnicamente.
Para mais inormaes sobre delegados custom, ver "Utilizando Delegados" mais adiante nesse
capitulo.
3e voc precisar receber atualizaes ou resultados de um thread separado, voc pode usar o mtodo
callback um delegado que reerencia o cdigo a ser chamado depois que thread termina seu
trabalho isso permite que os threads interajam com o Ul. Para mais inormaes, ver "Utilizando
Jareas para Manejar lnteraes Lntre o Jhread Ul e 0Utros Jhreads", mais adiante, neste capitulo.
0t|||zaa4e 0e|ega4es
Um delegado uma reerncia (ou um apontador) para um mtodo. uando voc deine um delegado,
voc especiica a assinatura de mtodo que outros mtodos devem utilizar caso queiram representar o
mtodo. Jodos os delegados podem ser invocados tanto sincrnicamente como assincrnicamente.
Lemplo de cdigo a seguir mostra como declarar um delegado. Lste eemplo mostra um clculo long-
running implementado como um mtodo em uma classe.
de1egafe sf1ng LongCa1cu1af1onDe1egafe{ 1nf counf }
3e o .NLJ Framework encontra uma declarao delegada como a anterior, ele implicitamente declara
um classe oculta derivada da classe MultiCastDelegate, como demonstrado no eemplo de cdigo
abaio.
C1ass LongCa1cu1af1onDe1egafe : Muf11casfDe1egafe
{
pub11c sf1ng lnvoke{ counf }
pub11c vo1d 8eg1nlnvoke{ 1nf counf, AsyncCa11back ca11back,
obecf async5fafe }
pub11c sf1ng Lndlnvoke{ lAsynckesu1f esu1f }
}
0 tipo LcngCalculaticnDelegate usado para reerenciar um mtodo que usa um nico parmetro
integer e retorna uma cadeia. 0 eemplo de cdigo a seguir ilustra um delegado desse tipo que
reerencia um mtodo especiico com a assinatura relevante.
LongCa1cu1af1onDe1egafe 1ongCa1cDe1egafe =
neW LongCa1cu1af1onDe1egafe{ ca1cu1af1onMefhod }
No eemplo, calculaticnMethcd o nome do mtodo que implementa o clculo que voc deseja
eecutar em um thread separado.
voc pode invocar o mtodo reerenciado pela instncia delegada, tanto sincrnicamente como
assincrnicamente. Para invocar-lo sincrnicamente, utilize o seguinte cdigo:
sf1ng esu1f = 1ongCa1cDe1egafe{ 10000 }
04 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Lsse cdigo utiliza internamente o mtodo Invcke deinido no tipo delegado acima.
Devido ao ato de o mtodo Invcke tratar-se de um chamado sincrnico, esse mtodo retorna
somente aps o retorno do mtodo invocado. 0 valor de retorno o resultado do mtodo
invocado.
Mais requentemente, para prevenir o bloqueio do chamado de threads, voc escolher invocar o
delegado assincrnicamente, usando os mtodos eginInvcke e EndInvcke. Delegados
assincrnicos utilizam a capacidade de pooling dos threads do .NLJ Framework para
gerenciamento de threads. 0 padro C|amaoc ^ss|ncrn|cc (/synchronous Call) implementado
pelo .NLJ Framework oerece o mtodo eginInvcke para iniciar a operao solicitada em um
thread, e ornece o mtodo EndInvcke para permitir operaes assincrnicas sejam completadas
e qualquer dado resultante se repassado ao thread chamado. Depois que se completa o
processamento de background, voc pode invocar um mtodo de callback, dentro do qual voc
pode chamar um EndInvcke para restaurar o resultado da operao assincrnica.
uando voc chama o mtodo eginInvcke, ele no espera que se complete o chamado; em vez
disso, ele retorna um objeto IAsyncResult imediatamente, o que pode ser usado para monitorar o
progresso de um chamado. voc pode utilizar o WaitHandle, membro do objeto IasyncResult,
para esperar que o chamado assincrnico se complete ou usar o nmero IsCcmplete para
concluso. 3e voc chamar o mtodo EndInvcke antes de o chamado estar completo, ele
bloquear e retornar somente depois de completado chamado. No entanto, voc deve ser
cuidadoso para no utilizar essas tcnicas para esperar pela concluso de um chamado, porque
elas devem bloquear o Ul thread. Lm geral, o mecanismo de callback a melhor maneira de ser
notiicado sobre a concluso de um chamado.
Para executar um mtcdc referenciadc pcr um delegadc assincrnicamente
1. Deina um delegado que represente uma operao long-running assincrnica, Como mostrado
no eemplo a seguir:
de1egafe sf1ng LongCa1cu1af1onDe1egafe{ 1nf counf }
2. Deina um mtodo que combine com a assinatura delegada. 0 eemplo de mtodo a seguir
simula uma operao time-consuming colocando o thread em modo de espera por milsimos de
segundo antes de retornar.
p1vafe sf1ng LongCa1cu1af1on{ 1nf counf }
{
1head.51eep{ counf }
efun counf.1o5f1ng{}
}
3. Deina um mtodo de callback que responda ao /syncCallback delegado deinido pelo .NLJ
Framework, como mostrado no eemplo a seguir.
p1vafe vo1d Ca11backMefhod{ lAsynckesu1f a }
{
// kef1eve fhe 1nvok1ng de1egafe.
LongCa1cu1af1onDe1egafe d1gf =
{LongCa1cu1af1onDe1egafe}a.Async5fafe
// Ca11 Lndlnvoke fo ef1eve fhe esu1fs.
sf1ng esu1fs = d1gf.Lndlnvoke{a}
}
05 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
4. Crie uma instncia de um delegado que reerencie o mtodo que voc deseja chamar
assincrnicamente e crie um AsyncCallback delegado que reerencie o mtodo de callback, como
mostrado no eemplo de cdigo a seguir.
LongCa1cu1af1onDe1egafe 1ongCa1cDe1egafe =
neW LongCa1cu1af1onDe1egafe{ ca1cu1af1onMefhod }
AsyncCa11back ca11back = neW AsyncCa11back{ Ca11backMefhod }
5. / partir do thread chamado, inicie o chamado assincrnico chamando o mtodo eginInvcke no
delegado que reerencia o cdigo que voc deseja eecutar assincrnicamente.
1ongCa1cDe1egafe.8eg1nlnvoke{ counf, ca11back, 1ongCa1cDe1egafe }
0 mtodo LcngCalculaticn chamado em um worker thread. uando completo, o mtodo
CallbackMethcd chamado, e os resultados dos clculos restaurados.
Nota: 0 mtodo de oallbaok method exeoutado em um thread no-ul. Para modifioar o ul, voo preoisa usar
tonioas para mudar deste thread para um ul thread. Para mais informaes, ver utilizando tarefas para Manejar
lnteraes Lntre o ul 1hread e 0utros 1hreads" , mais adiante, nesse oapitulo.
voc pode usar delegados padro para passar parmetros arbitrrios a um mtodo a ser eecutado em
um thread separado (algo que voc no pode azer quando cria threads diretamente, usando o objeto
1hread ou um thread pool).
lnvocar delegados assincrnicamente particularmente til quando voc necessita invocar operaes
long-running no Ul da aplicao. 3e os usurios eecutarem uma operao no Ul do qual espera-se
que leve muito tempo para ser completada, voc no desejar que o Ul congele e no possa atualizar-
se. Usando um delegado assincrnico, voc pode retornar controle ao seu principal Ul thread para
eecutar essas operaes.
voc deve usar um delegado para invocar um mtodo assincrnicamente quando:
voc precisa passar parmetros arbitrrios para um mtodo que voc queira eecutar
assincrnicamente.
voc quer utilizar um padro de C|amaoc ^ss|ncrn|cc (/synchronous Call) ornecido pelo .NLJ
Framework.
Nota: Para mais detalhes sobre oomo utilizar Beginlnvoke e Lndlnvoke para exeoutar ohamados assinornioos, ver
Asynohronous Programming 0verview" no the .NL1 lramework Ueveloper's 0uide em hrrp.mson.m|orosofr.oom
||brar,oefau|r.asp7ur|=||brar,en-usopgu|oehrm| opovras,nohronousprogramm|ngoverv|ew.asp.
0hamaa4e weh Serr|ces Ass|acra|cameate
Aplioaes frequentemente oomunioam-se oom os reoursos de rede utilizando web servioes. Lm geral,
voo no deveria ohamar um web servioe sinornioamente a partir de um ul thread, porque o tempo de
resposta de um web servioe varia muito, oomo tambm todos os tempos de resposta em todas as
interaes pela rede. Lm vez disso, voo deve ohamar todos os web servioes assinornioamente a partir
do oliente.
Para ver oomo ohamar web servioes assinornioamente, oonsidere o seguinte web servioe simples, que
permaneoe inativo por um periodo de tempo e ento retorna um string indioando a oonoluso da
operao.
|WebMefhod]
pub11c sf1ng kefunMessageAffeDe1ay{ 1nf de1ay }
{
5ysfem.1head1ng.1head.51eep{de1ay}
efun "Message kece1ved"
}
00 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
uando voc reerencia um web service no sistema de desenvolvimento Microsot visual 3tudio .NLJ,
ele automaticamente gera um proy. Um proy uma classe que permite invocar seus web services
assincrnicamente utilizando o padro /synchronous Call implementado pelo .NLJ Framework. 3e voc
eaminar o proy gerado, voc ver os trs seguintes mtodos.
pub11c sf1ng kefunMessageAffeDe1ay{ 1nf de1ay }
{
obecf|] esu1fs = fh1s.lnvoke{ "kefunMessageAffeDe1ay",
neW obecf|] {de1ay}}
efun {{sf1ng}{esu1fs|0]}}
}
pub11c 5ysfem.lAsynckesu1f 8eg1nkefunMessageAffeDe1ay{ 1nf de1ay,
5ysfem.AsyncCa11back ca11back, obecf async5fafe }
{
efun fh1s.8eg1nlnvoke{ "kefunMessageAffeDe1ay",
neW obecf|] {de1ay}, ca11back, async5fafe }
}
pub11c sf1ng LndkefunMessageAffeDe1ay{ 5ysfem.lAsynckesu1f
asynckesu1f }
{
obecf|] esu1fs = fh1s.Lndlnvoke{ asynckesu1f }
efun {{sf1ng}{esu1fs|0]}}
}
0 primeiro mtodo o sincrnico, para invocar o web service. 0 segundo e o terceiro mtodo tratam-
se de mtodos assincrnicos. voc pode chamar web service assincrnicamente conorme abaio.
p1vafe vo1d Ca11Web5ev1ce{}
{
1oca1hosf.Longkunn1ng5ev1ce sev1cePoxy =
neW 1oca1hosf.Longkunn1ng5ev1ce{}
AsyncCa11back ca11back = neW AsyncCa11back{ Comp1efed }
sev1cePoxy.8eg1nkefunMessageAffeDe1ay{ ca11back, sev1cePoxy,
nu11 }
}
Lste eemplo bastante similar ao eemplo de callback assincrnico usando um delegado padro.
voc deine um objeto AsyncCallback com um mtodo que ser invocado quando o web service
retorne. voc invoca um web service assincrnico com um mtodo que especiique o callback e o
prprio proy, como mostrado no eemplo de cdigo a seguir.
vo1d Comp1efed{ lAsynckesu1f a }
{
1oca1hosf.Longkunn1ng5ev1ce sev1cePoxy =
{1oca1hosf.Longkunn1ng5ev1ce}a.Async5fafe
sf1ng message = sev1cePoxy.LndkefunMessageAffeDe1ay{ a }
}
0T 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
uando o web service se completa, o mtodo de callback completo chamado. voc pode ento
restaurar seus resultados assincrnicos chamando o EndReturnMessageAfterDelay no proy.
0t|||zaa4e 1arelas para Maa|pe|ar lateraes atre e 0l 1hrea4 e
0etres 1hrea4s
Um dos aspectos mais desaiadores da arquitetura de aplicaes multi-threaded a manipulao das
relaes entre o Ul thread e outros threads. L critico que os threads de background que voc utiliza em
sua aplicao no interajam diretamente com a aplicaoUl. 3e um thread de background tenta
modiicar um controle no Ul de sua aplicao, o controle pode ser deiado em um estado
desconhecido. lsso pode causar grandes problemas de diicil diagnstico em sua aplicao. Por
eemplo, um bitmap gerado dinamicamente pode estar impossibilitado de ser utilizado, enquanto outro
thread estiver alimentando-o com novos dados. 0u, um componente vinculado a um dateset pode
mostrar inormao conlitiva enquanto o dataset atualizado.
Para evitar esses problemas, voc nunca deve permitir que outros threads, que no o Ul thread, aam
modiicaes nos controles Ul, ou em objetos de dados vinculados ao Ul. voc deve sempre tentar, e
manter, uma separao estrita entre o cdigo Ul e os cdigos de processamento de background.
3eparar o Ul thread de outros threads uma boa prtica, mas voc ainda precisa passar inormaes
continuamente entre os threads. 3ua aplicao multi-threaded precisar tipicamente ser capaz de:
0bter os resultados de um thread de background e atualizar o Ul.
Controlar os threads de background a partir do Ul, por eemplo, deiando que o usurio cancele o
processamento de background.
Um modo eetivo de separar o cdigo Ul que maneja os threads de background estruturar sua
aplicao em tareas, e representar cada tarea usando um objeto que condense todos os detalhes das
tareas.
Uma tarea uma unidade de trabalho que usurio espera ser capar de eecutar dentro da aplicao.
Lm um conteto de multithreading, o objeto 1ask condensa todos os detalhes dos threads para que
eles estejam claramente separados do Ul.
Utilizando o padro !as|, voc pode simpliicar o seu cdigo quando estiver usando threads mltiplos.
0 padro !as|. Claramente separa o cdigo de gerenciamento do thread do cdigo do Ul. 0 Ul utiliza
propriedades e mtodos ornecidos pelo objeto 1ask para eecutar aes como comear e interromper
tareas, e questionar seu status. 0 objeto 1ask tambm pode oerecer um nmero de eventos,
permitindo que a inormao de status seja devolvida ao Ul.
Jodos esses eventos deveriam ser eecutados no Ul thread para que o Ul no precise ter conhecimento
do thread de background. voc pode simpliicar substancialmente as interaes dos threads usando o
objeto 1ask que responsvel pelo controle e gerenciamento dos threads de background mas eecuta
eventos que podem ser consumidos pelo Ul e garantir que estejam no Ul thread. 0bjetos 1ask podem
ser reutilizados em vrias partes da aplicao, ou at mesmo em outras aplicaes.
/ Figura 6.1 ilustra a estrutura geral do cdigo quando voc utilizar o padro !as|.
08 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0b[eto 1ask/
5ervce Agent
Ap|cao Interface de Usuro
ul 1hread
Lstado da 1arefa
1hread da 1arefa
Chamados de
Propriedade e Mtodos
Lventos
(Lxeoutado no
ul 1hread)
f|gera 0.1
Fsrrurura oo 0oo|go ur|||zanoo o paoro 1ask
Nota: 0 padro 1ask r usado para exeoutar tarefas de prooessamentos de baokground looais em um thread
separado ou interagir oom um servio remoto atravs da rede assinornioamente. Lm ultimo oaso, o objeto 1ask
frequentemente ohamado de agente de servio. um agente de servio pode usar o mesmo padro oomo um objeto
1ask e suporta propriedades e eventos que faam sua interao oom o ul mais faoil.
Devido ao ato de o objeto 1ask condensar o estado de uma tarea, use-o para atualizar o Ul. Para
isso, voc pode ter o objeto 1ask eecutando eventos PrcpertyChanged para o Ul thread principal,
sempre que ocorrer uma mudana. Lsses eventos produzem uma maneira consistente de comunicar as
mudanas de valor de propriedade.
Use tareas para inormar o Ul thread principal a respeito do progresso ou outras mudanas de estado.
Por eemplo, quando uma tarea torna-se disponivel, conigure sua lag de permisso, que pode ser
usada para permitir os itens de menu correspondentes e os botes da barra de erramentas. Lm
sentindo inverso, quando uma tarea torna-se indisponivel (por eemplo, por estar em progresso),
conigure sua lag de permisso para also, o que az com que o manipulador do evento no Ul thread
principal desabilite os itens corretos do menu e os botes da barra de erramentas.
voc tambm pode usar tareas para atualizar objetos de dados vinculados ao Ul. voc deve assegurar
que quaisquer objetos de dados vinculados aos controles do Ul sejam atualizados no Ul thread. Por
eemplo, se voc vincula um objeto DataSet ao Ul e restaura inormaes atualizadas de um web
service, utilize os novos dados para seu cdigo Ul. 0 cdigo Ul ento az a uso dos novos dados no
DataSet vinculado no Ul thread.
voc pode usar um objeto 1ask para implementar processamentos de background e controle lgico de
threading. Como o objeto 1ask condensa o estado e dados necessrios, ele coordena o trabalho
necessrio para eecutar a tarea em um ou mais threads e comunicar mudanas e notiicaes ao Ul
da aplicao conorme solicitado. Jodo travamento e sincronizao necessrios podem ser
implementados e condensados no objeto 1ask, para que o Ul thread no tenha que lidar com esses
assuntos.
0el|a|a4e ema 1ask 0|ass
0 eemplo de cdigo a seguir mostra uma deinio de classe para uma tarea que gerencia um clculo
longo.
Nota: Apesar de este exemplo ser simples, ele pode ser faoilmente estendido para suportar tarefas de baokgournd
oomplexas integradas ao ul da aplioao.
00 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
pub11c c1ass Ca1cu1af1on1ask
{
// C1ass Membes.
pub11c Ca1cu1af1on1ask{}
pub11c vo1d 5fafCa1cu1af1on{ 1nf counf }
pub11c vo1d 5fopCa1cu1af1on{}
p1vafe vo1d I1e5fafusChangedLvenf{ Ca1cu1af1on5fafus sfafus }
p1vafe vo1d I1ePogessChangedLvenf{ 1nf pogess }
p1vafe sf1ng Ca1cu1afe{ 1nf counf }
p1vafe vo1d LndCa1cu1afe{ lAsynckesu1f a }
}
/ classe Calculaticn1ask deine um construtor padro e dois mtodos pblicos para comear e
interromper o clculo. Lle tambm deine helper methods que ajudam o objeto 1ask a eecutar
eventos no Ul. 0 mtodo Calculate implementa o clculo lgico e roda em um thread de background.
0 mtodo EndCalculate implementa o mtodo de callback, que chamado aps a concluso do
thread de clculo de background.
0s membros da classe so os seguintes:
p1vafe Ca1cu1af1on5fafus ca1c5fafe
p1vafe de1egafe sf1ng Ca1cu1af1onDe1egafe{ 1nf counf }
pub11c de1egafe vo1d Ca1cu1af1on5fafusLvenfhand1e{
obecf sende, Ca1cu1af1onLvenfAgs e }
pub11c de1egafe vo1d Ca1cu1af1onPogessLvenfhand1e{
obecf sende, Ca1cu1af1onLvenfAgs e }
pub11c evenf Ca1cu1af1on5fafusLvenfhand1e Ca1cu1af1on5fafusChanged
pub11c evenf Ca1cu1af1onPogessLvenfhand1e
Ca1cu1af1onPogessChanged
0 membro CalculaticnStatus uma enumerao que deine os trs estados em que o clculo pode
estar a qualquer momento.
pub11c enum Ca1cu1af1on5fafus
{
NofCa1cu1af1ng,
Ca1cu1af1ng,
Cance1Pend1ng
}
/ classe 1ask oerece dois eventos: um que inorma o Ul a respeito dos eventos de status do clculo, e
outro para inormar o Ul dos progressos do clculo. /s assinaturas delegadas so deinidas, assim
como os prprios eventos. 0s dois eventos so eecutados no |e|er met|cos. Lsses mtodos
checam o tipo de alvo; se o tipo de alvo or derivado de uma classe Ccntrcl, eles eecutam os eventos
usando o mtodo Invcke na classe de controle. Portanto, para consumidor de eventos Ul, o evento
garantido para ser chamado no Ul thread. 0 eemplo a seguir mostra o cdigo para eecuo do
evento.
100 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
p1vafe vo1d I1e5fafusChangedLvenf{ Ca1cu1af1on5fafus sfafus }
{
1f{ Ca1cu1af1on5fafusChanged != nu11 }
{
Ca1cu1af1onLvenfAgs ags = neW Ca1cu1af1onLvenfAgs{ sfafus }
1f { Ca1cu1af1on5fafusChanged.1agef 1s
5ysfem.W1ndoWs.Ioms.Confo1 }
{
Confo1 fagefIom = Ca1cu1af1on5fafusChanged.1agef
as 5ysfem.W1ndoWs.Ioms.Confo1
fagefIom.lnvoke{ Ca1cu1af1on5fafusChanged,
neW obecf|] {fh1s, ags }}
}
e1se
{
Ca1cu1af1on5fafusChanged{ fh1s, ags }
}
}
}
Lste cdigo checa primeiramente se algum consumidor de eventos oi registrado, e caso tenha sido
registrado, veriica o tipo de alvo. 3e o tipo de alvo derivado da classe Ccntrcl, o evento eecutado
utilizando o mtodo Invcke para assegurar que seja processado no Ul thread. 3e o tipo do alvo no or
derivado da classe Ccntrcl, o evento eecutado normalmente. Lventos so eecutados da mesma
maneira para relatar progresso de clculo ao Ul no mtodo FirePrcgressChangedEvent, como
mostrado no eemplo a seguir.
p1vafe vo1d I1ePogessChangedLvenf{ 1nf pogess }
{
1f{ Ca1cu1af1onPogessChanged != nu11 }
{
Ca1cu1af1onLvenfAgs ags =
neW Ca1cu1af1onLvenfAgs{ pogess }
1f { Ca1cu1af1on5fafusChanged.1agef 1s
5ysfem.W1ndoWs.Ioms.Confo1 }
{
Confo1 fagefIom = Ca1cu1af1on5fafusChanged.1agef
as 5ysfem.W1ndoWs.Ioms.Confo1
fagefIom.lnvoke{ Ca1cu1af1onPogessChanged,
neW obecf|] {fh1s, ags }}
}
e1se
{
Ca1cu1af1onPogessChanged{ fh1s, ags }
}
}
}
101 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
/ classe CalculaticnEventArgs deine os argumentos do evento, para ambos eventos, e contm o
stutus do clculo e parmetros de progresso, para que possam ser enviados ao Ul. / classe
CalculaticnEventArgs deinida a seguir.
pub11c c1ass Ca1cu1af1onLvenfAgs : LvenfAgs
{
pub11c sf1ng kesu1f
pub11c 1nf Pogess
pub11c Ca1cu1af1on5fafus 5fafus
pub11c Ca1cu1af1onLvenfAgs{ 1nf pogess }
{
fh1s.Pogess = pogess
fh1s.5fafus = Ca1cu1af1on5fafus.Ca1cu1af1ng
}
pub11c Ca1cu1af1onLvenfAgs{ Ca1cu1af1on5fafus sfafus }
{
fh1s.5fafus = sfafus
}
}
0 mtodo StartCalculaticn responsvel pela inicializao do clculo no thread de background. 0
CalculaticnDelegate permite que o mtodo Calculaticn seja invocado em um thread de background
utilizando o padro Delegate /synchronous Call como mostrado no eemplo a seguir.
pub11c vo1d 5fafCa1cu1af1on{ 1nf counf }
{
1ock{ fh1s }
{
1f{ ca1c5fafe == Ca1cu1af1on5fafus.NofCa1cu1af1ng }
{
// Ceafe a de1egafe fo fhe ca1cu1af1on mefhod.
Ca1cu1af1onDe1egafe ca1c =
neW Ca1cu1af1onDe1egafe{ Ca1cu1af1on }
// 5faf fhe ca1cu1af1on.
ca1c.8eg1nlnvoke{ counf,
neW AsyncCa11back{ LndCa1cu1afe }, ca1c }
// updafe fhe ca1cu1af1on sfafus.
ca1c5fafe = Ca1cu1af1on5fafus.Ca1cu1af1ng
// I1e a sfafus changed evenf.
I1e5fafusChangedLvenf{ ca1c5fafe }
}
}
}
102 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0 mtodo StcpCalculaticn responsvel pelo cancelamento do clculo, como mostrado no seguinte
eemplo.
pub11c vo1d 5fopCa1cu1af1on{}
{
1ock{ fh1s }
{
1f{ ca1c5fafe == Ca1cu1af1on5fafus.Ca1cu1af1ng }
{
// updafe fhe ca1cu1af1on sfafus.
ca1c5fafe = Ca1cu1af1on5fafus.Cance1Pend1ng
// I1e a sfafus changed evenf.
I1e5fafusChangedLvenf{ ca1c5fafe }
}
}
}
uando o StcpCalculaticn chamado, o estado do clculo conigurado para CancelPending, para
sinalizar ao background que pare o clculo. Um evento eecutado para o Ul para sinalizar que a
solicitao de cancelamento oi recebida.
/mbos os mtodos usam a palavra chave lcck para assegurar que as mudanas no estado varivel do
clculo so atmicas, para que sua aplicao no se depare com uma race condition. 0s dois mtodos
eecutam um evento com status modiicado para inormar ao Ul que o clculo est iniciando ou
interrompendo.
0 mtodo de clculo deinido como segue.
p1vafe sf1ng Ca1cu1af1on{ 1nf counf }
{
sf1ng esu1f = ""
fo { 1nf 1 = 0 1 < counf 1++ }
{
// Long ca1cu1af1on.
// Check fo cance1.
1f { ca1c5fafe == Ca1cu1af1on5fafus.Cance1Pend1ng } beak
// updafe Pogess
I1ePogessChangedLvenf{ counf, 1 }
}
efun esu1f
}
103 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
Nota: Por questes de olareza, os detalhes do oaloulo foram omitidos.
Uma vez que cada passagem eita atravs de um loop, o membro de estado de clculo veriicado
para ver se o usurio cancelou o clculo. 3e sim, o loop abandonado, completando o mtodo de
clculo. 3e o clculo segue, um evento eecutando, utilizando o method helper
FirePrcgressChanged, para relatar o progresso ao Ul.
Depois de completo o clculo, o mtodo EndCalculate chamado para termonar o chamado
assincrnico atravs do EndInvcke, como mostrado no eemplo a seguir.
p1vafe vo1d LndCa1cu1afe{ lAsynckesu1f a }
{
Ca1cu1af1onDe1egafe de1 = {Ca1cu1af1onDe1egafe}a.Async5fafe
sf1ng esu1f = de1.Lndlnvoke{ a }
1ock{ fh1s }
{
ca1c5fafe = Ca1cu1af1on5fafus.NofCa1cu1af1ng
I1e5fafusChangedLvenf{ ca1c5fafe }
}
}
EndCalculate reconigura o estado do clculo para NctCalculating, pronto para que se inicie o
primo clculo. Lle tambm eecuta um evento de estado modiicado para que o Ul possa ser
notiicado de que o clculo oi concluido.
0t|||zaa4e ema 1ask 0|ass
/ classe Jask responsvel pelo gerenciamento dos threads de background. Para usar a classe Jask,
tudo o que voc tem a azer criar um objeto Jask, registrar os eventos que ele eecute e implementar
a manipulao desses eventos. Como os eventos so eecutados no Ul thread, voc no precisa
preocupar-se de qualquer assunto de threading em seu cdigo. 0 eemplo a seguir mostra um objeto
Jask sendo criado. Neste eemplo, o Ul tem dois botes, uma para iniciar o clculo e outro para
interromper, e uma barra de progresso que mostra os progressos atuais de clculo.
// Ceafe neW fask obecf fo manage fhe ca1cu1af1on.
ca1cu1af1on1ask = neW Ca1cu1af1on1ask{}
// 5ubsc1be fo fhe ca1cu1af1on sfafus evenf.
ca1cu1af1on1ask.Ca1cu1af1on5fafusChanged += neW
Ca1cu1af1on1ask.Ca1cu1af1on5fafusLvenfhand1e{
OnCa1cu1af1on5fafusChanged }
// 5ubsc1be fo fhe ca1cu1af1on pogess evenf.
ca1cu1af1on1ask.Ca1cu1af1onPogessChanged += neW
Ca1cu1af1on1ask.Ca1cu1af1onPogessLvenfhand1e{
OnCa1cu1af1onPogessChanged }
0 manipulador do evento para o status e progressos de clculo atualiza o Ul apropriadamente, por
eemplo, atualizando uma barra de controle de status.
104 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
p1vafe vo1d Ca1cu1af1onPogessChanged{ obecf sende,
Ca1cu1af1onLvenfAgs e }
{
pogess8a.va1ue = e.Pogess
}
0 manipulador do evento CalculaticnStatusChanged, que mostrado no cdigo a seguir, atualiza o
valor de uma barra de progresso para reletir o progresso atual do clculo. Presume-se que os valores
minimos e mimos da barra de progressos j oram inicializados.
p1vafe vo1d Ca1cu1af1on5fafusChanged{ obecf sende,
Ca1cu1af1onLvenfAgs e }
{
sW1fch { e.5fafus }
{
case Ca1cu1af1on5fafus.Ca1cu1af1ng:
buffon1.Lnab1ed = fa1se
buffon2.Lnab1ed = fue
beak
case Ca1cu1af1on5fafus.NofCa1cu1af1ng:
buffon1.Lnab1ed = fue
buffon2.Lnab1ed = fa1se
beak
case Ca1cu1af1on5fafus.Cance1Pend1ng:
buffon1.Lnab1ed = fa1se
buffon2.Lnab1ed = fa1se
beak
}
}
Nesse eemplo, o manipulador do evento CalculaticnStatusChanged habilita e desabilita os botes
de comear e interromper dependendo do status do clculo. lsso previne que o usurio tente comear
um clculo que j est em progresso e oerece eedback ao usurio sobre o status do clculo.
0 Ul implementa manipuladores de evento para cada clique no boto comear e interromper clculo
usando os mtodos pblicos no objeto 1ask. Por eemplo, um manipulador de evento do boto
comear chama o mtodo StartCalculaticn como segue.
p1vafe vo1d sfaf8uffonC11ck{ obecf sende, 5ysfem.LvenfAgs e }
{
ca1cu1af1on1ask.5fafCa1cu1af1on{ 1000 }
}
3imilar, uma boto de parada de clculo, inaliza o clculo atravs da chamada de mtodo
StcpCalculaticn conorme a seguir.
105 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
p1vafe vo1d sfop8uffonC11ck{ obecf sende, 5ysfem.LvenfAgs e }
{
ca1cu1af1on1ask.5fopCa1cu1af1on{}
}
Semar|e
Multithreading uma parte importante na criao de aplicaes 3mart Client responsivas. voc deve
eaminar onde threads mltiplos so apropriados para sua aplicao, buscando conduzir todo
processamento que no involve o Ui diretamente em threads separados. Na maioria dos casos, voc
pode usar a classe 1hreadPccl para criar threads. No entanto, em alguns casos voc ter que utilizar a
classe 1hread e em outros voc precisar utilizar objetos delegados ou um proy web service para
causar um processamento especiico que ocorra num thread no-Ul.
Lm aplicaes multi-threaded, voc deve assegurar que o Ul thread seja responsvel por todas as
tareas relacionadas ao Ul, e que voc gerencia a comunicao entre o Ul thread e outros threads
eetivamente. 0 padro !as| pode ajudar a simpliicar essa interao.
100 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
T
lmp|aataa4e e Atea||zaa4e Ap||caes
Smart 0||eat
/plicaes 3mart Client eecutam processamento local nos computadores do cliente, necessitando ser
implementadas nesses computadores. No passado, a implementao, atualizao, manuteno e
instalao de aplicaes over time nos computadores do cliente era diicil e problemtica. Com o C0M,
muitos problemas tornaram-no diicil de implementar no computador do cliente, incluindo:
Aplicaes que fcram tightly ccupled ccm c registrc. lnstalar uma aplicao C0M requeria o
descreve (entre outras coisas) inormao de verses, tipos, recursos e detalhes de todos os
assemblies reerenciados. lsso signiica que eles no dependem do registro.
Versicnamentc e supcrte ladc a ladc. 0 .NLJ Framework possui suporte etensivo para
versionamento, permitindo que voc instale mltiplas verses de uma aplicao e mltiplas verses
do .NLJ Framework, para que eles possam rodar lado a lado.
Aplicaes iscladas. 0s assemblies .NLJ Framework podem ser implementados no diretrio de
aplicao, para uso dessa aplicao especiica, e como padro so mantidos, isolados de outras
aplicaes. lsso signiica que os assemblies no precisam ser aplicados no diretrio do windows ou
eplicitamente registrados no registro, e reduz a probabilidade que sejam substituidos ou deletados
durante a instalao de outras aplicaes.
Cache de assembly glcbal. 3e voc quiser compartilhar cdigos entre dierentes aplicaes no
mesmo computador, voc pode implementar componentes ao cache de assembly global. 0 cache
de assembly global permite que dierentes verses de mesmo assembly co-eistam. /o reerenciar
assemblies no cache de assembly global, voc deve especiicar o nome qualiicado completo do
assembly que inclui o key token pblico e nmero de verso. lsso ajuda a prevenir o uso no
intencional de uma verso ou componente dierente.
Vinculac run-time padrc em ccntra de assemblies build-time para assemblies strcng-
named. Pelo padro, se um assembly strong named, o .NLJ Framework vincula a eata versa de
seus assemblies dependentes. lsso reduz a ragilidade da aplicao porque o .NLJ Framework
carrega as verses eatas as dos assemblies onde oi construido e testado contra. Lsse
comportamento pode ser eplicitamente anulado se solicitado.
1untas, estas mudanas ajudam a enderear uma quantidade de caracteristicas que segmentaram a
distribuio e manuteno de aplicaes rich clients legadas. Para mais inormaes sobre como o
.NLJ Framework simplica a distribuio, em "3impliying Deployment and 3olving DLL Hell with the
.NLJ Framework" No link |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onoctnet/|tm|
/o|,w|t|net.as.
Lste capitulo descreve as opes de implementao do prprio .NLJ Framework, e ento eamina
como implementar aplicaes 3mart Client baseados no .NLJ Framework. H um nmero de opes
para implementao de suas aplicaes, e cada uma discutida, seguido de uma discusso para
seleo do mtodo mais apropriado para seu ambiente. Finalmente as opes para implementao de
atualizaes para a aplicao so eaminadas em alguns detalhes.
lmp|emeataa4e e .N1 framewerk
/ aplicao 3mart Client .NLJ contam com o .NLJ Framework para uncionar e portanto necessitam
que ele seja aplicado no computador do cliente. 0 .NLJ Framework implementado utilizando o .NLJ
Framework Redistributable Package, que pode ser obtido do Microsot M3DN ou do windows Update
web site.
voc tambm pode obter o redistributable package a partir do CD ou DvD de um produto. 0 pacote
est disponivel no .NLJ Framework 3DK, and no DvD Microsot visual 3tudio .NLJ 2003.
0 .NLJ Framework Redistributable Package na verdade um pacote windows lnstaller que est envolto
em um nico arquivo eecutvel auto-removivel chamado Dotnet.ee. 0 arquivo eecutvel
Dotnet.ee inicia o lnstall.ee, que eecuta veriicaes na plataorma, instala a verso 2.0 do
windows lnstaller se necessrio, e ento inicia o pacote windows lnstaller(.msi ile).
Para mais inormaes sobre o uso do Dotnet.ee, ver ".NLJ Framework Redistributable Package 1.1
Jechnical Reerence" em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onnetoe/|tm|/octnet|re|1_1.as.
Pre-|asta|ae 4e .N1 framewerk
Hoje, muitas empresas escolhem implementar o .NLJ Framework como parte de seu ambiente
operacional padro. voc pode implementar o .NLJ Framework em sua empresa de duas maneiras:
Use tecnclcgias para incentivar c usc dc scftware nc ccmputadcr dc cliente, como a
windows Update, ou azendo o download do .NLJ Framework de uma rede compartilhada, um web
site interno, ou do Microsot web site. Usurios inais precisaro ter privilgios administrativos em
seus computadores para implementar o .NLJ Framework j que o setup do .NLJ Framework
Redistributable Package requer privilgios administrativos para ser instalado.
lasta|aa4e e .N1 framewerk cem ema Ap||cae
Nos casos onde voc no pode determinar que computadores possuem o .NLJ Framework pr-
instalado, voc pode optar por instalar o .NLJ Framework somente quando necessrio em outras
palavras, quando uma aplicao .NLJ Framework instalada. Lsta abordagem particularmente til
quando voc no sabe as coniguraes eatas do sotware dos computadores que sero
implementados, e no sabe se o .NLJ Framework est pr-instalado ou no. Por eemplo, se voc
um vendedor de sotware independente (l3v) desenvolvendo sua aplicao 3mart Cliente para venda
dentro de uma larga variedade de consumidores, voc pode no saber se os seus consumidores tm
instalado ou no o .NLJ Framework.
Para assegurar que o .NLJ Framework est instalado em sua aplicao, voc pode usar a amostra
Bootstrapper setup.ee. Lssa amostra veriica se o .NLJ Framework j oi instalado, e se no, a
amostra instala o .NLJ Framework antes de instalar a aplicao.
Para mais inormaes sobre o uso da amostra Bootstrapper setup.ee, ver Capitulo 3 do Deploying
.NLJ Framework-based /pplications em |tt.//www.m|crcsc|t.ccm/ocwn|caos
/oeta||s.as?|am||,|o~5B7C6E2D-D03|-4B19-9025-6B87E6^E0D^6&o|s|a,|ang~en.
lmp|emeataa4e Ap||caes Smart 0||eat
Durante a arquitetura de suas aplicaes 3mart Client, voc deveria considerar a maneira como essas
aplicaes sero implementadas. 3empre que possivel voc deve tentar minimizar o impacto no
sistema de qualquer instalao. Lsse procedimento permite que voc tenha mais controle sobre
qualquer mudana na aplicao e resolve problemas de atualizao e desinstalao de aplicaes. No
entanto, algumas vezes voc precisar eecutar instalaes mais compleas, por eemplo quando voc
est reutilizando cdigo de componentes no gerenciados, ou quando voc precisa armazenar dados
sensiveis de modo seguro no registro.
Um grande nmero de opes est disponivel para sua implementao de aplicaes 3mart Client.
Llas incluem:
Implementac Nc-tcuch. Com essa abordagem, voc copia os arquivos em um web server, e o
uma implementao no-touch para azer o download de uma aplicao stub, que ento ar o
download do restante da aplicao no disco local.
Execuc de cdigc de um arquivc ccmpartilhadc. Com essa abordagem, voc copia o arquivo
permite que a aplicao e todos os seus assemblies dependentes localizem-se em uma nica
estrutura de diretrio, e ento voc no precisa registrar nada no cliente.
100 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
Pacctes Windcws Installer. Com essa abordagem, voc agrupa os arquivos de sua aplicao em
Instalaes nc transacicnadas
Nota: A teonologia Cliok0noe na verso 2.0 do .NL1 lramework removera a neoessidade para fazer manualmente
as mudanas na politioa de segurana para o oliente antes que a aplioao esteja instalada e rodando. A
Cliok0noe ofereoera um meoanismo oonfiguravel para permitir que sejam feitas mudanas na politioa de
segurana automatioamente quando a aplioao for instalada pela primeira vez a partir do web server. A
Cliok0noe tambm forneoera funoionalidade offline oonfiavel para aplioaes 3mart Client e permitira que ela se
integrem oompletamente oom o windows 3hell.
Lsta seo eamina as restries de implementao No-Jouchin com maiores detalhes.
0eal|geraes 4e Segeraaa Pa4re kestr|tas
0 cdigo de acesso de segurana concede permisses ao aplicativo de acordo com a evidncia que o
aplicativo apresenta. Pelo padro, o local da aplicao (a URL por onde oi iniciada) usada para
determinar a permisso que concedida. / menos que a politica de segurana local no computador do
cliente tenha mudado, as aplicaes de implementao no-touch so parcialmente coniveis, o que
signiica que concedido um nmero limitado de permisses.
Pelo padro, uma aplicao 3mart Client implementada usando a implementao no-touch no
conseguir eecutar o que segue:
Lscrever no HD (eceto armazenagem isolada).
lntegrar-se com o windows 3hell (especialmente os icones de instalao no menu lniciar e o item
lnteragir com qualquer outra aplicao do cliente, como aplicativos do Microsot 0ice.
/cessar web services ou outros recursos de rede que no esto localizados no mesmo servidor em
implementao.
3e a sua aplicao requer mais que um conjunto de permisses padro e voc desejar utilizar a
implementao no-touch, voc ter que modiicar a politica de segurana no cliente para conceder
111 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
aplicao permisses que uncionem corretamente. Jal mudana na politica de segurana precisa ser
propagada para o computador do cliente antes de implementar sua aplicao (por eemplo, usando o
0roup Policy, um pacote windows lnstaller, ou um batch ile). Lssas solicitaes reduzem alguns dos
beneicios da abordagem da implementao no-touch. Para mais inormaes sobre implementao de
politicas de segurana, ver ".NLJ Framework Lnterprise 3ecurity Policy /dministration and Deployment"
em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onnetsec/|tm|/entsecc|aom|n.as.
Conorme voc arquiteta suas aplicaes, necessrio determinar se voc pode ir de encontro as
especiicaes de arquitetura de sua aplicao 3mart Client e cumprir com as solicitaes parciais de
coniana para a implementao de uma aplicao no-touch. Lm geral, a implementao no-touch e o
cdigo em eecuo de um arquivo compartilhado oerecem solues de cil aplicao, mas podem
restringir de tal maneira a uncionalidade da aplicao, que ela se torne impraticvel para muitas
aplicaes 3mart Client. No entanto, se a sua aplicao no requer nenhuma permisso adicional, a
implementao no-touch pode ser o mecanismo de implementao ideal para sua aplicao.
Para mais inormaes sobre aplicaes totalmente conivel e parcialmente conivel, ver Capitulo 4,
"Consideraes de 3egurana."
feac|eaa||4a4e 0ll||ae ae 0eal|are|
Um outro problema com a implementao de aplicaes 3mart Client utilizando a implementao no-
touch que elas no so coniveis quando oline. Lsse problema se deve a diversos atores:
Dcwnlcad retardadc dcs assemblies. 0 download de assemblies eito sob demanda e
gerenciada pelo cache do lnternet Lplorer, caso o cache seja esvaziado, por qualquer razo, os
arquivos de sua aplicao sero ecluidos.
Aplicaes dependentes das ccnfiguraes cffline dc Internet Explcrer. uando tentar rodar
uma aplicao oline, voc deve conigurar o lnternet Lplorer para que ele rode em modo oline,
mesmo que a sua aplicao no seja eecutada dentro do lnternet Lplorer. Jambm, caso voc
tenha conectividade, mas o lnternet Lplorer est inadvertidamente conigurado para modo oline,
nenhuma veriicao de atualizaes ser eita no servidor.
lasta|aes Ne 1raasac|eaa4as
Com a implementao no-touch, o download de assemblies eito quando solicitado a um cache que
pode ser esvaziado a qualquer momento. No possivel ento assegurar, em momento algum, que
todos os cdigos necessrios sejam instalados no disco local. Para muitas organizaes, essa incerteza
inaceitvel para muitas aplicaes line-o-business.
lmp|emeatae 4e 0p4ate Steh em Ap||caes Ne-teech
Um dos problemas principais no uso da implementao no-touch que, pelo padro, a aplicao roda
a partir do cache de download de assemblies e sob coniana parcial, a menos que a politica de
segurana local seja modiicada. lsso pode limitar a uncionalidade de sua aplicao 3mart Client,
incluindo sua habilidade de uncionar coniavelmente quando oline. Um modo de esquivar esse
problema o uso da implementao no-touch inicialmente para implementar um stub do aplicativo,
que, a sua vez, az o download automtico e instala o restante da aplicao no disco local. 0 stub
implementa a aplicao em um local especiico no disco, como "C:\/rquivo de programas", e no est,
portanto, sujeito s limitaes do cache do lnternet Lplorer. uando a aplicao roda, ser concedida
112 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
permisso de coniana total porque ela roda a partir do disco local, e pode operar sem as restries
associadas as aplicaes de coniana parcial. Um update stub da aplicao pode ser usado tambm
para assegurar que a aplicao seja conivel e atualizada automaticamente caso mudanas no
servidor ocorram.
3e voc utilizar esse mtodo para implementar sua aplicao, assegure que a politica de segurana do
.NLJ Framework do computador do cliente seja modiicada para permitir que o stub da aplicao rode
com permisses suiciente para azer o download e armazenar os arteatos no disco local.
/rquitetar update stubs para aplicao pode ser compleo. Para ajud-lo, a Microsot criou o Updater
/pplication Block, que voc pode utilizar de base para criao de sua prpria soluo automtica de
atualizao. 0 Updater /pplication Block oi criado para:
lmplementar uma soluo de atualizao pull-based para aplicaes .NLJ Framework.
Usar tcnicas de validao criptogrica para veriicar a autenticidade das atualizaes de uma
/jud-lo a criar aplicaes que atualizem-se automaticamente, para a ltima verso disponivel.
/ssemblies
Recursos de aplicao
Fuso de mdulos
/rquivos C/B
Dependncias
Coniguraes de registro
Propriedades de projeto
/es Padro
Depois de criar um pacote windows lnstaller, voc tem um grande nmero de opes para distribui-lo
no computador do cliente, incluindo:
115 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
Usar uma tecnologia de impulso para empresa, como o 3M3.
Usar a uncionalidade 0roup Policy do /ctive Directory para publicar ou designar os pacotes.
Permitir que os usurios instalem o pacote complete a partir de uma midia, arquivo compartilhado, ou uma
URL.
Usar uma tecnologia do impulso para instalar seus pacotes windows lnstaller permite que voc tenha certo
controle centralizado sobre quando e onde a instalao ocorre. Permite tambm que voc controle que grupos
dentro da empresa devem ter a aplicao, ou verses particulares da aplicao. voc pode, para o eemplo,
assegurar-se de que a instalao ocorra em um determinado momento do dia para um grupo particular de
usurios. Lntretanto, lembre-se de que voc pode precisar de hardware e banda estreita para a rede,
dependendo do tamanho de suas aplicaes, para assegurar-se de que as distribuies em grande escala
trabalhem eicazmente.
Uma das mais signiicantes vantagens do pacote de windows lnstaller que voc pode utilizar uma Diretiva de
0rupo (0roup Policy) ou 3M3, podendo instalar a aplicao sem que o usurio tenha permisses
administrativas. 0s pacotes de windows lnstaller tambm suportam instalaes transacionais. ualquer uma
das mudanas de arquivos e coniguraes podero ser instaladas, ou se houver problemas de instalao, o
processo poder dar um roll back, das entradas realizadas pelo windows lnstaller.
Uma das vantagens as mais signiicativas do pacote windows lnstaller que se voc usar o 0roup Policy ou o
3M3, voc pode instalar a aplicao sem que o usurio solicite permisses administrativas. 0s pacotes do
windows lnstaller tambm suportam automaticamente instalaes transacionadas. Janto todos os arquivos,
como as mudanas de conigurao sero instaladas por um pacote do windows lnstaller, ou, se houver um
problema, a instalao ser levada em sua totalidade pelo windows.
/ leibilidade do pacote do windows lnstallers signiica que ele pode ser apropriado para instalaes de
qualquer compleidade, a partir de aplicaes que escrevem simplesmente no sistema de arquivos e integram-
se com o item Adicicnar cu Remcver Prcgramas no Painel de Controle, aqueles que azem muitas
mudanas de conigurao signiicativas no cliente.
Nota: 3e voo usar paootes do windows lnstaller para implementar sua aplioao, voo no tem que usar o mesmo mtodo
para implementar atualizaes. Lm muitos oasos preferivel arquitetar sua aplioao de modo a atualizar-se
automatioamente depois de instalada. Para mais detalhes sobre a oonfigurao de suas aplioaes para atualizaes
automatioas, veja 'Atualizaes Automatioas' mais tarde neste oapitulo.
sce|hea4e a Aher4agem 4e lmp|emeatae 0erreta
Com tantas escolhas disponiveis para aplicaes 3mart Client, pode ser um desaio determinar a escolha
correta para seu ambiente. Lntretanto, as eigncias de sua aplicao e as necessidades de seus usurios
determinaro normalmente a melhor abordagem.
/ tabela seguinte resume as caracteristicas de cada abordagem de implementao.
1ahe|a T.1: Aher4ageas 4e lmp|emeatae 4e Ap||caes Smart 0||eat
Acesso off||ne
conf|.e|
Iu|| trust
func|ona||dade
da ap||cao
Requer Hudanas
na polltlca de
sequrana do
cllente
|mp|ementao
No touch
|mp|ementao
No-touch
com
update stuh
da ap||cao
Lsecutando
0od|gos a part|r
de Arqu|.o
compart||hado
|mp|ementao
Xcop,
Pacote
w|ndows
|nsta||er
Slu hao hao Slu Slu
Requer Hudanas
na polltlca de
sequrana do
cllente
Slu Slu Slu
(ccnt|n0ai
110 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Necessldade de
medlflcae de
dlretlvas de
segurana de
.N1 Framewerk
de cllente
|mp|ementao
No touch
|mp|ementao
No-touch
com
update stuh
da ap||cao
Lsecutando
cod|gos a part|r
de Arqu|.o
compart||hado
|mp|ementao
Xcop,
Pacote
w|ndows
|nsta||er
Slu Uepende dos
requerimentos
da aplioao
Slu Slu Uepende dos
requerimentos
de aplioao e
do meoanismo
de distribuio
da aplioao
3im 3im 3im
No No No No 3im
No No No No 3im
No 3im No No 3im
No No
1ahe|a T.1: Aher4ageas 4e lmp|emeatae 4e Ap||caes Smart 0||eat Iceat|aeae)
Lm muitos casos a abordagem mais simples agrupar sua aplicao usando um pacote do windows
lnstaller. 0s pacotes do windows lnstaller so altamente leiveis e permitem que voc instale
aplicaes de qualquer compleidade. 3e voc usar uma tecnologia de impulso para empresa tais
como 0roup Policy ou 3M3 para implementar seu pacote windows lnstaller, voc pode tambm
instalar as aplicaes sob um conteto administrativo de segurana, de qualquer maneira do conteto
da segurana do usurio. / implementao no-touch com atualizao automtica tambm uma
opo vivel quando voc quer permitir que seus usurios instalem sua aplicao clicando em uma
URL, mas voc ter que azer mudanas na politica local de segurana do computador alvo para
assegurar-se de que sua aplicao stub possa rodar sob ull trust.
lmp|emeataa4e Atea||zaes Smart 0||eat
Depois de voc ter inicialmente implementado suas aplicaes 3mart Client, seu trabalho no est
acabado. /s aplicaes necessitaro ser atualizadas em horas etras, conorme voc atualiza a
uncionalidade da aplicao e repara erros ou enderea vulnerabilidades de segurana.
Dependendo da situao, voc pode ou no usar a mesma abordagem de implementao para
atualizar uma aplicao 3mart Client j implementada. Por eemplo, se voc inicialmente implementou
uma aplicao usando um pacote do windows lnstaller, voc pode usar atualizaes automticas para
implementar atualizaes. /s especiicaes do seu ambiente determinaro requentemente, que
metodologia de atualizao a mais apropriada.
11T 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
lnstalae
Usurles
Ne-Avanades
lmacte Balxe
ne 5lstema
lntegrae cem e
5hell de Wlndews
lnstalae
lrrestrlta
lnstalae
1ransaclenal
Uepende dos
requerimentos
da aplioao
Uepende dos
requerimentos
da aplioao
3im - 3e o
oliente preoisar
exeoutar sob
permisses
elevadas
3im - Apenas
para o 3tub da
aplioao
3im - 3e o
oliente preoisar
exeoutar sob
permisses
elevadas
Uma eigncia comum durante a implementao de atualizaes a habilidade de conederar a inra-
estrutura da atualizao, de modo que as atualizaes no uncionem ora de um servidor nico ou
grupo de servidores controlados por uma nica entidade. Por eemplo, se um l3v criar uma aplicao
3mart Client que esteja implementada na empresa de um cliente, e o l3v libera uma atualizao para
a aplicao, a empresa pode desejar azer o download e testar seu ambiente operacional padro antes
de propag-lo a todos os computadores que uncionam atravs da empresa. Conederar a inra-
estrutura de atualizao torna isso possivel. Por eemplo, um servidor atualizado poderia eistir no site
do cliente que responsvel por obter atualizaes do l3v. 0s clientes que uncionam dentro da
empresa obteriam as atualizaes do servidor local atualizado, mas somente quando os
administradores de Jl aprovarem. Lsta abordagem tambm pode ser usada para aumentar o
desempenho e a escalabilidade da inra-estrutura de atualizaes aliviando a carga de um servidor
nico ou azendo de servidor.
/o implementar atualizaes para uma aplicao, voc tem as seguintes opes:
Implementac Nc-tcuch. 0s assemblies atualizados so adicionados ao servidor web atravs de
No general, se voc estiver usando o windows lnstaller para implementar atualizaes, voc deveria
usar um patch package ou azer a atualizao do arquivo do windows lnstaller j eistente. 3e voc
criar um arquivo do windows lnstaller inteiramente novo, o sistema operacional Microsot windows
no reconhecer o pacote como uma atualizao, e as caracteristicas de gerenciamento do upgrade do
windows no uncionaro corretamente. Lntretanto, em alguns casos, as mudanas so to
etensivas que voc pode escolher renunciar a esta uncionalidade e criar um novo arquivo do windows
lnstaller.
Nota: Para mais informaes sobre a implementao de atualizaes usando o windows lnstaller, ver Ueploying
.NL1 lramework-Based Applioations em hrrp.www.m|orosofr.oomoown|oaos oera||s.aspx7lam||,lo=5B706F2l-
l03l-4B19-9025-6B37F64F0l46&o|sp|a,|ang=en.
sce|hea4e a Aher4agem 4e Atea||zae 0erreta
Lm alguns casos, a abordagem de atualizao que voc escolhe deinida pela abordagem de
implementao que voc escolheu para sua aplicao. Lntretanto, a abordagem mais apropriada
determinada requentemente pela natureza das atualizaes que voc est implementando. Para o
eemplo, voc pode apenas copiar novos arquivos sob os mais antigos, ou voc pode querer atualizar a
aplicao para que ela rode ao lado da verso antiga. / atualizao pode envolver a adio de
assemblies novos ao cache de assembly global ou em mudar as inormaes de conigurao no
registro. /s atualizaes se complicam mais se voc estiver implementando atualizaes nos
assemblies strong-named, porque cada assembly que chama o assembly strong-named usar o
nmero da verso na chamada.
/ Jabela 7.2 resume as opes disponiveis para a atualizao de suas aplicaes e as caracteristicas
que cada uma delas suporta.
120 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Atuallzae
1ransaclenal
|mp|ementao
No touch
|mp|ementao
No-touch
com
update stuh
da ap||cao
Lsecutando
cod|gos a part|r
de Arqu|.o
compart||hado
|mp|ementao
Xcop,
Pacote
w|ndows
|nsta||er
Slu Uepende dos
requerimentos
da aplioao
Slu hao Uepende dos
requerimentos
de aplioao e
do meoanismo
de distribuio
da aplioao
3im 3im No
3im 3im
3im
No No No
No No No 3im
3im 3im No
No
No
No No 3im
lnstalae
Usurles
Ne-Avanades
Gerenclamente
centrallzade de
atuallzaes
Atuallzae
balxadas quande a
allcae executa
lnfra-estrutura de
atuallzae
federada
Atuallzaes er
usurle , Grue
3im Uepende do
meoanismo
de distribuio
da aplioao
3im
Uepende do
meoanismo
de distribuio
da aplioao
5uerte embutlde
ara centrele de
verse
No No No No 3im
Lm muitos casos, as atualizaes automticas so a abordagem mais eicaz para implementao de
atualizaes para sua aplicao. Lntretanto, ao implementar atualizaes maiores ou atualizaes que
envolvem mudanas de conigurao compleas para o cliente, voc pode necessitar usar o windows
lnstaller, que tambm tem o beneicio do suporte automtico de controle de verso.
Semar|e
/ implementao de aplicaes 3mart Client muito mais cil do que implementar as aplicaes Rich
Client no passado, devido s caracteristicas do .NLJ Framework. Lntretanto, h um grande nmero de
escolhas importantes que voc necessita azer para uma implementao bem sucedida, tanto na
maneira como voc arquiteta sua aplicao para a uma cil implementao como em que abordagem
de implementao voc escolhe para a aplicao e para o prprio .NLJ Framework.
Na maioria dos casos, a melhor escolha para implementar a aplicao , ou usado um pacote do
windows lnstaller, ou usar uma combinao da implementao no-touch e um update stub da
aplicao. voc necessitar considerar como manter a aplicao e implementar eicazmente as
atualizaes depois da implementao. Novamente, na maioria dos casos, a melhor escolha ,
provavelmente, windows lnstaller, ou atualizaes automticas controladas pela prpria aplicao.
121 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
1ahe|a T.2: Aher4ageas 4e Atea||zae para Ap||caes Smart 0||eat
8
Perlermaace 4a Ap||cae
Smart 0||eat
/s aplicaes 3mart Client podem ornecer uma relao de usurio mais rica e mais responsiva do que
as aplicaes web podem, e podem tirar vantagem dos recursos de sistemas locais. 3e uma parcela
grande da aplicao residir no computador do usurio, a aplicao no necessitar voltas constantes a
um servidor web. lsto pode resultar em um aumento de perormance e responsividade. Lntretanto,
para realizar o potencial total de uma aplicao 3mart Client, voc deve considerar cuidadosamente
questes de perormance durante a ase da arquitetura da aplicao. /deressar questes de
perormance enquanto voc arquiteta e projetar sua aplicao pode ajud-lo a conter custos prvios e
reduzir a probabilidade de ter problemas de perormance mais tarde.
Nota: Melhorar a performanoe de aplioaes 3mart Client no limita-se s questes de projeto da aplioao. a
um grande numero de passos que voo pode tomar durante todo o oiolo de vida da aplioao para fazer oom que o
oodigo .NL1 seja bem exeoutado. Lmbora o runtime da lingua oomum (CLR) do .NL1 seja muito efioiente em
exeoutar o oodigo, ha um grande numero das tonioas que voo pode usar para aumentar a performanoe de seu
oodigo e impedir que os problemas de performanoe estejam introduzidos no nivel do oodigo. Para mais informao
sobre essas questes, veja hrrp.mson.m|orosofr.oomperf.
Deinir eigncias de desempenho reais e identiicar assuntos potenciais na arquitetura de sua
aplicao claramente importante, mas requentemente os problemas de perormance aparecem
somente depois que o cdigo oi escrito, e est sendo testado. Neste caso, h erramentas e tcnicas
que podem ajud-lo a localizar problemas de perormance.
Lste capitulo eamina como arquitetar e ajustar suas aplicaes 3mart Client para uma perormance
ecelente. Discute um grande nmero de assuntos relacionado ao projeto e arquitetura, incluindo
consideraes de caching and threading, e eamina como realar a perormance de parcelas windows
Forms de sua aplicao. 0 capitulo tambm observa algumas das tcnicas e das erramentas que voc
pode usar para localizar e diagnosticar problemas de desempenho com suas aplicaes 3mart Client.
Arqe|tetera pe|a Perlermaace
H muitas coisas que voc pode azer em um projeto da aplicao ou em nivel de arquitetura para se
assegurar que uma aplicao 3mart Client seja bem eecutada. voc deve assegurar-se de estar
criando objetivos reais e mensurveis para a perormance o mimo possivel na ase de design, o que
permite que voc avalie tradeos do projeto e ornea o modo de custo mais eetivo para enderear
assuntos de perormance. 0nde quer que seja possivel, os objetivos de perormance devem ser
baseados em eigncias reais do usurio e do negcio porque estes so inluenciados ortemente pelo
ambiente em que sua aplicao opera. Perormance Modeling um processo estruturado e que pode
ser repetido, e voc pode usar para gerenciar e assegurar que sua aplicao v de encontro aos
objetivos do desempenho.
Para mais inormaes, ver Capitulo 2, "Perormance Modeling" em lmproving .NLJ /pplication
Perormance and 3calability, em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onag/|tm|/sca|enetc|at02.as.
0s 3mart Client so geralmente parte de uma aplicao distribuida maior. L importante considerar o
desempenho da aplicao 3mart Client no conteto da aplicao completa, incluindo todos os recursos
localizados na rede que a aplicao do cliente usa. 0 ajuste ino e a otimizao de cada componente
em uma aplicao geralmente no necessrio ou possivel. Lm vez disso, seu ajuste de perormance
deve ser baseado em prioridades, em tempo, em restries de oramento e em riscos. Perseguir uma
alta perormance para seu prprio beneicio geralmente no uma estratgia de custo eetivo.
3mart Clients tambm necessitaro coeistir com outras aplicaes nos computadores do seu usurio.
Conorme voc arquiteta suas aplicaes 3mart Client, voc deve levar em considerao o ato que
suas aplicaes necessitaro compartilhar de recursos de sistema tais como a memria, o tempo de
CPU, e a utilizao da rede com as outras aplicaes no computador do cliente.
Nota: lnformaes a respeito da arquitetura de servios remotos esoalaveis e de alto desempenho podem ser
enoontradas em lmproving .NL1 Performanoe and 3oalability, em hrrp.mson.m|orosofr.oom||brar,
oefau|r.asp7ur|=||brar,en-usonpaghrm|soa|ener.asp. Lsse guia oontm informao detalhada sobre oomo
otimizar seu oodigo .NL1 para uma melhor performanoe.
Para projetar 3mart Clients com perormance eiciente, considere o seguinte:
Cache de dadcs cnde aprcpriadc. 0 cache de dados pode melhorar dramaticamente a
perormance da aplicao 3mart Client, permitindo que voc trabalhe com dados localmente, em
vez de ter que recuper-los constantemente na rede. Lntretanto, os dados que so sensiveis ou
mudam reqentemente, geralmente no so apropriados para o caching.
0timizac de ccmunicac de rede. Uma comunicao atravs de interaces chatty com os
servios remotos tier com voltas mltiplas para solicitaes/respostas para eecutar uma nica
operao lgica pode consumir recursos do sistema e da rede, tendo por resultado uma
perormance pobre da aplicao.
Usc eficiente de threads. 3e voc usar uma interace de usurio thread (Ul) para eecutar a
obstruo de chamadas vinculadas de l/0, o Ul pode parecer no responsivo para o usurio. Criar
um nmero grande de threads desnecessrios pode resultar em perormance deiciente devido ao
custo para criar e echar threads.
Usc eficiente de transaes. 3e o cliente tiver dados locais, o uso de transaes atmicas pode
ajudar a assegurar que aqueles dados sejam consistentes. Como os dados so locais, a transao
preerentemente local em vez de distribuida. Para os 3mart Clients que esto trabalhando oline,
qualquer mudana eita nos dados locais ser temporria. 0 cliente necessita sincronizar as
mudanas quando estiver novamente online. Para os dados que no so locais, possivel usar
transaes distribuidas em alguns casos (por eemplo quando os servios esto na mesma posio
isica com boa conectividade e onde o servio suporta-o). 3ervios como web services e o Message
ueuing no suportam transaes distribuidas.
0timizac dc tempc de startup da aplicac. 3tartup da aplicao rpidos permitem que o
usurio comece a interagir com a aplicao mais rapidamente, o que d ao usurio uma percepo
imediata e avorvel do desempenho e da usabilidade da aplicao. 3ua aplicao deve ser
projetada para que somente os assemblies requeridos sejam carregados no startup da aplicao.
123 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Lvita o uso de muitos assemblies, j que carregar cada assembly incorre em um custo de
desempenho.
Fusc eficiente dcs recurscs dispcnveis. Decises pobres de arquitetura, tais como, a
windows Forms para ornecer uma relao de usurio rica e responsiva. H um grande nmero de
tcnicas que voc pode usar para assegurar-se de que o windows Forms ornea tima
perormance. Lssas tcnicas incluem a reduo da compleidade da interace de usurio, e evitar o
carregamento quantidades grandes de dados de uma s vez.
Lm muitos casos a perormance percebida de sua aplicao, da perspectiva do usurio, ao menos
to importante quanto a perormance real da aplicao. voc pode criar uma aplicao que parea
eecutar-se muito mais eicientemente ao usurio azendo determinadas mudanas em sua
arquitetura, tal como usar processados assincrnico de background (para manter o Ul responsivo),
mostrar uma barra de progresso para indicar o progresso das tareas, e ornecer a opo para que os
usurios cancelem tareas de longa eecuo. Lstas edies so discutidas em mais detalhes em toda
esta seo.
0|retr|zes para 0e|ecae 4e 0a4es em 0ache
0 Caching uma tcnica importante para melhorar a perormance da aplicao e para ornecer uma
relao de usurio responsiva. voc deve considerar as seguintes opes:
Cclccac de dadcs restauradcs frequentemente em cache para reduc de rcundtrips. 3e
sua aplicao tiver que interagir reqentemente com um servio de rede para recuperar dados,
voc deve considerar a colocao de dados em cache no cliente, reduzindo a necessidade de obter
repetidamente os dados sobre a rede. lsto pode aumentar a perormance substancialmente,
ornecendo primo de acesso instantneo aos dados, e a remoo do risco de atraso de rede e os
outages que podem aetar adversamente a perormance de sua aplicao esperta do cliente.
Cclccac de dadcs scmente para leitura em cache. 0s dados de reerncia somente para
leitura so geralmente um candidato ideal para colocao em cache. Jais dados so usados para
ornecer dados para validao e interace de usurio para ins de eposio, tais como as descries
do produto, lDs, e assim por diante. Devido ao ato de que esse tipo dos dados no pode ser
mudado pelo cliente, ele pode geralmente ser colocado em cache sem nenhuma manipulao
especial no cliente.
Cclccac em cache de dadcs a serem enviadcs a servics lccalizadcs na rede. voc deve
considerar colocar cache os dados que devem ser enviados a um servio localizado na rede. Por
eemplo, se a sua aplicao permitir que os usurios entrem com inormao de ordem que
consiste em um nmero de itens de dados recolhidos sobre um nmero de ormulrios, considere
permitir que o usurio incorpore todos os dados, e ento envie em uma chamada da rede no im do
processo de entrada.
Minimizar c cache de dadcs altamente vclteis. /ntes que voc possa colocar em cache
qualquer dado voltil, voc precisa considerar por quanto tempo ele pode permanecer em cache
antes que torne-se antigo ou, de outro modo, intil. 3e os dados orem altamente volteis e sua
aplicao contar com inormao up-to-date, provvel que os dados possam ser mantidos em
cache por um tempo curto, caso possam ser mantidos.
124 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Minimizar c cache de dadcs sensveis. voc deve evitar colocar dados sensiveis em cache no
cliente porque, na maioria dos casos, voc no pode garantir a segurana isica do cliente.
Lntretanto, se voc colocar dados sensiveis em cache no cliente, voc necessitar codiicar os
dados, o que tm suas prprias implicaes na perormance.
0utros assuntos que envolvam a colocao de dados em cache esto cobertos mais detalhadamente
no capitulo 2 deste guia. ver tambm "Caching" sesso do lmproving .NLJ /pplication Perormance
and 3calability, Capitulo 3, "Design 0uidelines or /pplication Perormance"
(|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/sca|enetc|at03.as) e
lmproving .NLJ /pplication Perormance and 3calability,Capitulo 4, "/rchitecture and Design Review o
.NLJ /pplication or Perormance and 3calability" (|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~
/||orar,/en-0s/onag/|tm|/sca|enetc|at04.asi.
0|retr|zes para 0emea|cae 4e ke4e
Uma outra deciso que voc enrentar como arquitetar e trabalhar com servios de rede, tais como
os web services. Particularmente, voc deve considerar a granularidade, a sincronicidade e a
reqncia da interao com os servios de rede. Para uma melhor perormance e scalability, voc deve
preerir emitir mais dados em um nico chamado, a emitir quantidades menores de dados em diversos
chamados. Por eemplo, se sua aplicao permitir que os usurios incorporem mltiplos itens a uma
ordem de compra, melhor coletar dados para todos os itens, e ento enviar uma s ordem de
compra ao servio de uma s vez, a emitir os detalhes individualmente em chamadas mltiplas.
/dicionalmente reduo do custo geral associado a eecuo de muitos chamados de rede, isso
tambm reduz a necessidade de gerenciamento compleo do estado dentro do servio e/ou o cliente.
3ua aplicao 3mart Client deveria ser arquitetada para utilizar comunicao assincrnica sempre que
possivel, j que isso o ajudar a manter a interace de usurio responsiva e eecutando tareas em
paralelo. Para mais inormaes sobre como iniciar chamados e restaurar dados assincrnicamente
utilizando os mtodos eginInvcke e EndInvcke ver, "/synchronous Programming 0verview"
(|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/cg0|oe/|tm|
/cc.ras,nc|rcnc0srcgramm|ngc.er.|ew.asi.
Nota: Para mais informaes sobre arquitetura e oonstruo de aplioaes 3mart Client ooasionalmente
ooneotadas a uma rede, ver Capitulo 3, Coneotando-se" e Capitulo 4, 3mart Clients Coneotados
0oasionalmente."
0|retr|zes 4e 1hrea4|ag
Usar threads mltiplos dentro de sua aplicao pode ser uma boa maneira de aumentar sua
perormance e responsividade. Particularmente, voc deve considerar o uso de threads para realizar
processamentos que podem ser eitos com segurana no background e que no requerem a interao
do usurio. Lecutar tal trabalho de background permite que o usurio continue trabalhando com a
aplicao e permite que o thread da interace de usurio da aplicao mantenha sua responsividade.
Bons candidatos para processamento em um thread separado incluem:
Inicializac da Aplicac. Lecutar uma inicializao longa em um thread de background de
modo que o usurio possa interagir o mais cedo possivel com sua aplicao, especialmente se uma
parte importante ou principal da uncionalidade da aplicao no depende da concluso dessa
inicializao.
Chamadcs de Servic Remctc. Fazer todos os chamados remotos sobre a rede em um thread de
ser eito em um thread separado. Jipicamente, este tipo de trabalho est sujeito as restries do
subsistema do disco l/0, e no disponibilidade do processador, assim que sua aplicao pode
eicazmente manter sua responsividade quando este trabalho or eecutado no background.
Lnquanto os beneicios de perormance devido ao uso the threads mltiplos podem ser signiicativos,
importante notar que threads consomem recursos prprios e usar muitos threads pode criar uma carga
no processador, que necessita gerenciar a troca entre os threads. Para impedir isso, considere usar um
conjunto de threads em vez de criar e controlar seus prprios threads. 0s conjuntos de threads
controlaro eicientemente os threads para voc, reutilizando threads de objetos eistentes e
minimizando o custo geral associado com a criao e eliminao do thread.
3e a eperincia do usurio or impactada pelo trabalho eecutado pelos threads de background, voc
deve manter o usurio sempre inormado do progresso do trabalho. 0erecer esse tipo de eedback
reala a percepo do usurio sobre o desempenho de sua aplicao e impede que ele suponha que
nada est acontecendo. Jente assegurar-se de que o usurio possa cancelar operaes longas a
qualquer hora.
voc tambm deve considerar o uso do evento Idle do objeto Applicaticn para eecuo de operaes
simples. 0 evento Idle ornece uma alternativa simples para o uso de threads separados para
processamento de background. Lste evento inicia-se quando a aplicao no tem mais mensagens de
interace de usurio para manejar e esto a ponto de
incorporar o estado inativo. voc pode eecutar operaes simples com este evento e tirar da
vantagem da inatividade do usurio. Por eemplo:
jC#]
pub11c Iom1{}
{
ln1f1a11zeComponenf{}
App11caf1on.ld1e += neW Lvenfhand1e{ OnApp11caf1onld1e }
}
p1vafe vo1d OnApp11caf1onld1e{ obecf sende, LvenfAgs e }
{
}
jV1sua1 as1c .NET]
Pub11c C1ass Iom1
lnhe1fs 5ysfem.W1ndoWs.Ioms.Iom
Pub11c 5ub NeW{}
My8ase.NeW{}
ln1f1a11zeComponenf{}
Addhand1e App11caf1on.ld1e, AddessOf OnApp11caf1onld1e
Lnd 5ub
P1vafe 5ub OnApp11caf1onld1e{8yva1 sende As 5ysfem.Obecf, 8yva1 e As
5ysfem.LvenfAgs}
Lnd 5ub
Lnd C1ass
120 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Nota: Para mais informaes sobre o uso de threads multiplos em 3mart Clients, ver Capitulo 6, "Usando
Jhreads Mltiplos."
0|retr|zes 4e 1raasaes
/s transaes podem ornecer a sustentao essencial para assegurar-se de que as regras de negcio
no sejam violadas e que a consistncia dos dados seja mantida. Uma transao assegura que um
conjunto de tareas relacionadas tenha sucesso ou alhe como uma unidade. voc pode usar
transaes para manter a consistncia entre uma base de dados local e outros recursos, including ilas
do Message ueuing.
Para as aplicaes 3mart Client que necessitam trabalhar com dados oline em cache quando a
conectividade da rede no est disponivel, voc deve enileirar os dados transacionais e sincroniz-los
com o usurio quando a conectividade da rede estiver disponivel.
voc deve evitar o uso de transaes distribuidas que envolvam os recursos situados na rede, j que
esses cenrios podem conduzir a problemas de perormance devido a variao de tempo de resposta
da rede e dos recursos. 3e sua aplicao necessitasse envolver um recurso localizado na rede em uma
transao, voc deve considerar o uso de transaes de compensao, que permitam que sua
aplicao cancele um pedido precedente quando uma transao local alha. Lmbora as transaes de
compensao possam no ser apropriadas para todas as situaes, elas permitem que sua aplicao
interaja com os recursos da rede dentro do conteto de uma transao de modo loosely coupled,
reduzindo a possibilidade que um recurso sob controle do computador local possa aetar adversamente
a perormance de sua aplicao.
Nota: Para mais informaes sobre o uso de transaes em 3mart Clients, ver Capitulo 3, Coneotando-se."
0t|m|zae 4e tempe 4e Startep 4a Ap||cae
Um startup rpido da aplicao permite que o usurio comece a interagir com a aplicao quase
imediatamente, dando ao usurio uma percepo imediata e avorvel do desempenho e da
usabilidade da sua aplicao.
uando uma aplicao comea, primeiro o CLR carregado,e a seguir o assembly principal da sua
aplicao, seguido por todos os assemblies que so requeridos para resolver os tipos de objetos
reerenciados no ormulrio principal da sua aplicao. 0 CLR no carrega todos os assemblies
dependentes neste estgio; carrega somente os assemblies que contm o tipo de deinies para as
variveis do membro em sua classe de ormulrio principal. Uma vez que estes assemblies so
carregados, o compilador just-in-time (1lJ) compila o cdigo para os mtodos enquanto rodam,
comeando com o mtodo Principal. 0utra vez, o compilador 1lJ no compila todo o cdigo em seu
assembly. Lm vez disso, o cdigo compilado como necessrio em base de por mtodo.
Para minimizar o tempo de startup de sua aplicao, voc deve seguir as seguintes diretrizes:
Minimize a variac de membrcs na classe de fcrmulric principal de sua aplicac. lsso
minimizar o nmero de tipos que devem ser resolvidos quando o CLR carrega as classes de
ormulrios principais.
Minimize c usc imediatc de tipcs assemblies de classe de base larga, tais ccmc as livrarias
XML cu as livrarias dc AD0.NE1. Lsses assemblies levam tempo para carregar. Usando as classes
de conigurao da aplicao e as caracteristicas do trace switch levar a biblioteca de XML. Lvite
isto se o tempo startup da aplicao or uma prioridade.
Carga lenta cnde pcssvel. Busque dados somente quando eigido em vez de carregar upront e
congelar o Ul.
12T 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Arquitete sua aplicac para utilizar mencs assemblies. /s aplicaes com um grande nmero
inicializac. Chamados aos servios de rede que podem uncionar paralelamente durante a
inicializao, podem tirar vantagem da uncionalidade assincrnica ornecida pelos proies do
servio. lsto ajuda a liberar o thread em eecuo e chama servios simultaneamente para eecutar
as tareas.
Use N0EN.exe para ccmpilar e experimente ccm assemblies N0en e nc-N0en, e determina
qual salva c maicr nmerc de pginas de ccnjuntc de trabalhc. N0LN.ee, que envia com o
.NLJ Framework, costume pr-compilar um assembly para criar uma imagem nativa que ento
armazenado em uma parte especial do cache de assembly global, pronto para a prima vez em que
seja requerido por uma aplicao. Criar uma imagem nativa de um assembly permite que o
assembly carregue e eecute mais rapidamente porque o CLR no necessita gerar dinamicamente
os cdigos e estruturas de dados contidos no assembly. Para mais inormaes, ver as sesses
"working 3et Considerations" e "N0en.ee Lplained" no capitulo 5, "lmproving Managed Code
Perormance" o lmproving. NLJ /pplication Perormance and 3calability, at
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/sca|enetc|at05.as.
Nota: 3e voo usar o N0LN para pr-oompilar um assembly, todos os seus assemblies dependentes sero
oarregados imediatamente.
Maa|pe|ae 4e kecerses 0|spea|re|s
0 Common Language Runtime (CLR) usa um coletor de lio para gerenciar o uso da vida til e da
memria do objeto. lsto signiica que os objetos que no esto mais acessiveis so coletados
automaticamente pelo coletor do lio, com a memria que est sendo recuperada automaticamente.
0s objetos podem ser no mais acessiveis por um nmero de razes. Por eemplo, pode no haver
nenhuma reerncia ao objeto ou todas as reerncias ao objeto podem ser de outros objetos que
podem ser coletados como parte do ciclo atual de coleta, quando a coleta automtica do lio livrar seu
cdigo da carga associada ecluso controlando o objeto, signiica que seu cdigo no mais ter o
controle eplicito sobre eatamente quando um objeto ecluido.
Considere as seguintes diretrizes para assegurar-se de que voc controle os recursos disponiveis
eicazmente:
Assegure-se de que c mtcdc Dispcse seja chamadc quandc c cbjetc chamadc cferea um.
3e o seu cdigo chama objetos que suportam o mtodo Dispcse, voc deve assegurar-se de
chamar esse mtodo assim que terminar de usar o objeto. Chamar o mtodo Dispcse assegura que
recursos no gerenciados sejam liberados pr-ativamente em vez de esperar at que a coleta de lio
ocorra. /lguns objetos oerecem mtodos adicionais ao mtodo Dispcse que gerencia recursos, tal
como o mtodo Clcse. Nesses casos, voc deve consultar a documentao de como usar mtodos
adicionais. Por eemplo, com o objeto SqlCcnnecticn, chamando tanto o Clcse ou o Dispcse
suiciente para liberar pr-ativamente a coneo com a base de dados de volta ao pool de coneo.
Um modo de assegurar que o Dispcse seja chamado assim que voc tiver terminado com o objeto
usar a palavra using em visual C# .NLJ ou os blocos 1ry/Finally em visual Basic .NLJ.
128 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0 ragmento de cdigo abaio demonstra o uso do Dispcse.
Lemplo da palavra using em C#:
us1ng{ 5feamkeade myI11e = neW 5feamkeade{"C:\\keadMe.1xf"}}{
sf1ng confenfs = myI11e.kead1oLnd{}
//... use fhe confenfs of fhe f11e
}// d1spose 1s ca11ed and fhe 5feamkeade`s esouces e1eased
Lemplo do bloco 1ry/Finally em visual Basic .NLJ:
D1m myI11e As 5feamkeade
myI11e = NeW 5feamkeade{"C:\\keadMe.1xf"}
1y
5f1ng confenfs = myI11e.kead1oLnd{}
`... use fhe confenfs of fhe f11e
I1na11y
myI11e.C1ose{}
Lnd 1y
Nota: Lm C# e C++, o mtodo linalize implementado oomo destruotor. Lm visual Basio .NL1, o mtodo linalize
implementado oomo um finalizador das sub-rotinas do linalize na base de olasses do objeto.
Fcrnea cs mtcdcs Finalize e Dispcse se vcc pcssui recurscs nc gerenciadcs atravs
dcs chamadcs dc cliente. 3e voc criar um objeto que acesse recursos no gerenciados em
chamados ao mtodo pblicos ou protegidos, ento a aplicao necessita controlar a vida til dos
recursos no gerenciados. Na igura 8.1, o primeiro caso de um chamado a recursos no
gerenciados onde o recurso aberto, transerido e echado. Neste caso, seu objeto no necessita
ornecer os mtodos Finalize e Dispcse. No segundo caso, o recurso no gerenciado preso
atravs das chamadas do mtodo; conseqentemente, seu objeto deve ornecer mtodos Finalize e
Dispcse para que o cliente possa eplicitamente liberar o recurso to logo o cliente tenha
terminado de usar o objeto.
120 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Cliente
Uet0ata()
Abre oonexo
1ransporta dados de reourso no gerenoiado
leoha oonexo
No prov linalize & Uispose
Cliente
0pen()
Abre oonexo
Uet0ata()
1ransporta dados de reourso no gerenoiado
Prov linalize & Uispose
pub|c vod 0spose()
Uispose(true),
0C.3uppressllnalize(), }
protected vrtua| vod 0spose
(bool disposing)
leoha oonexo aqui }
Ina|ze()
Uispose(false), }
viso simplifioada de um Uispose Pattern
f|gera 8.1
uso oos merooos oe ohamaoo l|spose e l|na||ze
/ coleta de lio geralmente boa para a perormance total porque avorece a velocidade sobre o uso
da memria. 0s objetos necessitam ser suprimidos somente quando os recursos de memria esto
baios; se no, todos os recursos disponiveis da aplicao so usados para o beneicio de sua
aplicao. Lntretanto, se seu objeto mantm uma reerncia a recursos no gerenciados, tais como
window handle, arquivo, objetos 0Dl e as conees de rede, uma perormance melhor pode ser
conseguida se o programador liberar eplicitamente estes recursos quando no esto mais sendo
utilizados. 3e voc mantm recursos no gerenciados atravs dos chamados do mtodo do cliente,
ento o objeto deve permitir que o autor do chamado controle eplicitamente recursos usando a
interace IDispcsable, que ornece o mtodo Dispcse. /o implementado o IDispcsable, o objeto
inorma que, preerentemente, se pode pedir para limpar, em vez de esperar pela coleta de lio. 0 autor
do chamado de um objeto que implemente o IDispcsable chama simplesmente o mtodo Dispcse
quando terminado com o objeto, para que assim possa liberar o recurso como apropriado.
Para mais inormaes sobre como implementar o IDispcsable em um de seus objetos, ver capitulo 5,
"lmproving Managed Code Perormance," em lmproving .NLJ /pplication Perormance and 3calability,
em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/sca|enetc|at05.as.
130 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Nota: 3e seu objeto desoartavel deriva-se de um outro objeto que tambm implemente a interfaoe I0sposab|e,
voo deve ohamar o mtodo 0spose da olasse para permitir a limpeza em seus reoursos. voo deve ohamar
tambm o Uispose em todos os objetos que so possuidos por seu objeto que implementa a interfaoe I0sposab|e.
0 mtodo Finalize tambm permite que seu objeto libere eplicitamente todos os recursos que tm
uma reerncia de quando o objeto est sendo ecluido. Devido natureza no-determinista do coletor
de lio, em alguns casos o mtodo Finalize pode no ser chamado por muito tempo. De ato, pode
nunca ser chamado se sua aplicao terminar antes que o objeto seja ecluido pelo coletor de lio.
Lntretanto, importante usar o mtodo Finalize como uma estratgia de backup caso o autor do
chamado no chame o mtodo Dispcse eplicitamente (tanto o mtodo Dispcse, como o Finalize
compartilham do mesmo cdigo de limpeza do recurso). Deste modo, o recurso provavelmente liberado
em algum ponto, mesmo que isso ocorra mais tarde que considerado timo.
Nota: Para assegurar-se de que o oodigo de limpeza dentro dos mtodos 0spose e Ina|ze no seja ohamado
duas vezes, voo deve ohamar UU.5uppressIna|ze, que diz ao ooletor de lixo para no ohamar o mtodo Ina|ze.
0 coletor de lio implementa o mtodo Ccllet, que ora apagar os arquivos que esto pendentes para
ecluso. Lste mtodo no pode ser chamado da sua aplicao, pois eecuta como uma thread de alta
prioridade. 0 ciclo pode parar todas as Jhreads de lnterace do Usurio (Ul), resultando uma tela sem
retornos.
Para mais inormaes, ver "0arbage Collection 0uidelines," "Finalize and Dispose 0uidelines,"
"Dispose Pattern," e "Finalize and Dispose 0uidelines" em lmproving .NLJ /pplication Perormance and
3calability em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onag/|tm|/sca|enetc|at05.as.
0t|m|zae 4a Perlermaace 4e w|a4ews ferms
windows Forms ornece uma interace de usurio rica para sua aplicao 3mart Client e h um nmero
de tcnicas que voc pode usar para ajudar a assegurar que o windows Forms ornea tima
perormance. /ntes de discutir tcnicas especiicas, til rever algumas diretrizes de alto nivel que
podem aumentar a perormance do windows Forms substancialmente.
Seja cautelcsc ccm as criaes handle. windows Forms virtualiza as criaes handle (ou seja,
cria e recria objetos de handle da janela dinmicamente). Criar objetos handle pode ser caro;
portanto, evite azer mudanas de border style desnecessrias ou mudanas de MDl.
Evite criar aplicaes ccm ccntrcles child. 0 sistema operacional Microsot windows tem um
limite de 10.000 controles por processo, mas voc deve evitar ter muitas centenas dos controles
em um ormulrio enquanto cada controle consome recursos da memria.
0 restante desta seo discute tcnicas mais especiicas que voc pode usar para otimizar a
perormance da interace de usurio da sua aplicao. 0 restante desta seo discute tcnicas mais
especiicas que voc pode usar para otimizar a perormance da interace de usurio da sua aplicao.
0saa4e e 8eg|a0p4ate e e a40p4ate
Um grande nmero de controladores do windows Forms (por eemplo os controles do ListView e do
1reeView) implementam os mtodos eginUpdate e EndUpdate, que evitam uma nova pintura de
controles quando as propriedades subjacentes dos dados ou do controle orem manipuladas. Usar os
mtodos eginUpdate e EndUpdate permite que voc aa mudanas signiicativas em seus controles
e evite que os controles aam novas pinturas constantemente enquanto as mudanas so aplicadas.
Jais novas pinturas conduzem a uma degradao signiicativa de perormance e uma interace de
usurio hesitante e no responsiva. Para o eemplo, se sua aplicao tiver um controle da rvore que
requeira um nmero grande de artigos de n a serem adicionados, voc deve chamar o eginUpdate,
adicionar todos os itens necessrios, e chamar ento o EndUpdate. 0 eemplo de cdigo seguinte
mostra uma rvore de controle que est sendo usada para indicar uma representao hierrquica de
um nmero de clientes com sua inormao de ordem.
131 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
jC#]
// 5uppess epa1nf1ng fhe 1eev1eW unf11 a11 fhe obecfs have been
ceafed.
feev1eW1.8eg1nupdafe{}
// C1ea fhe 1eev1eW.
feev1eW1.Nodes.C1ea{}
// Add a oof 1eeNode fo each Cusfome obecf 1n fhe AayL1sf.
foeach{ Cusfome cusfome2 1n cusfomeAay
{
feev1eW1.Nodes.Add{ neW 1eeNode{ cusfome2.CusfomeName } }
// Add a ch11d 1eeNode fo each Ode obecf 1n fhe cuenf
Cusfome.
foeach{ Ode ode1 1n cusfome2.CusfomeOdes }
{
feev1eW1.Nodes| cusfomeAay.lndexOf{cusfome2} ].Nodes.Add{
neW 1eeNode{ cusfome2.CusfomeName + "." + ode1.OdelD
} }
}
}
// 8eg1n epa1nf1ng fhe 1eev1eW.
feev1eW1.Lndupdafe{}
jV1sua1 as1c .NET]
` 5uppess epa1nf1ng fhe 1eev1eW unf11 a11 fhe obecfs have
been ceafed.
1eev1eW1.8eg1nupdafe{}
` C1ea fhe 1eev1eW
1eev1eW1.Nodes.C1ea{}
` Add a oof 1eeNode fo each Cusfome obecf 1n fhe AayL1sf
Io Lach cusfome2 As Cusfome ln cusfomeAay
1eev1eW1.Nodes.Add{NeW 1eeNode{cusfome2.CusfomeName}}
` Add a ch11d 1eeNode fo each Ode obecf 1n fhe cuenf
Cusfome.
Io Lach ode1 As Ode ln cusfome2.CusfomeOdes
1eev1eW1.Nodes{Aay.lndexOf{cusfomeAay,
cusfome2}}.Nodes.Add{
NeW 1eeNode{cusfome2.CusfomeName & "." &
ode1.OdelD}}
Nexf
Nexf
` 8eg1n epa1nf1ng fhe 1eev1eW.
1eev1eW1.Lndupdafe{}
132 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
voc deve usar os mtodos eginUpdate e EndUpdate mesmo quando voc no espera que muitos
objetos sejam adicionado ao controle. Na maioria de casos, voc no estar ciente do nmero eato de
artigos a serem adicionados at o runtime. Conseqentemente, para lidar elegantemente com uma
quantidade etraordinariamente grande de dados e para as eigncias uturas, voc deve chamar
sempre os mtodos eginUpdate e EndUpdate.
Nota: Chamar o mtodo AddPange de muitas das olasses da ooleo usadas pelos oontroles do windows lorms
ohamara automatioamente o egnUpdate e o LndUpdate..
0saa4e e Sespea4layeet e e kesemelayeet
Um grande nmero de controles do windows (por eemplo, os controles do ListView e do 1reeView)
implementam os mtodos SuspendLaycut e ResumeLaycut, que impedem que o controle crie
eventos mltiplos de layout quando os controles child estiverem sendo adicionados.
3e seus controles programaticamente adicionarem e removerem controles child ou eecutarem layouts
dinmicos, ento voc deve chamar os mtodos SuspendLaycut e ResumeLaycut. 0 mtodo
SuspendLaycut permite que as aes mltiplas sejam eecutadas em um controle sem eecutar uma
disposio para cada mudana. Por eemplo, se voc redimensiona e move um controle, cada
operao criaria um layout separado. Lstes mtodos operam de maneira similar aos mtodos
eginUpdate e EndUpdate e ornecem os mesmos beneicios em termos de estabilidade da interace
de usurio e perormance.
0 eemplo abaio programaticamente adiciona botes parent orm:
jC#]
p1vafe vo1d Add8uffons{}
{
// 5uspend fhe fom 1ayouf and add fWo buffons.
fh1s.5uspendLayouf{}
8uffon buffonOk = neW 8uffon{}
buffonOk.Locaf1on = neW Po1nf{10, 10}
buffonOk.51ze = neW 51ze{75, 25}
buffonOk.1exf = "Ok"
8uffon buffonCance1 = neW 8uffon{}
buffonCance1.Locaf1on = neW Po1nf{90, 10}
buffonCance1.51ze = neW 51ze{75, 25}
buffonCance1.1exf = "Cance1"
fh1s.Confo1s.Addkange{neW Confo1|]{buffonOk, buffonCance1}}
fh1s.kesumeLayouf{}
}
jV1sua1 as1c .NET]
P1vafe 5ub Add8uffons{}
` 5uspend fhe fom 1ayouf and add fWo buffons
Me.5uspendLayouf{}
D1m buffonOk As NeW 8uffon
buffonOk.Locaf1on = NeW Po1nf{10, 10}
buffonOk.51ze = NeW 51ze{75, 25}
buffonOk.1exf = "Ok"
D1m buffonCance1 As NeW 8uffon
buffonCance1.Locaf1on = NeW Po1nf{90, 10}
buffonCance1.51ze = NeW 51ze{75, 25}
buffonCance1.1exf = "Cance1"
Me.Confo1s.Addkange{NeW Confo1{} {buffonOk, buffonCance1 }}
Me.kesumeLayouf{}
Lnd 5ub
133 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
voc deve usar os mtodos SuspendLaycut e ResumeLaycut sempre que voc adicionar ou remover
controles, eecutar um layout dinmico dos controles child, ou ajustar quaisquer propriedades que
aetem a disposio do controle, tal como o tamanho, posio, link ou as propriedades de doca.
Maa|pe|aa4e lmageas
3e sua aplicao mostra um grande nmero de arquivos de imagem, tais como o .jpg e os arquivos
.gi, ento voc pode melhorar a perormance do video signiicativamente pre-renderizando as imagens
em ormato bitmap.
Para usar esta tcnica, carregue primeiramente a imagem do arquivo e ento converta esta imagem
para bitmap usando o ormato P/R0B. / seguinte amostra de cdigo carrega um arquivo a partir do
disco e usa ento a classe para converter a imagem em um ormato pr-multiplicado, R0B ala-
blended.
Por eemplo:
jC#]
1f { 1mage != nu11 && 1mage 1s 81fmap }
{
81fmap bm = {81fmap}1mage
81fmap neWlmage = neW 81fmap{ bm.W1dfh, bm.he1ghf,
5ysfem.DaW1ng.lmag1ng.P1xe1Iomaf.Iomaf32bppPAgb }
us1ng { Gaph1cs g = Gaph1cs.Iomlmage{ neWlmage } }
{
g.DaWlmage{ bm, neW kecfang1e{ 0,0, bm.W1dfh, bm.he1ghf } }
}
1mage = neWlmage
}
jV1sua1 as1c .NET]
lf Nof{1mage ls Nofh1ng} AndA1so {1ypeOf 1mage ls 81fmap} 1hen
D1m bm As 81fmap = C1ype{1mage, 81fmap}
D1m neWlmage As NeW 81fmap{bm.W1dfh, bm.he1ghf,
5ysfem.DaW1ng.lmag1ng.P1xe1Iomaf.Iomaf32bppPAgb}
us1ng g As Gaph1cs = Gaph1cs.Iomlmage{neWlmage}
g.DaWlmage{bm, NeW kecfang1e{0, 0, bm.W1dfh, bm.he1ghf}}
Lnd us1ng
1mage = neWlmage
Lnd lf
0se e Pag|ag e e lazy lea4|ag
Na maioria de casos, voc deve recuperar ou eibir dados somente quando necessrio. 3e sua
aplicao precisa recuperar e eibir muita inormao, voc deve considerar quebrar os dados em
pginas e eibir os dados em uma pgina de cada vez. lsto permite que sua interace de usurio
uncione melhor porque no tem que eibir uma quantidade grande de dados. /lm, isto pode melhorar
a usabilidade de sua aplicao porque o usurio no conrontado com uma abundncia de dados de
uma s vez e pode navegar mais acilmente para encontrar os dados eatos que ele ou ela necessita.
Para o eemplo, se sua aplicao eibe dados do produto de um catlogo de produtos grande, voc
pode eibir os artigos em ordem alabtica com todos os produtos que comeam com o / eibidos em
134 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
uma pgina e todos os produtos que comeam com a B na pgina seguinte. voc poderia ento
permitir que o usurio navegue diretamente at a pgina apropriada para ele ou ela no precise rolar
toda a pgina para alcanar os dados que ele ou ela necessita.
Paginar os dados dessa maneira tambm pode permitir que voc busque os dados no background
enquanto necessrio. Por eemplo, voc pode precisar buscar somente a primeira pgina da
inormao para eibio e permitir que o usurio interaja com ela. voc pode ento deiar a pgina de
dados seguinte pronta no background para quando o usurio a necessite. Lsta tcnica pode ser
particularmente eicaz quando combinada com dados em cache.
voc tambm pode aumentar a perormance de sua aplicao 3mart Client usando tcnicas de Lazy
Load. Lm vez de carregar os dados ou recursos que voc pode necessitar em algum momento uturo
imediatamente, voc carrega-os somente quando necessrio. voc pode usar o Lazy Load para
aumentar a perormance de sua interace de usurio ao construir grandes listas ou estruturas de
rvores. Neste caso, voc pode carregar os dados quando o usurio necessitar, para o eemplo quando
uma rvore epandida.
0t|m|zar a e|ec|4a4e 4e x|h|e
voc pode otimizar a velocidade de eibio da sua aplicao de muitas maneiras dierentes, de acordo
com as tcnicas que voc estiver usando para eibir os controles da interace de usurio e os
ormulrios de aplicao.
uando sua aplicao comea, voc deveria considerar sua eibio de modo simples como uma
interace de usurio. lsto diminuir o tempo de startup e apresentar uma interace de usurio
organizada e cil de usar para o usurio. Jambm, voc deve tentar evitar reerenciar classes e
carregar todos os dados que no sejam imediatamente necessrios no startup. lsto melhorar o tempo
da iniciao da aplicao e do .NLJ Framework e melhorar a velocidade de eibio da aplicao.
uando voc necessita eibir uma caia de dilogo ou ormulrio, voc deve mant-los escondidos at
que estejam prontos para eibio, para reduzir a quantidade de pintura necessria. lsto ajudar a
assegurar que o ormulrio somente seja eibido quando estiver sendo inicializado.
3e sua aplicao tiver controles que contenham controles child cobrindo toda a rea de supericie do
cliente, voc deve considerar ajustar o estilo do controle de background para opaco. lsso evita que
voc tenha que redesenhar o background do controle em cada evento da pintura. voc pode ajustar o
estilo do controle usando o mtodo SetStyle. Use a enumerao de CcntrclsStyles.0paque para
especiicar um estilo opaco no controle.
voc deve evitar re-pintar desnecessariamente os controles. Uma abordagem esconder os controles
enquanto voc ajusta suas propriedades. /s aplicaes que tm o cdigos de desenho compleos no
evento 0nPaint podem re-desenhar apenas a regio invlida do ormulrio, em vez de pintar o
ormulrio inteiro. 0 parmetro PaintEventArgs do evento 0nPaint contm uma estrutura ClipRect
que indica que parte da janela invlida. lsto reduz o tempo que o usurio espera para ver uma
eibio completa.
Use otimizao padro de desenho, tal como o clipping, o double buering ou o ClipRectangle. lsto
ajudar tambm a melhorar a perormance de eibio de sua aplicao 3mart Client impedindo
operaes de desenho desnecessrias para partes da eibio que no so visiveis ou que requerem
novo desenho. Para mais inormao sobre como realar a perormance de pintura, veja Painting
techniques using windows Forms or the Microsot .NLJ Framework em
|tt.//w|nocws|crms.net/art|c|es/w|nocws|crmsa|nt|ng.as.
3e sua eibio inclui animaes ou muda um elemento de eibio requentemente, voc deve usar o
buering duplo ou o mltiplo para preparar a imagem seguinte enquanto a atual pintada. /
enumerao de CcntrclStyles no namespace System.Windcws.Fcrms aplica-se a muitos controles,
135 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
e o membro do Dcubleuffer pode ajudar impedir hesitaes. Ligar o estilo Dcubleuffer ar com
que seus controles de pintura sejam eitos em um buer o-screen e ento pintados todos de uma s
vez na tela. Lnquanto isso ajuda a impedir hesitaes, ele tambm usa mais memria para o buer
alocado.
Ajeste e 0|agaest|ce 4e Perlermaace
Cuidar de assuntos de perormance nos estgios de arquitetura e implementao a maneira de custo
mais eetivo para encontrar os objetivos de perormance da sua aplicao. Lntretanto, voc s pode
ser verdadeiramente eicaz na otimizao da perormance de suas aplicaes se testar a perormance
de sua aplicao requentemente e o quanto antes, na ase de desenvolvimento. Lnquanto a
arquitetura e testes de perormance so igualmente importantes, otimizar cada componente e todo o
cdigo nestes estgios iniciais no um uso eiciente dos recursos, e deve ento ser evitado.
Conseqentemente, sua aplicao pode sorer de problemas de perormance inesperados, que voc
no antecipou no estgio de arquitetura. Por eemplo, voc pode eperimentar problemas de
perormance devido inesperada interao entre dois sistemas ou componentes, ou voc pode usar
cdigos pr-eistentes que no uncionam como esperado. Neste caso, voc necessita localizar a onte
do problema de perormance para que voc possa endere-lo corretamente.
Lsta seo discute um grande nmero erramentas e de tcnicas que lhe ajudaro a diagnosticar
questes de perormance, e a ajustar sua aplicao para uma perormance melhor.
Ajeste 4e 0hjet|res 4e Perlermaace
Lnquanto voc projeta e arquiteta sua aplicao 3mart Client, voc deve considerar cuidadosamente as
eigncias em termos de perormance, e deinir objetivos claros para ela. Deinidos esses objetivos,
considere como voc medir a perormance real da aplicao. 3uas mtricas de perormance devem
representar claramente as caracteristicas de desempenho importantes da aplicao. Jente evitar
objetivos ambiguos ou incompletos que no possam ser medidos eatamente, tais como a aplicao
deve uncionar rapidamente ou a aplicao deve carregar rapidamente. voc precisa saber os
objetivos de perormance e escalabilidade de sua aplicao de modo que voc possa projet-la a ir de
encontro com esses objetivos e planejar seus teste da melhor maneira. Lsteja certo de que seus
objetivos sejam mensurveis e veriicveis.
Mtricas de perormance bem deinidas permitem que voc siga o desempenho de sua aplicao
eatamente, de modo que voc possa determinar se a aplicao vai de encontro a seus objetivos da
perormance ou no. Lstas mtricas devem ser incluidas na planta de teste da sua aplicao, assim
podem ser medidos durante a ase de testes de sua aplicao. Lsta seo ocaliza a deinio dos
objetivos especiicos de perormance relevantes a uma aplicao 3mart Client. 3e voc tambm or
projetar e construir os servios de rede que a aplicao do cliente consumir, voc precisa deinir
objetivos apropriados de perormance para estes tambm. Neste caso, voc deve estar certo de
considerar as eigncias de desempenho do sistema como um todo e como a perormance de cada
parte da aplicao se relaciona com as outras peas e com o sistema em sua totalidade.
0eas|4eraa4e a Perspect|ra 4e 0sear|e
Conorme voc determina os objetivos apropriados de perormance para uma aplicao 3mart Client,
voc deve considerar cuidadosamente a perspectiva do usurio. Para uma aplicao 3mart Client, o
desempenho est relacionado a usabilidade e a percepo do usurio. Para o eemplo, uma operao
longa poderia ser aceitvel ao usurio enquanto esse usurio puder manter-se trabalhando e or
suprido com o gabarito adequado sobre o progresso da operao.
/o determinar eigncias, requentemente til quebrar a uncionalidade de uma aplicao em um
nmero de cenrios do uso ou casos de utilizao. voc deve identiicar os eemplos e os cenrios de
130 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
uso que so criticos e necessitam ir de encontro com objetivos especiicos de desempenho. /s tareas
que so comuns a muitos casos de uso e que so eecutadas requentemente devem ser projetadas
de modo que possam eecutar-se bem. 3imilarmente, tareas de que eigem a ateno completa do
usurio e que no permitem a troca para eecuo de outras tareas, necessitam ornecer uma
eperincia eiciente e otimizada ao usurio. /s tareas que no so usadas muito requentemente ou
que no impedem que o usurio eecute outras tareas no pode necessitar ser altamente ajustado.
Para cada tarea sensivel de desempenho que voc identiica, voc deve precisamente deinir o que o
usurio az e como a aplicao responde. voc deve tambm determinar que rede e recursos ou
componentes do cliente cada tarea usa. Lsta inormao inluenciar os objetivos de perormance e
dirigir os testes que medem essa perormance.
0s estudos da usabilidade ornecem uma onte muito valiosa de inormao e podem inluenciar
etremamente a deinio de objetivos de perormance. Um estudo ormal da usabilidade pode ser
muito til para determinar como os usurios eecutam seu trabalho, quais cenrios do uso so comuns
e quais no so, ou que tareas os usurios eecutam requentemente, e que caracteristicas da
aplicao so importantes em uma perspectiva de perormance. 3e voc estiver construindo uma
aplicao nova, voc deve considerar ornecer um prottipo ou um modelo da aplicao para permitir
um teste rudimentar de usabilidade a ser eito.
0eas|4eraa4e e Amh|eate 4e 0perae 4a Ap||cae
L importante avaliar o ambiente em que sua aplicao operar, j que isso pode impor barreiras a sua
aplicao que devem reletir-se nos objetivos de perormance que voc conigurar.
0s servios de rede podem impor a perormance em sua aplicao. Por eemplo, voc pode ser
requerido para interagir com um web service que voc no tenha nenhum controle. Lm tais casos,
importante determinar a perormance do servio e determinar se este ter um eeito no desempenho
de sua aplicao de cliente.
voc deve determinar tambm como a perormance de qualquer servio dependente e componentes
podem variar com tempo. /lguns sistemas eperimentaram o uso razoavelmente constante quando o
outro eperimenta o uso descontroladamente lutuante em determinadas horas do dia ou da semana.
Lstas dierenas podem aetar adversamente o desempenho de sua aplicao em horas criticas. Por
eemplo, um servio que ornea servios da distribuio e atualizao da aplicao pode ser lento
para responder na manh de segunda-eira s 9:00 /M conorme todos os usurios se atualizem
mais recente verso da aplicao.
Jambm importante modelar eatamente a perormance de todos os sistemas e componentes
dependentes, de modo que sua aplicao possa ser testada em um ambiente que imite o ambiente
real em que ser implementada. Para cada sistema, voc deve determinar o peril de perormance e as
caracteristicas minimas, mdias e de pico da perormance. voc pode ento usar estes dados
apropriadamente ao deinir as eigncias de desempenho para sua aplicao.
voc tambm deve considerar cuidadosamente o hardware em que sua aplicao uncionar. voc
necessitar determinar a conigurao de hardware alvo, em termos de processador, de memria, de
potencialidade dos gricos, e assim por diante ou ao menos de uma conigurao minima abaio de
que voc no pode garantir o desempenho.
Frequentemente o ambiente de negcio em que sua aplicao operar ditar algumas das eigncias
de desempenho mais eigentes. Por eemplo, uma aplicao que eecute stock trading em tempo real
ser requerida para eecutar estas operaes e para indicar todos os dados relevantes de maneira
oportuna.
13T 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Precesse 4e Ajeste 4e Perlermaace
0 ajuste de perormance de sua aplicao um processo iterativo. Lste processo consiste em um
nmero de estgios que so repetidos at que a aplicao v de encontro a seus objetivos do
desempenho. (ver Figura 8.2.)
Lstabelea
Linha de Base
Ajuste sua
Aplioao
1este e Avalie Analise Resultados
Colete Uados
f|gere 8.2
lrooesso oe ajusre oe oesempenho
Como a igura 8.2 ilustra, ajustar a perormance requer que voc termine os seguintes processos:
Estabelea uma Linha de ase. /ntes que voc comece a ajustar sua aplicao para a
perormance, voc deve ter uma linha de base bem deinida para os objetivos e mtricas de
perormance. lsto poderia incluir especiicidades tais como o tamanho do working set da
aplicao, a hora de carregar dados (para o eemplo, um catlogo), a durao da transao e
assim por diante.
Cclete Dadcs. voc necessitar graduar a perormance da sua aplicao comparando-a aos
poder dar prioridade a seus esoros para o ajuste de perormance determinando que
caracteristicas da aplicao requerem mais ateno. /dicionalmente, voc pode usar estes
dados para determinar onde todos os bottlenecks de perormance esto. Frequentemente, voc
poder somente determinar a posio eata do bottleneck recolhendo dados mais detalhados
da perormance: por eemplo, usando a instrumentao da aplicao. 0 desempenho que
perila erramentas pode ajudar-lhe identiicar o bottleneck.
Ajuste sua aplicac. Depois que voc identiicou um bottleneck,voc necessitar
vez para determinar que eeito suas mudanas tm e para permitir que os dados novos de
perormance sejam recolhidos. 0 trabalho de perormance requer requentemente mudanas
arquiteturais ou outras de alto impacto, assim que testar completamente critico. 0 plano de
teste da sua aplicao deve eercitar a toda a uncionalidade dos instrumentos da aplicao,
porque todos os cenrios antecipados e nas mquinas do cliente coniguradas com hardware e
o sotware apropriados. 3e sua aplicao usar recursos de rede, voc deve carregar estes
recursos para que voc possa obter medidas eatas de como sua aplicao unciona em tal
ambiente.
0 processo acima permitir que voc oque em problemas especiicos de perormance, medindo o
desempenho total das aplicaes de modo a irem de encontro aos objetivos especiicos.
ferrameatas 4e Perlermaace
H um nmero das erramentas disponiveis que podem ajudar voc a coletar e analisar dados da
perormance de sua aplicao. Cada uma das erramentas descritas nesta seo tem
uncionalidade distinta, que voc pode usar para medir, analisar e encontrar bottlenecks de
perormance em sua aplicao.
Nota: Alm das ferramentas desoritas aqui, ha um grande numero de outras opes e ferramentas
disponiveis. Para uma desorio dessas outras opes da gerenoiamento de exoeo e logging, veja:
Lxoeption Management Arohiteoture 0uide, at
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usonboahrm|exoeproorner.asp.
voc deve considerar cuidadosamente as eigncias eatas antes de decidir-se sobre que
erramentas so mais apropriadas as suas necessidades.
0saa4e legs e A|ertas 4e Perlermaace
0s Logs e os /lertas de perormance so erramentas administrativas de monitoramento da
perormance que ucniona como parte do sistema operativo windows. Conia nos contadores de
perormance que so publicados pelos vrios componentes, subsistemas, e aplicaes do windows
para permitir que voc siga o uso do recurso e os trace graicamente contra o tempo.
voc pode usar Logs e /lertas de perormance para monitorar contadores padro, tais como o uso
da memria ou o uso do processador, ou voc pode deinir seus prprios contadores eitos sob
encomenda para monitorar uma atividade especiica da aplicao.
0 .NLJ CLR ornece um nmero de contadores teis do desempenho que podem lhe dar a
introspeco em como bom sua aplicao est eecutando. /lguns dos objetos mais relevantes
para a perormance so:
.NE1 CLR Memcry. Fornece dados do uso da memria de uma aplicao .NLJ gerenciada,
incluindo a quantidade de memria que sua aplicao est usando e o tempo gasto na coleta
de lio de objetos no utilizados.
.NE1 CLR Lcading. Fornece dados sobre o nmero de classes e os dominios de aplicao que
sua aplicao est usando e a taa em que esto sendo carregados e descarregados.
.NE1 CLR Lccks and 1hreads. Fornece os dados de perormance relacionados aos threads
usados dentro de sua aplicao, incluindo o nmero de threads e a taa da disputa entre os
threads que tentam comear o acesso simultneo a um recurso protegido.
.NE1 CLR Netwcrking. Fornece os contadores de perormance que se relacionados a envio e
ao recebimento de dados na rede, incluindo o nmero dos bytes enviados e recebidos por
segundo e o nmero de conees ativas.
.NE1 CLR Excepticns. Fornece relatrios sobre o nmero de ecees que esto sendo
baio (em comparao aos logs e aos alertas do desempenho) de monitoramento de perormance
do sistema sob carga. lsto primeiramente para as aplicaes de usurio que devem
reqentemente registrar eventos, erros, avisos, ou eames. Para mais inormao, veja "Lvent
Jracing" no the Microsot Platorm 3DK em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~
/||orar,/en-0s/er|mcn/oase/e.ent_trac|ng.as.
Enterprise Instrumentaticn Framewcrk (EIF). 0 LlF uma estrutura etensivel e conigurvel que
voc possa usar para instrumentar sua aplicao 3mart Client. Fornece um esquema etensivel do
evento e um /Pl uniicado que usa os eventos eistentes, logging, e seguindo os mecanismos
construidos em windows, incluindo o windows Management lnstrumentation (wMl), no windows
Lvent Log, e windows Lvent Jracings. 3impliica etremamente a codiicao requerido para publicar
eventos da aplicao. 3e voc estiver planejando usar o LlF, voc necessita instalar o LlF no
computador do cliente usando o LlF.msi. 3e voc quiser usar o LlF em sua aplicao 3mart Client,
voc necessita considerar esta eigncia durante a implementao de sua aplicao. Para mais
inormao, veja "How Jo: Use LlF" em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onag/|tm|/sca|enet|cwtc14.as.
Lcgging Applicaticn lcck. 0 Logging /pplication Block ornece componentes etensiveis e
reutilizveis do cdigo para ajudar-lhe produzir aplicaes instrumentadas. Lle constri nas
potencialidades do LlF para ornecer assim uncionalidades tais como realces ao esquema do
140 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
evento, niveis mltiplos de registro, dissipadores adicionais do evento, e assim por diante. Para mais
inormao, veja "Logging /pplication Block" em http://msdn.microsot.com/library/deault.asp?url~
/library/en-us/dnpag/html/Logging.asp.
Windcws Management Instrumentaticn (WMI). 0 componente wMl parte do sistema operativo
isso para ver o custo de cada alocamento pelo mtodo, pelos alocamentos isolados que voc no
esperava, e visualizar alocamentos ecessivos possiveis por um mtodo.
Assembly, Mcdule, Functicn, e Class 0raph. Mostra que mtodos causaram o carregamento dos
este grico para determinar o custo dos chamados da biblioteca e que mtodos so chamados ou
como muitos chamados so eitos a um mtodo especiico.
1ime Line. Fornece uma viso baseada em teto, cronolgica e hierrquica da eecuo da sua
aplicao. Use esta visualizao para ver que tipos so alocados e seu tamanho. voc pode
tambm usar esta visualizao para ver que assemblies so carregados como resultado de
chamados a mtodos e para analisar os alocamentos que voc no esperava. voc pode analisar o
uso dos inalizadores para identiicar os mtodos onde Clcse ou Dispcse no tenham sido
eecutados ou chamados, causando bottlenecks.
141 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
voc pode usar o CLR Proiler.ee para identiicar e isolar os problemas relacionados ao coletor de lio.
lsso inclui edies do consumo da memria tais como alocamentos ecessivos ou desconhecidos,
escapes da memria, objetos long-lived, e a porcentagem do tempo gasto eecutando a coleta do lio.
Nota: Para informaes mais detalhadas sobre o uso da ferramenta CLR Profiler, veja lmproving .NL1 Applioation
Performanoe and 3oalability" em hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|= ||brar,en-usonpaghrm|
soa|enerhowro13.asp7frame=rrue.
Semar|e
Para realizar inteiramente o potencial de uma aplicao 3mart Client, voc necessita considerar com
cuidado questes de perormance durante a ase do projeto da aplicao. Dirigindo-se a estas edies
em um estgio adiantado, voc pode conter custos durante o processo de projeto da aplicao e
reduzir a probabilidade de ter problemas de desempenho mais tarde no ciclo de desenvolvimento.
Lsse capitulo eaminou as dierentes tcnicas que voc pode usar conorme arquiteta e projeta suas
aplicaes 3mart Client para assegurar que voc otimize seu desempenho. Mostrou tambm um
grande nmero de erramentas e tcnicas que voc pode usar para determinar problemas de
perormance dentro de suas aplicaes 3mart Client.
kelerac|as
Para mais inormaes, veja os seguintes links:
|tt.//mson.m|crcsc|t.ccm/er|
|tt.//www.w|nocws|crms.net/De|a0|t.as
|tt.//mson.m|crcsc|t.ccm/.st0o|c/0s|ng/0noerstano/er|/
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onnetccm/|tm|/netc||mrc.e|crm|caoer|.as
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onoctnet/|tm|/||g|er|manageoas.as
|tt.//mson.m|crcsc|t.ccm/msonmag/|ss0es/02/08/^o.anceoBas|cs/oe|a0|t.as
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/msonmag/|ss0es/04/01/NE!
/tcc.as?|rame~tr0e
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/msonmag/|ss0es/03/02
/M0|t|t|reao|ng/tcc.as?|rame~tr0e
0e|ahera4eres e ker|seres
Agradecimentcs especiais para ncsscs reviscres: Mark Boulter, 1amie Cool, Keith edlin,
Richard Jurner; lvan Medvedev; Ram 3ingh, Philip vaughn; /ndy Dunn, Devendra Jiwari, Lric
Leonard, Ken Perilman, Per vonge Nielsen, Naveen ajaman, e Chris 3ells
Agradecimentcs a ncsscs editcres e prcdutcres pela ajuda para garantir a qualidade da
experincia vivida pcr ncsscs leitcres: 3haron 3mith, Microsot; 3usan Filkins, Lntirenet; e Jina
Burden Mc0rayne, Lntirenet; e 3anjeev 0arg, 3atyam Computer 3ervices
Agradecimentcs a ncssc time de testes: Prashant Bansode and 0uru 3hankar 3undaram,
problemas que ocorrem com reqncia. 0s padres esto disponiveis para enderear
problemas de arquitetura, projeto, e eecuo especiicos. Cada padro tem tambm uma
comunidade 0otDotNet associada.
Referncias de Arquitetura Reerncias de arquitetura so sistemas de nivel de lJ que
implementao de subsistemas.
Prticas de Ciclc de Vida Prticas de Ciclo de vida ornecem a orientao para tareas ora
0s guias de patterns & practices so projetados para ajudar proissionais, trabalhadores da inormao,
e desenvolvedores:
Reduza c custc dc prcjetc
Lplore os esoros de engenharia de Microsot para conservar o tempo e o dinheiro em seus
projetos.
3iga as recomendaes de Microsot para diminuir seu risco de projeto e conseguir resultados
previsiveis.
Aumente a ccnfiana nas sclues
Construa suas solues em recomendaes comprovadas pela Microsot, assim voc pode ter a