Sei sulla pagina 1di 158

Prefcle de Mark Beulter

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;

Utilizam recursos da rede;

3uportam usurios conectados ocasionalmente;

Fornecem instalao e atualizao inteligentes;

0erecem leibilidade de dispositivos clientes.

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;

/plicaes 3mart Client do 0ice;

/plicaes 3mart Client Mveis.

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

conteto relativo ao contedo de um documento e permite cil visualizao e utiliza inormaes


relevantes quando trabalha dentro de um documento. Por eemplo, smart tags podem ser utilizadas
para oerecer posio de conta para os consumidores conorme eles so mencionados dentro de
um documento ou podem ser utilizados para oerecer inormao de posio de pedido conorme a
identiicao de um pedido digitada. Lsse eedback contetualizado permite que o usurio tome
decises mais bem inormadas, conorme trabalha.
5mart documents. 3mart documents oerecem uma maneira mais poderosa para que o usurio

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

Ferramenta de desenvolvimento Microsot visual 3tudio .NLJ 2003

Ferramenta de desenvolvimento Microsot visual C#

Ltensible Markup Language (XML)

Message ueuing (M3M)

Multithreading

0perao de Banco de Dados Relacional

/rquitetura e Projeto de /plicaes Distribuidas

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

Biblioteca Prticas & Padres em |tt.//www.m|crcsc|t.ccm/resc0rces/ract|ces/ccm|ete||st.as

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

Utilizao dos datasets /D0.NLJ para gerenciar dados

vinculao de dados no windows Forms

Muitos assuntos relacionados manipulao de dados no sero abordados neste capitulo.


Particularmente, temas sobre segurana na manipulao de dados sero discutidos no capitulo 5,
Consideraes de segurana, e consideraes oline sero discutidas no capitulo 4, 3mart Clients
Conectados 0casionalmente.
1|pes 4e 0a4es
3mart Clients geralmente tm que administrar dois tipos de dados:
Dados de reerncia somente para leitura;

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

preos, opes de remessa e preos.


Supcrte a validac de dadcs, permitindc que dadcs adicicnadcs pelc usuric tenham sua

ccrrec verificada. Um eemplo a veriicao de entrada de dados eita em um planejamento


de entregas.
Auxlic na ccmunicac ccm servics remctcs. Um eemplo converter uma seleo de usurio

em um lD de produto localmente e depois enviar a inormao para um 3ervio da web.


Apresentac de dadcs. Lemplos incluem a apresentao de teto de ajuda ou rtulos 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;

Permitir que usurios atualizem dados a partir da interace de usurio;

0erecer visualizao detalhada dos dados;

Permitir que os usurios eplorem itens compleos de dados relacionados;

0erecer uncionalidade lookup na tabela, permitindo que a interace de usurio conecte-se a nomes

de eibio de usurios amigveis.


Lsta sesso eamina algumas caracteristicas da vinculao de dados e discute alguns dos atributos da
vinculao de dados que voc reqentemente precisar implementar em uma aplicao 3mart Client.
Para obter inormaes mais aproundadas sobre vinculao, consulte windows Forms Data Binding
and 0bjects em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onao.net/|tm|
/.onet02252003.as.
Cliente 3ervio da web
1 3 Uata3et utilizado para aoompanhar
as alteraes looais realizadas nos dados.
Pede as alteraes ao Uata3et e envia
ao 3ervio web
Lnvia alteraes ao
banoo de datos
2 U10

21 0ap|te|e 2 - Maa|pe|ae 4e 0a4es
Arqe|tetera 4e |ace|ae 4e 0a4es ae w|a4ews ferms
/ vinculao de dados no windows Forms oerece uma inra-estrutura leivel para conectar dados
bidirecionalmente interace de usurio. / Figura 2.4 mostra uma representao esquemtica da
arquitetura geral de vinculao de dados no windows Forms.
Uata 1able
Binding
Context
Wndows Iorm
Currenoy
Manager
Currenoy
Manager
Currenoy
Manager
Colleotion
Binding Uata ltem
Array
Iorm1

f|gera 2.4
4rqu|rerura oe v|nou|ao oe oaoos no w|noows lorms
/ vinculao de dados no windows Forms utiliza os seguintes objetos:
0rigem de Dadcs. Fontes de dados so objetos que contm dados que sero vinculados

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

conjunto, coleo ou tabela que vinculado interace de usurio. 0 CurrencyManager permite


que voc vincule uma coleo de dados a uma interace de usurio e navegue por ela, atualizando a
interace de usurio de modo a reletir o item selecionado atualmente dentro da coleo.
PrcpertyManager. 0 objeto PrcpertyManager responsvel pela manuteno da propriedade

atual de um objeto vinculado a um controle. Janto a classe do PrcpertyManager quanto a classe


CurrencyManager herdam de uma classe de base comum, indingManagerase. Jodos os
ornecedores de dados vinculados a um controle para ter um objeto associado CurrencyManager
ou PrcpertyManager.
indingCcntext. Cada windows Form tem um objeto indingCcntext padro que registra todos os

objetos CurrencyManager e PrcpertyManager no ormulrio. 0 objeto indingCcntext permite


que voc restaure acilmente os objetos CurrencyManager ou PrcpertyManager para uma origem
de dados especiica. voc pode designar um objeto indingCcntext especiico para um controle de
22 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Note: 3e o 0ata5ource um 0ata1ab|e, 0atavew, Uo||ecton ou Array, o ajuste da propriedade do 0ataMember
no requerida.
Pode-se tambm utilizar a propriedade de coleo do Dataindings disponiveis em todos os objetos
de controle do windows Forms para incluir eplicitamente objetos inding em qualquer objeto de
controle. 0s objetos inding so usados para vincular uma nica propriedade no controle a um nico
membro de dados do provedor de dados. 0 eemplo de cdigo abaio adiciona um vinculo entre a
propriedade 1ext de um controle de caia de teto para o nome do consumidor na tabela de
consumidores de um dataset.
fexf8ox1.Dafa81nd1ngs.Add{
neW 81nd1ng{ "1exf", dafasef, "cusfomes.cusfomeName" } }
uando voc cria uma instncia inding com um construtor inding, voc deve especiicar o nome da
propriedade de controle a qual ser vinculada, a origem de dados e o caminho de navegao que leva
a uma lista ou propriedade na origem de dados. 0 caminho de navegao pode ser uma cadeia vazia,
um nico nome de propriedade ou uma hierarquia de nomes delimitada por pontos. voc pode utilizar
uma caminho de navegao hierrquico para navegar atravs de tabelas de dados e relaes em um
objeto DataSet ou atravs de um modelo de objeto onde as propriedades de um objeto retornam
container (como um 0rcupcx, Panel ou 1abCcntrcl) que contenha controles de data-bound. lsso
permite que cada parte de seu ormulrio seja gerenciada por seu prprio objeto CurrencyManager
ou PrcpertyManager.
inding. 0s objetos inding so usados para criar e manter uma vinculao simples entre uma

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

Micrcscft .NE1 remcting

Micrcscft Windcws Message ueuing (tambm ccnhecidc ccmc MSM)

Servics da Web

.N1 aterpr|se Serr|ces


voc pode usar o .NLJ Lnterprise 3ervices para oerecer acesso inra-estrutura de servios C0M+ de
componentes e aplicaes de cdigo gerenciado. Componentes .NLJ contam com o C0M+ para
ornecer-lhes diversos servios de componentes, como:
3uporte Jransacional

3egurana Baseada em Funo

Lventos Loosely Coupled

/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.

0 assembly deve estar no registro do Microsot windows.

Deinies de tipo de biblioteca para a montagem devem ser registradas e instaladas em uma

aplicao C0M+ especiica.


Montagens que contenham serviced components conigurados como aplicaes out-o-process (ora de
processo) no precisam ser colocadas no cache de assembly global. /s montagens que contm
serviced components conigurados como bibliotecas in-process (dentro do processo) no precisam ser
colocadas no cache global, a menos que estejam localizados em diretrios dierentes do da aplicao.
31 0ap|te|e 3 - 0eaectaa4e-se
3e orem implementadas diversas cpias da mesma verso de um serviced component desta maneira,
o catlogo C0M+ conter a conigurao global para todas as instncias desse componente; no
possivel conigur-los em uma base por cpia.
0 eemplo de cdigo a seguir mostra um componente que requer uma transao e ornece um
mtodos que grava dados em um banco de dados dentro dessa transao.
us1ng 5ysfem.Lnfep1se5ev1ces
|1ansacf1on{ 1ansacf1onOpf1on.kequ1ed }]
pub11c c1ass CusfomeAccounf : 5ev1cedComponenf
{
|AufoComp1efe]
pub11c boo1 updafeCusfomeName{ 1nf cusfomelD, sf1ng cusfomeName }
{
// updafes fhe dafabase, no need fo ca11 5efComp1efe.
// Ca11s 5efComp1efe aufomaf1ca11y 1f no excepf1on 1s fhoWn.
}
}
0eralmente, os 3erviced Components podem se registrar dinamicamente na primeira vez em que so
eecutados. Lste tipo de registro conhecido como |az, reg|strat|cn. / primeira vez que uma aplicao
de cdigo gerenciado tenta criar uma instncia para um serviced component, a common language
runtime (CLR) registra a montagem e a biblioteca de tipo e conigura o catlogo C0M+. 0 registro
ocorre somente uma vez para cada verso particular de montagem.
/ Lazy Registration permite implementar serviced components utilizando implementao Xccpy e
trabalhar com serviced components durante o ciclo de desenvolvimento, tendo que registr-los
eplicitamente.
/ Lazy Registration o mtodo mais cil para registrar seus serviced components, mas unciona
somente se o processo que os estiver eecutando tiver previlgios administrativos. /lm disso, qualquer
montagem marcada como uma aplicao de servidor C0M+ requer registro eplicito; o registro
dinmico no unciona em clientes no gerenciados que chamam serviced components gerenciados.
Nos casos em que o processo que utiliza o serviced component no tenha os previlgios necessrios
para o registro dinmico, necessrio registrar a montagem que contenha o serviced component
utilizando a erramenta Regsvcs.ee, ornecida com o .NLJ Framework.
Janto a Lazy Registration quanto o Regsvcs.ee requerem permisses administrativas no computador
cliente, portanto, se a sua aplicao incluir serviced components, ela no pode ser implementada
utilizando implementao no-touch. Para mais detalhes, consulte o Capitulo 7, lmplementao e
/tualizao das /plicaes 3mart Client.
0s 3erviced Components podem ser hospedados e acessados de diversas maneiras. Lles podem ser
hospedados dentro de uma aplicao /3P.NLJ e acessados atravs de HJJP ou do 30/P ou DC0M (a
conigurao padro). No entanto, se os servios C0M+ necessitam luir com o chamado (por
eemplo, se voc precisa da identidade do usurio ou que uma transao distribuida lua a partir de
sua aplicao para o serviced component), o DC0M a nica soluo vivel.
0bservao: 3e voo usar o UC0M para oomunioar-se oom as aplioaes C0M+, voo preoisara implementar
montagens interop nos oomputadores olientes, oomo faria oom oomponentes C0M tradioionais.
32 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0 Lnterprise 3ervices tem muitos recursos poderosos de componentes que voc pode utilizar em suas
aplicaes 3mart Client. No entantosomente utilizar essas caracteristicas apenas dentro de um
processo nico, em um nico computador cliente, ou dentro dos limites de um servio no servidor. 0
Lnterprise 3ervices em geral no a melhor escolha para comunicao entre uma aplicao 3mart
Client e servios localizados em sistemas remotos devido sua natureza tightly coupled. Utilize
Lnterprise 3ervices se suas aplicaes 3mart Client precisarem utilizar servios C0M+ localmente (por
eemplo, suporte para transaes, unio de objetos ou segurana baseada em uno).
Para mais inormaes sobre Lnterprise 3ervices, consulte writing 3erviced Components 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|/cccnwr|t|ngser.|ceoccmcnents.as?|rame~tr0e.
.N1 kemet|ag
0 .NLJ Remoting ornece um mecanismo de chamado de procedimento remoto (RPC) leivel e
etensivel pelo qual componentes .NLJ podem se comunicar. 0 .NLJ Remoting permite utilizar uma
grande variedade de protocolos de comunicao (como HJJP ou JCP), opes de codiicao de dados
(incluindo XML, 30/P e codiicao binria) e vrios modelos de ativao de objeto. Lle pode ornecer
um meio de comunicao rpido e eiciente entre os objetos.
0 .NLJ Remoting permite que voc chame objetos remotos como se ossem objetos locais utilizando
um objeto proy que parece ser o objeto remoto. / inra-estrutura do .NLJ Remoting administra a
interao entre o cdigo do cliente e o objeto remoto atravs de chamadas de propriedade e mtodo,
codiicando os dados que sero transmitidos entre eles e gerenciando a criao e ecluso do objeto
remoto alvo.
/ inra-estrutura do .NLJ Remoting eige que o cliente tenha conhecimento detalhado dos mtodos e
propriedades pblicos do objeto remoto para oerecer um proy do cliente. Uma maneira de garantir
que o cliente tenha esse conhecimento distribuir uma implementao completa do objeto remoto ao
cliente. No entanto, muito mais eiciente atorar nos mtodos e propriedades pblicos para deinies
de interace e compilar essas interaces em sua prpria montagem. /s montagens das interaces
podem ser utilizadas pelo cliente para oerecer um proy mais adequado e eles podem ser utilizados
pelo objeto remoto para implementar as uncionalidades necessrias. Lssa tcnica tambm permite
que voc atualize a implementao dos objetos remotos sem ter que redistribuir os objetos completos
para o cliente.
L possivel administrar a vida til de objetos remotos de diversas maneiras. 0bjetos podem ser criados
sob demanda para preencher uma nica solicitao, ou voc pode controlar sua vida til mais
precisamente utilizando um mecanismo de lease, onde o cliente mantm um lease no objeto remoto e
este mantido vivo pelo tempo que cliente queira utiliz-lo. 0 .NLJ Remoting tambm pode garantir
que apenas uma instncia de objeto eista para todos os clientes. voc pode escolher o tempo de vida
de sua aplicao de acordo com suas necessidades de gerenciamento e escalabilidade de estado.
/ inra-estrutura etensivel do .NLJ Remoting permite que voc crie canais personalizados e sinks. 0s
canais personalizados permitem que voc deina a maneira na qual os dados sero transmitidos
atravs da rede. Por eemplo, voc pode deinir um canal personalizado para implementar um
protocolo wire personalizado. 3inks personalizados permitem que voc intercepte e eecute aes nos
dados, conorme eles so enviados entre os objetos. Por eemplo, voc pode deinir um sink
personalizado para criptograar ou comprimir os dados antes e depois da transmisso.
0 .NLJ Remoting possui um poderoso e etensivel mecanismo para comunicao entre objetos. No
entanto, devido sua natureza tightly coupled, ele pode no ser adequado para todas as situaes. 0
.NLJ Remoting requer objetos implementados em .NLJ, tanto no cliente quanto no servidor, portanto,
ele no apropriado em situaes nas quais a interoperabilidade entre dois ambientes dierentes um
33 0ap|te|e 3 - 0eaectaa4e-se
requisito. 0 .NLJ Remoting tambm no adequado em situaes nas quais a interao Jightly
Coupled em estilo RPC entre cliente e servidor inadequada. Por padro, o .NLJ Remoting no ornece
qualquer mecanismo built-in para criptograar ou para passar a identidade do usurio ou uma
transao entre objetos. Nesse tipo de situao o Lnterprise 3ervices deve ser usado.
0 .NLJ Remoting uma boa opo, entretanto, para comunicao entre objetos em dierentes
processos no computador cliente ou dentro dos limites de servio ou para objetos em dierentes
dominios de aplicao.
Para mais detalhes sobre utilizao do .NLJ Remoting, consulte /n lntroduction to Microsot .NLJ
Remoting Framework em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onoctnet/|tm|/|ntrcremct|ng.as?|rame~tr0e.
Para mais inormaes sobre a escolha entre web 3ervices e Remoting, consulte /3P.NLJ web
3ervices or Remoting: How to Choose em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-
0s/onooa/|tm|/ooaoctnetarc|16.as?|rame~tr0e.
Message qeee|ag
Com o Microsot windows Message ueuing, ica cil comunicar-se com as aplicaes rpida e
coniavelmente, enviando e recebendo mensagens. 0 Messaging oerece entrega de mensagens
garantida e uma maneira conivel de eetuar muitos processos de negcios. 0 Message ueuing
oerece um mecanismo de comunicao loosely coupled que pode ser utilizado dentro de sua aplicao
3mart Client. 0 Message ueuing possui as seguintes caracteristicas:
Entrega de mensagens garantida. 0 Message ueuing garante que as mensagens sero

entregues, apesar de alhas ou da ausncia do sistema remoto, armazenando mensagens em uma


ila at que possam ser entregues. Portanto, as mensagens so consideravelmente menos aetadas
por alhas do que em chamadas diretas entre componentes.
Pricrizac de mensagens. Mensagens mais urgentes ou mais importantes podem ser recebidas

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

so armazenadas na ila de saida e entregues automaticamente quando o cliente icar on-line


novamente. 0s usurios podem continuar a eecutar operaes quando o acesso ila de destino
no estiver disponivel. Lnquanto isso, as operaes adicionais podem prosseguir como se a
mensagem j tivesse sido processada, porque a entrega de mensagens est garantida para quando
a coneo de rede or restaurada.
Messaging transacional. voc envia mensagens com parte de uma transao. Dessa orma, voc

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

que se comuniquem com elas. / descrio oerecida em um documento XML chamado de


documento web 3ervice Description Language (w3DL).
Descreve suas mensagens utilizando um esquema XML.

/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.

Evitar transaes ACID distribudas.

Evitar c envic de datasets atravs da rede.

Dividir grandes datasets.

Versicne seus assemblies e Web Services.

0t|||zar Measageas 0earse-0ra|ae4, em capse|a


Chamadas de rede distribuidas so operaes caras. voc no deveria projetar a sua interace eterna
da mesma maneira ||ne-gra|neo que voc projetaria interaces locais ou o desempenho ser aetado.
Para evitar dependncias entre as mensagens, uma boa idia construir mtodos de interace como
unes sel-contained. lsso evita escrever compleos cdigos de reconciliao de rastreio para
manipular a alha de uma mensagem que dependa do ito da concluso de outra.
r|tar 1raasaes A0l0 0|str|he|4as
Jransaes /ClD (/tmicas, Consistentes, lsoladas, Durveis) distribuidas so resource-intensive com
muito trego de rede e muitos sistemas de bloqueio interdependentes em transaes locais
pendentes. 3e o seu 3mart Client ou servio estiver aguardando uma resposta e no pode continuar
at que essa resposta seja recebida, uma transao /ClD distribuida pode bloquear os processos de
negcios.
3T 0ap|te|e 3 - 0eaectaa4e-se
Requer que o Message ueuing seja
oonfigurado no oliente
A integrao oom outros sistemas
no faoil
3uporta integrao
Lxtensivel
3uporte forte da industria
Padres olaramente definidos
Agnostioo quanto a forneoedores /
linguagens
3eguro
Carregado de informaes
desoritivas
Uesempenho mais lento que .NL1
remoting
0s problemas de transaes /ClD distribuidas sero eacerbados se houver probabilidade de seus
3mart Clients mudarem para o modo oline sem aviso. Nesse caso, um cliente pode colocar uma trava
nos dados e icar oline antes que essa trava possa ser liberada no servidor.
3e no puder evitar dependncia de mensagens dividindo as interaces em mensagens discretas
nicas, voc ter diversas opes de como lidar com as transaes e ainda evitar transaes /ClD
distribuidas:
Lnvie mensagens tightly coupled ao servidor e utilize um coordenador de transaes como o

Microsot BizJalk 3erver para manipular as dependncias de mensagens.


Lscreva voc mesmo cdigos de compensao de transaes no cliente ou servidor. Utilize um

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

chamado de um cliente. / aplicao ajuda-o a diagnosticar o problema, oerecer documentao e


detalhes tcnicos e permite que o tcnico aa um pedido de peas e documente todas as aes
eitas sem ter de se conectar.
0utros cenrios oline envolvem uma conectividade intermitente ou de baia qualidade, como por
eemplo:
/ conectividade entre centros de atendimento ao consumidor por todo o mundo e a rede da

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

3e o uso de um mecanismo light-touch or requerido

3e usurios no administradores precisarem implementar a aplicao

/ 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.

3ua aplicao uncionar em um ambiente de duas camadas.

/coplar irmemente o cliente ao servidor atravs de deinies de esquemas de dados e protocolos

de comunicao.
uiser monitoramento e sincronizao de alterao integrados.

43 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es


uiser coniar no banco de dados para manipular conlitos de reconciliao de dados e minimizar a

quantidade de cdigos personalizados de reconciliao que precisam ser escritos.


No necessitar interagir com mltiplos servios distintos.

0s usurios do windows se conectarem a um banco de dados diretamente atravs de uma rede

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.

Requerer maior controle e leibilidade sobre problemas de reconciliao de dados.

Possuir eperincia no desenvolvimento para escrever cdigos mais avanados de inra-estrutura de

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.

Requerer uncionalidade de negcios especiica (por eemplo, regras e processamento de negcios

personalizados, reconciliao leivel, etc).


Precisar ter controle sobre esquemas de dados armazenados no cliente e leibidade que possa ser

dierente do servidor.
3ua aplicao interagir com mltiplos ou dierentes servios (por eemplo, web 3ervices mltiplos

ou servios atravs de mecanismos Message ueuing, web 3ervices ou RPC).


Precisar de um esquema de segurana personalizado.

3ua aplicao operar em um ambiente de lnternet ou etranet.

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.

Minimizac de interaes ccmplexas de rede.

Adic de recurscs de cache de dadcs.

0erenciamentc de ccnexes.

Desenvclvimentc de um mecanismc Stcre-and-Fcrward.

0erenciamentc de dadcs e de ccnflitcs de regras de negcics.

Interac ccm Web Services CRUD (criac, leitura, atualizac e exclusc).

Usc de uma abcrdagem baseada em tarefa.

Manipulac de dependncias.

Lssa sesso discute essas questes com maiores detalhes:


farerec|meate 4e 0emea|cae Ass|acra|ca
/s aplicaes utilizam um dos dois mtodos de comunicao ao interagir com dados e servios
localizados na rede:
Ccmunicac sincrnica. / aplicao desenvolvida de modo a esperar uma resposta antes de

continuar o processamento (por eemplo, comunicao RPC sincrnica).


Ccmunicac assincrnica. / aplicao comunica-se utilizando uma mensagem ou algum outro

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

quais a coneo de rede temporariamente perdida. /lgumas suspendem temporariamente a


48 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
uncionalidade at que a mesma possa voltar ao modo on-line , enquanto outras aplicaes
oerecem uncionalidade total.
ualidade varivel de ccnexc. / aplicao antecipa o ato de que a coneo de rede tenha

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

para inormar o cliente de que a inormao oi recebida.


40 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
3eu mecanismo 3tore-and-Forward tambm necessita suportar uma uncionalidade adicional, como
criptograia de mensagem, priorizao, bloqueio e sincronizao.
Construir e desenvolver uma arquitetura conivel de mensagens uma tarea complea e requer
eperincia e conhecimentos considerveis. Por essa razo, voc deve considerar produtos comerciais
como o Microsot Message ueuing. Lntretanto, o Microsot Message ueuing requer um sotware no
cliente, o que pode no ser uma opo para todos os 3mart Clients.
0utra opo para o gerenciamento de ila de mensagem usar o 3mart Client 0line /pplication Block,
disponivel em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/c||||ne-
C|01.as.
Lsse bloco de aplicao oerece servios e inra-estrutura que os 3mart Client utilizam para oerecer
capacidades oline para suas aplicaes. 0 bloco suporta a abordagem 3tore-and-Forward de
mensagens utilizando o conceito de ila de mensagem. Por padro, o bloco suporta integrao com o
Message ueuing, dentre outros mecanismos de persistncia de mensagens, memria,
armazenamento isolado, e Microsot 3L 3erver' Desktop Lngine (M3DL).
0ereac|ameate 4e 0eal||tes 4e kegras 4e Negec|es e 4e 0a4es
/s alteraes realizadas em uma aplicao em modo oline devem ser sincronizadas ou reconciliadas
com o servidor ao mesmo tempo. lsso apresenta a possibilidade de um conlito ou outro problema que
deve ser solucionado pela aplicao, pelo usurio ou pelo administrador. uando h conlitos, voc
deve garantir que eles sejam detectados e resolvidos.
De modo dierente dos conlitos de dados, os conlitos de business rule (regras de negcio) no
ocorrem por que h um conlito entre dois dados, mas por que uma business rule oi violada em algum
momento e precisa ser corrigida. /mbos os conlitos podem requerer a manipulao pela aplicao do
cliente ou pelo usurio.
Como um eemplo de um conlito de business rule, suponha que voc tenha uma aplicao de
gerenciamento de pedidos que armazena em cache um catlogo de produto, de modo que um usurio
possa entrar com pedidos no sistema quando estiver oline. 0s pedidos sero, em seguida,
encaminhados para o servidor quando a aplicao voltar ao modo on-line . 3e um pedido contiver um
produto que estava no catlogo de produto armazenado, mas que oi descontinuado hora que a
aplicao voltar ao modo on-line , quando os dados do pedido orem encaminhados para o servidor, ele
veriicar os detalhes do pedido e ver que o produto oi descontinuado. Nesse momento, a aplicao
pode inormar o usurio de que h um problema com o pedido. 3e o produto em questo oi
substituido, o sistema pode dar ao usurio a opo de mudar para um produto dierente. Lsse tipo de
situao no envolve conlito, pois os dados no entram em conlito com nada, ainda que estejam
incorretos e necessitem ser corrigidos.
/inda que ecees de business rule e de conlitos de dados sejam dois tipos dierentes de eceo,
elas podem ser manipuladas, na maioria dos casos, utilizando as mesmas abordagem e inra-estrutura
bsica. Lssa seo discute como manipular conlitos de dados e de business rule em uma aplicao
3mart Client.
Part|c|eaar e Preteger 0a4es
ualquer sistema que permita a mltiplos usurios o acesso a dados compartilhados tem o potencial
para produzir conlitos. /o desenvolver sua aplicao 3mart Client, voc deve determinar se ela
particionar dados e como ela eecutar a proteo, uma vez que esses atores ajudam a determinar a
probabilidade com que os conlitos iro aparecer em sua aplicao.
50 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Part|c|eaameate 4e 0a4es
0 particionamento de dados utilizado em vrias situaes nas quais individuos dierentes tenham
controle sobre sees distintas de dados. Por eemplo, um representante de vendas tem um certo
nmero de contas atribuidas somente a ele. Nesse caso, voc pode particionar os dados de orma que
somente aquele representante de vendas possa alterar aquelas contas. Particionar os dados dessa
orma permite aos usurios azer alteraes arbitrrias aos dados sem o medo de encontrar conlitos.
Desenvolver suas aplicaes de modo a usar o particionamento de dados sempre uma opo muito
restritiva e, portanto, nem sempre uma boa soluo. Contudo, se o particionamento de dados or uma
soluo prtica para uma aplicao especiica, voc deve consider-la, uma vez que ela ajuda a reduzir
o nmero de conlitos produzidos pela aplicao.
Pretee Pess|m|sta
/ proteo pessimista envolve o ato de o sistema usar protees mutuamente eclusivas para garantir
que somente um individuo opere no sistema de cada vez. Jodas as solicitaes aos dados so
serializadas. Por eemplo, antes de sair rua, um vendedor pode acessar um banco de dados e
veriicar as contas dos consumidores de uma determinada rea geogrica.
Lssa veriicao requer a atualizao de uma planilha e o envio de mensagens para que outros
atualizem o status daquela conta. /gora, quando o vendedor estiver na rua, o resto dos uncionrios
saber que ele tem acesso eclusivo aos arquivos daquele consumidor e poder azer modiicaes
vontade. uando ele voltar ao escritrio e sincronizar os novos dados com os dados do servidor, no
haver conlitos. /ps sincronizar os dados, o vendedor destravar a proteo lgica.
0 principal problema da proteo pessimista o de que se vrias pessoas precisarem operar nos
mesmos dados na mesma hora, eles tero que esperar para que os dados estejam disponiveis. Para
3mart Clients ocasionalmente conectados, os dados podem icar protegidos at que um cliente volte
ao modo on-line novamente, o que pode levar um longo tempo. Lssas razes podem azer com que a
proteo pessimista seja boa em termos de integridade de dados, mas ruim em termos de
simultaneidade.
Na realidade, a proteo pessimista apropriada somente para alguns poucos tipos de aplicaes
ocasionalmente conectadas. Lm sistemas de gerenciamento de documentos, por eemplo, os usurios
podem retirar intencionalmente alguns documentos por um periodo longo de tempo enquanto
trabalham com eles. Lntretanto, como a escalabilidade e a compleidade aumentam, a proteo
pessimista torna-se uma escolha menos prtica.
Pretee 0t|m|sta
/ maioria das aplicaes 3mart Client ocasionalmente conectadas utilizam a proteo otimista, que
permite que mltiplos individuos acessem e operem os mesmos dados ao mesmo tempo, presumindo-
se que as alteraes eitas aos dados no entraro em conlito. / proteo otimista permite alta
simultaneidade no acesso aos dados, s custas da reduo da integridade dos dados. Caso haja
conlitos, voc precisar de uma estratgia para lidar com eles.
Na maioria dos cenrios oline, voc precisar utilizar a proteo otimista. /ssim, voc deve esperar
que os conlitos ocorram e estar pronto para reconcili-los quando isso acontecer.
Mea|terameate Ne-ceal|rma4e ee 0a4es Prer|ser|es I1eatat|re)
uando seus usurios trabalharem oline, quaisquer alteraes nos dados no sero conirmadas
como uma alterao no servidor. 3omente quando os dados tiverem sido mesclados com o servidor e
no houver conlitos eles podero sero considerados conirmados. L importante monitorar dados no-
conirmados. uando houver a conirmao, os dados podem ser marcados como conirmados e
podero ser utilizados apropriadamente.
51 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
voc pode desejar eibir dados no-conirmados na interace de usurio da aplicao com uma cor ou
onte dierente para que o usurio possa ter cincia do carter provisrio deles. 0eralmente, suas
aplicaes no devem permitir que os dados sejam utilizados em mais de uma tarea at que eles
sejam conirmados. lsso evita que dados no-conirmados sejam utilizados em atividades que
necessitem de dados conirmados. 0 uso de dados conirmados no garantia de no haver conlitos,
mas ao menos, a aplicao entender que em algum momento o dado oi conirmado e que oi
alterado posteriormente por algum.
Maa|pe|ae 4e 0a4es 0esatea||za4es ISta|e)
Mesmo que os dados no tenham sido alterados, eles podem deiar de ser corretos por no serem
mais atuais. Lsse tipo de dado conhecido como desatualizado. /o desenvolver suas aplicaes 3mart
Client, determine como lidar com dados desatualizados e como evitar que seus 3mart Clients usem
esses dados. lsso particularmente importante para 3mart Clients ocasionalmente conectados porque
os dados esto atualizados quando um cliente icar on-line pela primeira vez, mas t-lo tornado
desatualizados quando icar on-line posteriormente. /lm disso, um vendedor pode criar um pedido
para vrios itens em uma seta-eira utilizando dados vlidos mas, se no enviar o pedido ao servidor
at a segunda-eira seguinte, o custo desses itens pode ter sido alterado.
Nota: 3e uma solioitao de servio enfileirada e estiver pronta para ser enviada quando sua aplioao voltar ao
modo on-line, as ohanoes dessa solioitao enoontrar um oonflito de dados ou uma exoeo aumentam de aoordo
oom o tempo que a solioitao fioar na fila. Por exemplo, se voo enfileirar uma solioitao de servio que
oontenha um pedido para um numero de itens e no desejar enviar a solioitao por um longo tempo, os itens de
seu pedido podem ser desoontinuados ou vendidos.
H uma srie de tcnicas a serem utilizadas para manipular dados desatualizados. 0 uso de metadado
para descrever a validade dos dados e mostrar quando a validade dos dados ir terminar. lsso evita que
dados desatualizados sejam passados para o cliente.
No servidor, opte por veriicar quaisquer dados do cliente para determinar se so desatualizados antes
de permitir que eles se mesclem aos dados no servidor. 3e os dados estiverem desatualizados, voc
ter a oportunidade de garantir que o cliente aa a atualizao dos dados de reerncia antes de re-
enviar os dados ao servidor.
0 risco de dados desatualizados maior com aplicaes ocasionalmente conectadas do que com
aplicaes que estejam sempre conectadas. Por essa razo, suas aplicaes 3mart Client sempre iro
eecutar etapas adicionais de validao para garantir que os dados sejam vlidos. /dicionando uma
validao etra ao sistema, voc tambm garante que seus servios sejam mais tolerantes a dados
desatualizados e, em alguns casos, voc tambm pode ser capaz de manipular automaticamente a
reconciliao no servidor (ou seja, mapear a transao para uma nova conta). s vezes, mensagens
desatualizadas so inevitveis. / orma com que voc lida com esses dados deve pautar-se pelas
regras do negcio que est modelando. Lm algumas instncias, dados desatualizados so aceitveis.
Por eemplo, suponha que um pedido seja eito para um determinado item em um catlogo on-line . 0
item tem um nmero de catlogo que se tornou desatualizado porque o catlogo on-line mudou.
Lntretanto, o item ainda est disponivel e no mudou, a alterao no nmero do catlogo no tem
eeito no sistema e o pedido correto gerado.
Por outro lado, se voc estiver azendo uma transao monetria entre duas contas e uma das contas
tiver sido encerrada, voc no poder eetuar a transao. /qui, a desatualizao dos dados importa.
Uma boa regra geral ter objetos de negcios manipulando dados desatualizados para voc. 3eus
objetos de negcios podem validar os dados que sejam atuais e, se no o orem, podem no azer
nada, podem reconciliar os dados desatualizados com os dados atuais equivalentes, passar a
inormao de volta ao cliente para ser atualizada ou usar regras de ne'gocios para automatizar uma
resposta apropriada.
52 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
/ reconciliao de dados pode ocorrer no cliente, no servidor ou em ambos. Manipular a reconciliao
no servidor permite sua aplicao detectar prontamente um conlito. Manipular a reconciliao no
cliente sobrecarrega algumas das responsabilidades do usurio ou administrador, que podem ser
solicitados a resolver manualmente os conlitos.
No h um melhor mtodo para manipular dados desatualizados. 3uas regras de negcios podem ditar
que o servidor seja o melhor lugar para manipular dados desatualizados se o cliente no puder
solucionar o conlito. 3e o servidor no tiver inormaes suicientes para manipular automaticamente a
situao, pode ser necessrio solicitar que o cliente limpe seus dados antes de sincroniz-los com o
servidor. Da mesma orma, voc pode decidir que os dados desatualizados sejam bons para sua
aplicao e nesse caso no h nada com que voc deva se preocupar.
keceac|||ar 0eal||tes
/o eaminar os requisitos de reconciliao de dados para sua organizao, voc deve considerar a
orma com que a organizao trabalha. Lm alguns casos, os conlitos so improvveis porque
individuos dierentes so responsveis por elementos dierentes de dados. Lm outros casos, os
conlitos iro eistir com maior reqncia e voc deve garantir que tenha mecanismos para lidar com
eles.
No importando quais precaues voc tome, provvel que um cliente envie dados para um servio
de rede que resultem em uma violao de regras de negcios ou conlito de dados. uando um conlito
ocorre, o servio remoto deve oerecer o maior nmero possivel de detalhes sobre o conlito. Lm alguns
casos que o conlito de dados no seja um grande problema e possa ser manipulado automaticamente
pela aplicao ou pelo servidor. Por eemplo, imagine um sistema de gerenciamento de relacionamento
com o cliente (CRM) no qual o usurio altere um nmero de teleone de consumidor. uando a
alterao atualizada no servidor, descobre-se que outro usurio tambm modiicou o nmero de
teleone. voc opta por desenvolver seu sistema de orma com que a ltima alterao seja sempre a
prevalecente ou, ento, enviar o conlito para um administrador. 3e o administrador souber quem ez a
alterao e quando, ele pode tomar a deciso sobre qual manter. 0 importante que o servidor e a
aplicao orneam suicientes inormaes detalhadas para habilitar a manipulao automtica ou
oerecer inormaes suicientes para um usurio ou administrador para que ele possa reconciliar o
conlito.
/ reconciliao de dados pode ser um problema complicado e dependente do cenrio. Jodo negcio e
toda aplicao ter regras, requisitos e premissas ligeiramente dierentes. Lntretanto, voc tem trs
opes gerais para reconciliao de dados:
Reccnciliac autcmtica de dadcs nc servidcr

Reccnciliac perscnalizada nc cliente

Reccnciliac terceirizada

L til eaminar cada um dos trs itens.


keceac|||ae Aetemat|ca 4e 0a4es ae Serr|4er
Lm alguns casos, desenvolva sua aplicao de orma que o servidor use regras de negcios e
processos automatizados para manipular conlitos sem aetar o cliente. voc certiica que a ltima
alterao sempre prevalea, que haja a uso entre os dois elementos de dados ou utilize uma lgica
business mais complea.
Manipular conlitos no servidor bom para o aproveitamento e evita que o usurio ique proundamente
envolvido, ou seja, perturbado pelo processo de reconciliao. voc deve manter o cliente sempre
inormado sobre qualquer ao de reconciliao tomada; por eemplo, retornando um relatrio de
reconciliao para o cliente, eplicando o conlito e como ele oi resolvido. lsso permite que o cliente
mantenha os dados locais consistentes e inorma o usurio sobre o uturo da reconciliao.
53 0ap|te|e 4 - Smart 0||eats 0cas|eaa|meate 0eaecta4es
Por eemplo, suponha que uma aplicao permita aos usurios entrar com inormaes de pedido para
itens em um catlogo que seja armazenado localmente em cache. 3e o usurio pedir um item que
tenha sido descontinuado mas, substituido por um modelo similar mais novo, o servio de pedido pode
optar por substituir o item original pelo mais recente. 0 cliente ser, ento, inormado sobre a alterao
para que ele possa modiicar o estado local de maneira apropriada.
keceac|||ae Perseaa||za4a ae 0||eate
Lm alguns casos, o cliente o melhor lugar para eecutar a reconciliao porque ele sabe mais a
respeito do conteto da solicitao original. / aplicao pode ser capaz de resolver o conlito
automaticamente. Lm outros casos, o usurio ou um administrador pode determinar como um conlito
deve ser resolvido.
Para garantir a reconciliao eetiva por parte do cliente, o servio deve enviar ao cliente dados
suicientes para que o cliente tome uma deciso inteligente no tocante a como solucionar o conlito.
0s detalhes eatos do conlito devem ser reportados de volta para o cliente de modo que ele ou o
usurio ou um administrador possam determinar a melhor orma de resolver o problema.
keceac|||ae 1erce|r|za4a
Lm alguns casos, a escolha ser que um terceiro reconcilie conlitos de dados. Por eemplo, um
administrador ou supervisor pode ser solicitado a reconciliar conlitos importantes de dados. Lles so
os nicos usurios com autoridade para determinar o curso certo de ao. Nesse caso, o cliente
precisa ser inormado de que a deciso est pendente. 0 cliente tem a capacidade de continuar
usando valores provisrios, mas de maneira geral ele ter que esperar at que o conlito subjacente
tenha sido resolvido. uando isso acontecer, o cliente ser inormado. De outro modo, o cliente pode
eaminar periodicamente para determinar o status e continuar quando receber o valor reconciliado.
laterae cem weh Serr|ces 0k00
Muitos web 3ervices so criados com interaces CRUD (Create, Read, Update, Delete). Lssa seo
cobre vrias estratgias para criar aplicaes ocasionalmente conectadas que consumam tais servios.
0reate I0r|ar)
Criar registros deveria ser uma tarea relativamente simples em um servio da web CRUD, contanto
que voc gerenciasse corretamente a criao dos registros. 0 ponto mais importante identiicar de
maneira nica cada registro criado. Na maioria das situaes, voc az isso utilizando um identiicador
nico como a chave primria em seus registros. / seguir, mesmo que dois registros aparentemente
idnticos sejam criados em clientes separados, os registros sero vistos como dierentes quando
houver a merge replication.
Nota: Lm alguns oasos, voo pode desejar que os registros no sejam tratados oomo unioos. Nesses oasos, voo
pode gerar uma exoeo quando os dois registros entrarem em oonflito.
H vrios mtodos para criar identiicadores nicos em um cliente oline, incluindo:
Lnvio do registro como um objeto de transerncia de dados (DJ0) sem lD nico e permitindo que o

servidor atribua o lD.


Uso de um identiicador globalmente nico (0UlD) que pode ser atribuido pelo cliente, como um

System.0uid.
/tribuio de um lD temporrio no cliente e a substituio pelo lD real no servidor.

/tribuio de um bloco de lDs nicos para cada cliente.

Uso do nome do usurio ou lD para preiar todos os lDs alocados e increment-los no cliente de

modo que elas sejam globalmente nicas por padro.


54 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
kea4 Iler)
No h conlitos de dados com operaes de leitura, uma vez que elas so, por deinio, operaes
somente-leitura. Lntretanto, os problemas ainda podem ocorrer com operaes de leitura em 3mart
Client ocasionalmente conectados. voc deve armazenar em cache quaisquer dados que precisem ser
lidos no cliente antes de ele entrar em modo oline. Lsses dados podem tornar-se desatualizados
antes de o cliente voltar ao modo on-line , levando ocorrncia de dados incorretos no cliente e
problemas quando houver a sincronizao no servidor. Para maiores inormaes sobre como lidar com
dados desatualizados, consulte Manipulao de Dados Desatualizados mais acima, nesse capitulo.
0p4ate IAtea||zar)
/s atualizaes de dados levam, reqentemente, a conlitos de dados porque mltiplos usurios
podem atualizar os mesmos dados, levando a conlitos quando ocorrer a merge replication. voc utiza
uma srie de mtodos para minimizar a ocorrncia de conlitos e resolv-los quando ocorrerem. Para
maiores inormaes, consulte 0erenciamento de Conlitos de Business Rules e de Dados mais
acima, nesse capitulo.
0e|ete Ixc|e|r)
Lcluir um registro uma operao pontual pois um registro s pode ser ecluido uma vez. Jentar
ecluir o mesmo registro duas vezes no produzir nenhum eeito no sistema. Lntretanto, h algumas
coisas que voc deve ter em mente ao desenvolver sua aplicao e servio da web para manejar
ecluses. Primeiramente, voc deve marcar os registros como provisoriamente ecluidos no cliente e,
a seguir, enileirar as solicitaes de ecluso no servidor. lsso signiica que, se o servidor no or capaz
de ecluir um registro por alguma razo, a ecluso poder ser deseita no cliente.
/ssim como acontece ao criar registros, voc tambm precisa certiicar-se de que esteja se reerindo
aos registros utilizando um identiicador nico. lsso assegurar que voc sempre ecluir o registro
correto no servidor.
0se 4e ema Aher4agem 8asea4a em 1arela
/ abordagem baseada em tarea utiliza um objeto para encapsular uma unidade de trabalho como
sendo uma tarea de usurio. 0 objeto 1arefa responsvel por tomar conta das interaes de
interace de usurio, estado e servio necessrios para que o usurio complete uma tarea especiica.
/ abordagem baseada em tarea particularmente til quando voc desenvolve e constri aplicaes
3mart Client com capacidade oline, uma vez que ela permite que voc encapsule os detalhes do
comportamento oline em um nico lugar. lsso permite interace de usurio ocar-se em questes
relacionadas Ul, mais do que em lgica de processamento. / granularidade e detalhes de suas
tareas depende do cenrio eato da aplicao. /lguns eemplos de tareas so:
Registro de inormaes de pedidos

/lteraes de detalhes de contatos de consumidores

Composio e envio de mensagens eletrnicas

/tualizao de status de pedido

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 ccnfirmadc. lndica que a tarea oi sincronizada e conirmada como bem-sucedida.

Status de ccnflitc. lndica que um erro ocorreu durante a sincronizao. 0utras propriedades iro

ornecer detalhes sobre o conlito ou erro.


Ccncludc. lndica a porcentagem de concluso ou marca a tarea como concluida.

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

senhas e dados conidenciais) e a transmisso pela aplicao so seguros. / criptograia de dados


sensiveis garante que os dados no estaro disponiveis em teto simples; dependendo da escolha
do algoritmo, ele tambm pode garantir que a inormao no ser manuseada para manter a
integridade.
Auditcria e lcg-in. lsso envolve manter um registro dos eventos e das aes dos usurios. voc

deve considerar azer o log-in de aes ou atividades-chave de usurios no servidor ou log-las de


maneira segura no cliente, uma vez que registros de log em computadores de cliente podem ser
meidos ou limpos.
0erenciamentc de excec. lsso garante que a aplicao lide com ecees de maneira

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.

uando a aplicao eecutada.

uando o usurio acessa dados mantidos localmente.

uando o usurio acessa servios eternos da rede.

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 bsica H11P

Autenticac digest H11P

Autenticac baseada em certificadc

Autenticac baseada em Web Services Enhancements (WSE)

Autenticac perscnalizada

Aeteat|cae |ategra4a 4e w|a4ews


Com a autenticao integrada do windows, o usurio autenticado ao logar no computador utilizando
uma conta do windows vlida. /s credenciais podem ser uma conta local (uma conta local no
computador) ou uma conta de dominio (um membro vlido de um dominio do windows). / identidade
estabelecida durante o login usada de orma transparente pela aplicao para acessar recursos para
toda a durao da sesso do usurio. lsso signiica que suas aplicaes podem ornecer acesso
continuo a recursos de rede, como servios da web, de um modo seguro, sem ter que solicitar ao
usurio credenciais adicionais ou mesmo repetidas.
Nota: 0 aoesso aos reoursos da rede sera oontinuo somente se os reoursos de rede tambm utilizarem a
autentioao integrada do windows.
/ autenticao integrada do windows utiliza um de dois protocolos de autenticao: Kerberos ou NJLM.
Lssas tecnologias no passam um nome de usurio e uma senha pela rede para autenticar ou validar o
usurio. Como resultado, sua aplicao ou inra-estrutura no tem que ornecer segurana adicional
para gerenciar credenciais durante o trnsito.
/plicaes cliente que coniam na segurana do windows utilizam uma implementao da interace
IIdentity chamada WindcwsIdentity.
Nota: 0 .NL1 lramework tambm forneoe a interfaoe intimamente relaoionada IPrncpa|. Para maiores
informaes sobre as interfaoes IIdentty e IPrncpa|, oonsulte 'Autorizao', mais adiante nesse oapitulo.
weh Serr|ces qee 0t|||zam a Aeteat|cae lategra4a 4e w|a4ews
Para web 3ervices que sejam conigurados para a autenticao integrada do windows, a aplicao
cliente pode ornecer credenciais de usurio atualmente logado para ins de autenticao antes de
azer chamadas a servio da web. /o adicionar uma reerncia a um servio da web em sua aplicao
a partir de dentro do sistema de desenvolvimento Microsot visual 3tudio .NLJ, uma classe proy
gerada automaticamente e adicionada a seu projeto de modo a acessar, de maneira programtica, o
servio da web. 0 cdigo a seguir ilustra como conigurar as credenciais do usurio que est
atualmente logado.
04 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
My5ev1ce sev1ce = neW My5ev1ce{} // A poxy fo a Web sev1ce.
sev1ce.Cedenf1a1s = Cedenf1a1Cache.Defau1fCedenf1a1s
sev1ce.5ome5ev1ceMefhod{} // Ca11 fhe Web sev1ce.
Nesse caso, o DefaultCredentials utiliza o conteto de segurana no qual a aplicao esteja sendo
eecutado, que geralmente as credenciais windows (nome de usurio, senha e dominio) do usurio
que esteja eecutando a aplicao.
Aeteat|cae 8as|ca 11P
/ autenticao bsica HJJP ornecida pelo ll3. Com a autenticao bsica, o ll3 solicita aos usurios
uma conta e senha vlidas do windows. Lssa combinao passada do cliente para o servidor como
teto simples codiicado e utilizada para autenticar o usurio no servidor web.
Nota: Para proteger a autenticao bsica, proteja o canal de comunicao entre o cliente e o servidor
(por eemplo, habilitando o 3ecure 3ockets Layer [33L] no servidor) para garantir que a combinao
nome de usurio/senha seja criptograada e no possa ser alterada ou interceptada em trnsito.
Proteja tambm as senhas localizadas no servidor. Lntretanto, o 33L proteger a comunicao entre
dois pontos inais deinidos. 3e voc solicitar a proteo da comunicao entre mais de dois pontos,
utilize a segurana baseada em mensagem.
weh Serr|ces qee 0t|||zam Aeteat|cae 8as|ca
Para uma aplicao cliente interagindo com um servio da web conigurado para autenticao bsica,
o cliente pode aceitar credenciais de usurio vlidas utilizando uma caia de dilogo de logon e us-la
para autenticao. 0 cdigo abaio ilustra como conigurar as credenciais do usurio para o proy do
servio da web espera de autenticao bsica.
Cedenf1a1Cache cache = neW Cedenf1a1Cache{}
cache.Add{ neW u1{ sev1ce.u1 }, // Web sev1ce ukL.
"8as1c", // 8as1c Aufhenf1caf1on.
neW NefWokCedenf1a1{ useName, passWod, doma1n } }
sev1ce.Cedenf1a1s = cache
Nesse caso, userName (nome de usurio), passwcrd (senha), e dcmain (dominio) so aceitos como
parte da caia de dilogo de logon.
Aeteat|cae 0|gest 11P
/ autenticao digest HJJP oerece os mesmo recursos da autenticao bsica HJJP, mas envolve uma
orma dierente de transmisso das credenciais de autenticao. /s credenciais de autenticao so
convertidas em um processo de mo nica chamado hashing.
0 resultado desse processo chamado de hash, ou message digest, e no possivel descriptogra-lo
utilizando as tecnologias atuais.
/ autenticao digest ocorre da seguinte orma:
1. 0 servidor envia ao navegador determinadas inormaes que sero utilizadas no processo de
autenticao.
2. 0 navegador adiciona essa inormao ao nome de usurio e senha, juntamente com algumas
outras inormaes, e usa hashes. /s inormaes adicionais ajudam a evitar que algum copie o
valor hash e utilize-a novamente.
05 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
3. 0 hash resultante enviado pela rede ao servidor juntamente com as inormaes adicionais em
teto limpo.
4. 0 servidor adiciona as inormaes etras a uma cpia de teto simples que ele tenha da senha do
cliente e usa hash em todas as inormaes.
5. 0 servidor compara o valor hash recebido com o que acabou de produzir.
6. 0 acesso concedido apenas se os dois valores orem idnticos.
/s inormaes complementares so adicionadas senha antes do hashing de orma que ningum
possa capturar o hash da senha e utiliz-lo para azer-se passar pelo cliente verdadeiro. 0s valores so
adicionados para ajudar a identiicar o cliente, o computador cliente, o realm, ou o dominio ao qual o
cliente pertena. Um time stamp tambm adicionado para evitar que um cliente use uma senha que
tenha sido revogada.
Pelo ato de a autenticao digest enviar a senha pela rede de orma compilada, ela nitidamente
preerivel em relao autenticao bsica, especialmente se voc utilizar a autenticao bsica sem
criptograar o canal de comunicao. Dessa orma, voc deve usar a autenticao digest em vez da
autenticao bsica sempre que possivel.
Nota: Assim oomo aoonteoe oom a autentioao basioa, a autentioao digest oonoluida somente se o servidor
do dominio para o qual seja feita uma solioitao tiver uma oopia em texto simples da senha do usuario solioitante.
Pelo fato de o oontrolador do dominio ter oopias em texto simples de senhas, oertifique que esse servidor esteja
protegido tanto de ataques fisioos quando de rede.
Aeteat|cae 8asea4a em 0ert|l|ca4e
0s certiicados podem permitir que aplicaes de cliente e servidor autentiquem-se mutuamente de
modo a estabelecer uma coneo segura utilizando chaves digitais instaladas no computador. /
aplicao cliente pode usar certiicados cliente para identiicar-se para o servidor, da mesma orma que
o servidor pode identiicar-se para o cliente utilizando um certiicado de servidor. Um terceiro, que seja
mutuamente conivel, chamado autoridade de certiicado, pode conirmar a identidade dos
certiicados. Certiicados cliente podem ser mapeados para contas Microsot windows no servio de
diretrio Microsot /ctive Directory .
voc pode deinir um site, de orma que usurios sem certiicados possam logar como convidados;
entretanto, os usurios com certiicados sero logados como os usurios para aos quais os respectivos
certiicados mapearem. voc pode, ainda, personalizar o site com base no certiicado.
Para autenticar usurios individuais, voc utiliza uma tcnica chamada mapeamento one-to-one na
qual, por eemplo, qualquer certiicado que contenha um nome comum de empresa seja mapeado
para uma nica conta. 3e voc precisar autenticar todos os usurios de um grupo ou organizao em
particular, utilize o mapeamento many-to-one no qual, por eemplo, qualquer certiicado que contenha
um nome comum de empresa seja mapeado para uma nica conta.
Na autenticao baseada em certiicado, as aplicaes cliente utilizam certiicados que podem ser
autenticados por servios da web. Nesse caso, a aplicao cliente assina digitalmente as mensagens
30/P utilizando certiicados X.509 para garantir que a mensagem seja de uma onte conivel e no
tenha sido alterada durante o trnsito antes de atingir o servio da web designado.
Uma importante considerao da autenticao baseada em certiicado como gerenciar situaes nas
quais um certiicado no deva mais ser vlido. Por eemplo, se um empregado utiliza um certiicado
para ser autenticado e o empregado demitido, o certiicado no deve mais permitir que o usurio
acesse recursos. Dessa orma, importante que sua inra-estrutura de segurana de certiicado inclua
a administrao das listas de revogao de certiicado. Lssas listas esto presentes no servidor e
devem ser veriicadas a cada vez que o cliente se conectar a um recurso de rede.
00 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Listas de revogao baseadas no servidor no podem ser veriicadas quando um 3mart Client entrar
em modo oline, assim, h chances de um usurio acessar recursos localmente no cliente que ele no
seria capaz de acessar no servidor. Para ajudar a contornar esse problema, voc pode optar por ter
periodos curtos de tempo de contrato dos certiicados de clientes. Lsses periodos curtos oram o
cliente a conectar-se regularmente a um servidor de certiicado e checar se o certiicado no tenha sido
revogado antes de renovar o contrato e permitir a coneo de parte do servidor da aplicao.
Para maiores inormaes, consulte 3obre Certiicados em
tt.//www.m|crcsc|t.ccm/resc0rces/occ0mentat|cn/w|nocwsser./2003/stanoaro/rcooccs/en-
0s/sec_a0t|_certaoc0t.as.
Aeteat|cae hasea4a em wS
voc pode assinar as mensagens 30/P de maneira programtica para um servio da web utilizando a
verso 2.0. do web 3ervices Lnhancements. 0 w3L 2.0 uma implementao que suporta web
3ervices padres como w3-3ecurity, w3-3ecureConversation, w3-Jrust, w3-Policy, w3-/ddressing,
w3-Reerral e w3-/ttachments e Direct lnternet Message Lncapsulation (DlML). 0 w3L oerece um
modelo de programao para implementar vrias especiicaes por ele suportadas.
/plicaes cliente que utilizam o w3L podem usar um dos mtodos Find (por eemplo,
FindCertificateyHash ou FindCertificateyKeyIdentifier) na classe X509CertificateStcre para
selecionar um certiicado do armazenamento, criar uma assinatura digital utilizando o certiicado,
adicion-lo ao cabealho 30/P w3-3ecurity, e chamar o servio da web. Como alternativa, a aplicao
cliente tambm pode abrir o armazenamento de certiicado do usurio atualmente logado, conorme
demonstrado no seguinte eemplo de cdigo.
X509Cef1f1cafe5foe sfoe
sfoe = X509Cef1f1cafe5foe.Cuenfuse5foe{
X509Cef1f1cafe5foe.My5foe }
boo1 open = sfoe.Openkead{}
Para maiores inormaes, consulte web 3ervices Lnhancements em
|tt.//mson.m|crcsc|t.ccm/weoser.|ces/o0||o|ng/wse/oe|a0|t.as.
Para mais detalhes sobre o uso de certiicados cliente, consulte /ssinar uma Mensagem 30/P
Utilizando um Certiicado X.509 na documentao do w3L 2.0.
Aeteat|cae Perseaa||za4a
Lm alguns casos, a autenticao padro oerecida pelo windows no apropriada para suas
aplicaes, e voc no precisar desenvolver seu prprio ormulrio de autenticao. Felizmente, o
.NLJ Framework ornece opes para ajud-lo a desenvolver uma soluo personalizada de
autenticao.
0 .NLJ Framework suporta uma implementao de IIdentity, chamada 0enericIdentity. Use o
0enericIdentity ou criar sua prpria classe de identidade personalizada. Desenvolver uma soluo
personalizada de autenticao pode ser diicil, uma vez que voc segue seus prprios passos para
certiicar-se de que o mtodo seja seguro. voc tambm pode ter que manter um armazenamento
separado para suas identidades.
0T 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
kece|her e a||4ar 0re4eac|a|s 4e 0sear|es
3eja qual or a orma de autenticao utilizada, necessrio coletar credenciais de usurios que
possam ser validadas. Para usurios que utilizam a autenticao integrada do windows, voc poder
precisar coletar credenciais eistentes, j para uma soluo de autenticao personalizada, voc
precisar recolher credenciais de modo seguro atravs de sua prpria caia de dilogo de logon.
Nota: No armazene oredenoiais de usuarios em seu oodigo por mais tempo do que seja neoessario. Ue modo
partioular, no armazene oredenoiais em variaveis globais que forneoem aoesso a elas por meio de mtodos ou
propriedades publioamente aoessiveis, e no as salve em disoo.
kece|her 0re4eac|a|s 4e 0sear|es Atea|meate lega4es
3e voc estiver usando a autenticao integrada do windows, seus usurios sero logados no inicio da
sesso do windows. 3uas aplicaes podem, ento, usar essas inormaes para garantir que elas
tenham as credenciais apropriadas para serem eecutadas.
0 cdigo a seguir demonstra as uncionalidades bsicas.
us1ng 5ysfem.5ecu1fy.P1nc1pa1
// Gef p1nc1pa1 of fhe cuenf1y 1ogged 1n use.
W1ndoWsP1nc1pa1 Wp = neW W1ndoWsP1nc1pa1{
W1ndoWsldenf1fy.GefCuenf{} }
// D1sp1ay fhe cuenf use name.
1abe11.1exf = "use:" + Wp.ldenf1fy.Name
// Defem1ne 1f use 1s paf of a W1ndoWs goup.
1f{ Wp.lslnko1e{ "YouDoma1n\\YouW1ndoWsGoup" } }
{
// ls a membe.
}
e1se
{
// ls nof a membe.
}
kece|her 0re4eac|a|s 4e 0sear|es 0t|||zaa4e ema 0a|xa 4e 0|a|ege 4e legea
3e voc estiver desenvolvendo sua prpria caia de dilogo de logon para aceitar credenciais de
usurios, voc precisar tomar algumas medidas para certiicar-se de que tenha eito tudo de acordo
com os requisitos de segurana da sua organizao (como o reoro das politicas ortes de senha e
garantir que as senhas epirem periodicamente). Considere as seguintes diretrizes ao desenvolver sua
caia de dilogo de logon:
Nc ccnfie cegamente em dadcs de entrada de usuric. Caso contrrio, um usurio com ms

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

usurios autorizados, autentique os usurios quando a aplicao or eecutada utilizando um dos


mecanismos de autenticao ornecidos pelo ll3.
3e sua aplicao ornecer uncionalidade sensivel ou acesso a dados mantidos localmente,

certiique-se de que os usurios estejam apropriadamente autenticados antes de permitir o acesso.


3e sua aplicao requerer autenticao personalizada, certiique-se de que sua aplicao eija o

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

a uncionalidades sensiveis ou a dados sensiveis.


0aranta que as credenciais de usurios no sejam transmitidas de maneira desprotegida pela rede.

/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

Executar demandas imperativas utilizandc c cbjetc PrincipalPermissicn

Executar verificaes de funes utilizandc c mtcdc IsInRcle

Executar verificaes de funes para autenticac perscnalizada

xecetar 0emaa4as 0ec|arat|ras 0t|||zaa4e e Pr|ac|pa|Perm|ss|eaAttr|hete


voc pode posicionar demandas ao nivel da classe, ou ao nivel do membro em mtodos, propriedades
ou eventos individuais. 3e voc posicionar uma demanda declarativa ao nivel da classe e do membro, a
demanda declarativa ao nivel do membro substitui a demanda ao nivel da classe.
T1 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Usuro 1
Usuro 2
Usuro 3
Pape| 1
Pape| 2
Pape| 3
Permsso 1
Permsso 2
Permsso 3
0 seguinte eemplo de cdigo eibe uma demanda declarativa para o objeto PrincipalPermissicn.
// Dec1aaf1ve examp1e.
|P1nc1pa1Pem1ss1onAff1bufe{ 5ecu1fyAcf1on.Demand, ko1e="1e11e" }]
vo1d 5ome1e11eOn1yMefhod{}
{
}
xecetar 0emaa4as lmperat|ras 0t|||zaa4e e 0hjete Pr|ac|pa|Perm|ss|ea
voc pode eecutar demandas imperativas chamando, de maneira programtica, o mtodo Demand do
objeto PrincipalPermission, conorme demonstrado no seguinte eemplo de cdigo.
// Pogammaf1c examp1e.
pub11c 5omeMefhod{}
{
P1nc1pa1Pem1ss1on pemCheck = neW P1nc1pa1Pem1ss1on{ nu11,
"1e11e" }
pemCheck.Demand{}
// On1y 1e11es can execufe fhe fo11oW1ng code.
// Non membes of fhe 1e11e o1e esu1f 1n a secu1fy excepf1on.
. . .
}
Uma vantagem de chamar o mtodo de maneira programtica que voc pode determinar se o
principal est em mais de um papel. 0 .NLJ Framework no permite a voc azer isso de maneira
declarada. 0 seguinte cdigo de eemplo demonstra como eecutar a veriicao.
// us1ng P1nc1pa1Pem1ss1on.
P1nc1pa1Pem1ss1on pemCheck1e11es = neW P1nc1pa1Pem1ss1on{ nu11,
"1e11e" }
pemCheck1e11es.Demand{}
P1nc1pa1Pem1ss1on pemCheckMg = neW P1nc1pa1Pem1ss1on{ nu11,
"Manage" }
pemCheckMg.Demand{}
xecetar er|l|caes 4e feaes 0t|||zaa4e e Mete4e lslake|e
voc pode optar por acessar os valores do objeto principal diretamente e eecutar as veriicaes sem
um objeto PrincipalPermissicn. Nesse caso, voc pode ler os valores do thread principal atual ou usar
o mtodo IsInRcle para eecutar a autorizao, conorme demonstrado no seguinte eemplo de
cdigo.
// us1ng lslnko1e.
1f { 1head.CuenfP1nc1pa1.lslnko1e{ "1e11e" } &&
1head.CuenfP1nc1pa1.lslnko1e{ "Manage" } }
T2 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
{
// Pefom p1v11eged opeaf1on.
}
xecetar er|l|caes 4e feaes para Aeteat|cae Perseaa||za4a
3e sua aplicao no or baseada em windows, voc pode preencher, atravs de cdigo, o objeto
0enericPrincipal com um conjunto de unes obtidos de um armazenamento de dados de
autenticao personalizada como um banco de dados 3L 3erver, conorme demonstrado no seguinte
eemplo de cdigo.
Gene1cldenf1fy useldenf1fy = neW Gene1cldenf1fy{ "8ob" }
// 1yp1ca11y o1e names Wou1d be ef1eved fom a cusfom dafa sfoe.
sf1ng|] o1es = neW 5f1ng|]{"Manage", "1e11e" }
Gene1cP1nc1pa1 useP1nc1pa1 = neW Gene1cP1nc1pa1{ useldenf1fy,
o1es }
1f { useP1nc1pa1.lslnko1e{ "1e11e" } }
{
// Pefom p1v11eged opeaf1on.
}
0|retr|zes 4e Aeter|zae
/ autorizao um ator critico para controlar o acesso de usurios s uncionalidades da aplicao e
recursos acessados. Uma autorizao imprpria ou raca leva publicao da inormao e
manipulao dos dados. Considere as seguintes diretrizes de autorizao:
Use gatekeepers mltiplcs cnde fcr pcssvel fazer as verificaes de autcrizac ac

acessar recurscs cu executar cperaes. 0 uso de veriicaes no cliente, combinado com


veriicaes no servidor, ornece um alto nivel de deesa para evitar um ataque de usurio com ms
intenes que consiga passar por um dos gatekeepers. 0s gatekeepers comuns no servidor incluem
permisses web ll3, permisses NJF3 do sistema para arquivos, autorizao de arquivo de servio
da web (que se aplica somente com autenticao windows) e demandas principais de permisso.
Autcrize c acessc acs recurscs dc sistema utilizandc c ccntextc de segurana dc usuric.

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

verificaes imperativas utilizandc c mtcdc IsInRcle. 0 .NLJ Framework verso 1.1 no


permite e checa para ser programado de maneira declarativa; entretanto, elas podem ser
eecutadas de maneira programtica no interior do mtodo, conorme demonstrado no seguinte
eemplo de cdigo.
// Check1ng fo mu1f1p1e o1es.
1f { 1head.CuenfP1nc1pa1.lslnko1e{ "1e11e" } &&
1head.CuenfP1nc1pa1.lslnko1e{ "Manage" } }
{
// Pefom p1v11eged opeaf1on.
}
Use a segurana de acessc ac cdigc para autcrizar acessc dc cdigc de chamada para

recurscs privilegiadcs cu cperaes, baseadcs em evidncia, ccmc um ncme fcrte cu lccal


de mdulc. Para maiores inormaes, consulte 3egurana de /cesso ao Cdigo, mais adiante
nesse capitulo.
Aeter|zae 4e feac|eaa||4a4e qeaa4e e 0||eate sta 0ll||ae
uando os usurios esto conectados rede, eles podem ser autorizados diretamente contra um
armazenamento de autorizaes mas, quando no esto, eles podem ainda necessitar de autorizao.
ualquer orma de autorizao to orte quanto o mecanismo de autenticao utilizado.
3e voc permitir autenticao annima, voc deve tomar muito cuidado em relao a quais
uncionalidades so permitidas ao acesso dos usurios e, de maneira geral, no deve autorizar que os
usurios acessem recursos do sistema.
3e voc estiver autenticando usurios para utilizar uma aplicao, voc pode deiar que o windows aja
como o nico gatekeeper para determinar quais recursos estejam disponiveis para o peril do usurio
logado. Nesse caso, ao usurio sempre permitido o acesso aos recursos locais do sistema. voc
pode optar por criar dierentes verses da mesma aplicao para unes dierentes.
uando o usurio est conectado rede, ele tem a permisso de instalar apenas a verso da
aplicao eita para seu papel. / seguir, quando o usurio eecutar a aplicao oline, a uncionalidade
correta automaticamente ornecida sem a necessidade de a aplicao estar conectada.
0 8|ece 4e Ap||cae Aeter|zae e Perl||
/ Microsot oerece um bloco de aplicao que ornece a inra-estrutura para simpliicar a incluso da
uncionalidade de autorizao em sua aplicao.
0 Bloco de /plicao /utorizao e Peril ornece uma inra-estrutura para autorizao baseada em
unes e acesso inormaes de peril. 0 bloco permite a voc:
/utorizar um usurio de uma aplicao ou sistema.

Usar mltiplos ornecedores de armazenamento de autorizao.

Plug-in business rules para validao de ao.

Mapear identidades mltiplas para um nico usurio, etendendo a idia de uma identidade para

incluir mtodos de autenticao.


/cessar inormaes de peril que possam ser armazenadas em mltiplos armazenamentos de peril.

T4 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats


Para mais inormaes, consulte /uthorization and Proile /pplication Block em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/a0t|rc.as.
a||4ae 4e atra4a
/plicaes com raca validao de entrada podem ser comprometidas por dados de entrada maliciosos
em um ataque. / opo de validar os dados de entrada do usurio uma das principais ormas de
deesa para sua aplicao. Considere as seguintes diretrizes de validao de dados de entrada para
sua aplicao 3mart Client:
Certiique-se de que sua aplicao 3mart Client valide todos os dados de entrada antes de

processar ou pass-los para recursos e mdulos downstream.


Lecute uma validao completa dos dados de entrada do usurio se estiver passando-os para um

/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

aplicao web. valide os dados no cliente e, a seguir, valide-os novamente no servidor a im de


evitar dados maliciosos de entrada que possam passar ilesos pela validao por parte do cliente.
Nunca permita que os usurios entrem queries 3L diretamente. 3empre ornea queries pr-

estabelecidas ou padronizadas que so completamente revisadas em busca de problemas de


segurana. Permitir que os usurios entrem queries 3L diretamente levanta a possibilidade de
ataques 3L de injeo.
Restrinja e valide dados de entrada de usurio para valores ou padres corretos conhecidos, e no

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

desenvolvimento e ajudar a manuteno utura.


T5 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
Para maiores inormaes, consulte validao de Dados de Lntrada no Capitulo 4 Diretrizes de
Design 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.
Maa|pe|ae 4e 0a4es Seas|re|s
3e voc estiver acostumado a desenvolver aplicaes web, voc saber a importncia de proteger
dados armazenados e dados em trnsito. 0s dados que voc armazena em um servidor web so
tipicamente gravados em um local isicamente seguro que j esteja bem protegido para evitar ataques.
Lm aplicaes 3mart Client, voc tambm precisa considerar os dados que residam no cliente. Caso
esses dados sejam sensiveis, importante manipul-los de modo a garantir sua segurana. Para
proteger dados em trnsito, voc pode proteger a camada de transporte utilizando 33L e proteger o
contedo da mensagem as erramentas de criptograia de w3-3ecurity ou Message ueuing.
/penas os dados para os quais o usurio tem acesso autorizado devem estar disponiveis para a
aplicao cliente. 3e a aplicao cliente puder ser usada por mais de uma pessoa em um mesmo
computador, os dados associados a cada usurio individual devem ser considerados dados sensiveis, e
os devidos passos devem ser dados para garantir que apenas usurios autorizados possam acess-los.
0s dados sensiveis incluem quaisquer dados que um atacante possa considerar teis para acessar ou
modiicar, seja por que a inormao conidencial, ou por que ela possa ajudar em um ataque. 0s
dados sensiveis podem ser dados que o servidor ornece ao cliente, mas tambm podem incluir
arquivos de conigurao de aplicao, bases de dados locais, ou inormaes de registro.
Lm geral, tente garantir que os dados sensiveis no sejam armazenados em cache localmente.
Contudo, no caso de uma aplicao 3mart Client, voc pode precisar armazenar esses dados em cache
(por eemplo, para permitir uma operao ocasionalmente conectada salvando os dados em um
armazenamento local para uso posterior).
Nota: Lm alguns oasos, os dados sensiveis podem ser enviados para o disoo oomo um resultado de paging da
memoria. Assim, voo deve, tambm, oonsiderar os dados presentes na memoria ao determinar quais dados
preoisam ser oriptografados.
0eterm|aar qea|s 0a4es Armazeaar ae 0||eate
Por deinio, os usurios e, conseqentemente, os atacantes em potencial, tm acesso isico aos
clientes. Dado tempo suiciente, os atacantes sempre so capazes de obter acesso administrativo
suiciente para acessar praticamente qualquer tipo de dado, de orma que voc deve considerar com
ponderao quais dados manter no cliente. Como regra geral, voc deve tomar as decises de
autorizao no servidor, de modo que somente os dados que voc passar do servidor para o cliente
sejam os dados aos quais o usurio tenha acesso. /lm de aumentar o desempenho, tomar as
decises de autorizao no servidor tambm garante que os dados no estejam disponiveis no cliente
para um atacante em potencial poder acessar.
voc jamais deve armazenar dados sensiveis em arquivos baseados em teto e deve sempre
criptograar os dados para que eles possam ser acilmente acessados somente por usurios
autorizados. voc deve evitar o uso de arquivos de conigurao baseados em teto para armazenar
inormaes sensiveis de segurana, como senhas ou cadeias de coneo de banco de dados. 3e essa
inormao precisar ser armazenada localmente, voc dever criptograar a inormao, armazen-la
em um arquivo ou chave de registro e, a seguir, restringir o acesso para aquele objeto com um D/CL.
uaisquer dados pessoais ao usurio logado tambm devem ser mantidos de maneira conidencial e
segura, principalmente se o computador or compartilhado entre usurios.
T0 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Lm muitos casos, mais dados so armazenados no cliente se a aplicao precisar ser eecutada em
modo oline. Lntretanto, voc deve determinar se todos os dados so necessrios em modo oline ou
se voc deseja restringir a eecuo de certas aes por parte do usurio quando em modo oline, de
modo que no tenha que armazenar dados sensiveis localmente.
Lm alguns casos, se os dados so conidenciais e podem ser inseridos pelo usurios em demanda,
voc pode optar por no armazen-los localmente no cliente e, em vez disso, obt-los do usurio
conorme necessrio.
3e sua aplicao precisa armazenar dados sensiveis localmente, voc deve evitar o uso de
armazenamento removivel (como disquetes, zip disks ou equipamentos U3B de armazenamento) ou de
armazenamento porttil eterno para armazenar dados sensiveis. Contudo, dados especiicos do
usurio podem ser armazenados em midias removiveis quando voc puder ter certeza de que a midia
removivel pertena ao usurio (por eemplo, ao utilizar um certiicado ou um smart card). /ssim, dados
especiicos do usurio podem ser mantidos em um local seguro que viaje junto ao usurio, de modo
que usurios em roaming possam acessar a aplicao e seus dados sem deiar esses dados no
computador local.
Nota: Ao oonsiderar quais dados sensiveis devero ser armazenados no oliente, voo deve oertifioar-se de que, ao
armazenar informaes sobre seus empregados ou oonsumidores, voo no esteja violando regras de privaoidade.
Lssas leis diferem de aoordo oom o pais, assim, voo deve familiarizar-se oom as regras nos paises nos quais sua
aplioao seja utilizada.
1eca|cas para Pretee 4e 0a4es Seas|re|s
Para os dados que voo preoisa armazenar no oliente, ha uma srie de medidas adioionais para evitar o
aoesso no-autorizado, que inoluem:
Certificar-se de que apenas usurics autcrizadcs pcssam acessar cs dadcs.

Ccnsiderar c usc de EFS para criptcgrafar arquivcs.

Ccnsiderar c usc de DPAPI para evitar questes de gerenciamentc de chave.

Ccnsiderar c armazenamentc de valcres hash em vez de textc simples.

Ccnsiderar c armazenamentc iscladc para aplicaes parcialmente ccnfiveis.

Prcteger suas chaves particulares.

0ert|l|car-se 4e qee Apeaas 0sear|es Aeter|za4es Pessam Acessar es 0a4es


3eus dados sempre precisaro ser protegidos para ajud-lo a certiicar-se de que apenas usurios
autorizados possam acess-los. Dependendo da natureza de sua aplicao e de quo transitvel orem
os dados, voc pode optar por utilizar a segurana baseada em recursos ou a segurana baseada em
unes para proteger seus dados. Para maiores inormaes, consulte Diretrizes de /utorizao
previamente neste capitulo.
0eas|4erar e 0se 4e fS para 0r|ptegralar Arqe|res
Uma opo para certiicar-se de que os arquivos estejam sendo mantidos de maneira segura em 3mart
Clients usar o Lncrypting File 3ystem (LF3) para criptograar arquivos de dados sensiveis. Lssa
soluo no particularmente escalvel; entretanto, ela pode ser til para arquivos especiicos, e pode
ser til para situaes nas quais voc esteja armazenando dados em cache localmente no cliente (por
eemplo, para habilitar 3mart Clients ocasionalmente conectados).
0eas|4erar e 0se 4e 0PAPl para r|tar qeestes 4e 0ereac|ameate 4e 0hare
0 windows 2000 e verses posteriores do sistema operacional windows ornecem o win32 Data
Protection /Pl (DP/Pl) para criptograar e descriptograar dados. Lle parte do Cryptography /Pl
(Crypto /Pl) e implementado no crypt32.dll, consistindo em dois mtodos: CryptPrctectData e
CryptUnprctectData.
TT 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
0 DP/Pl especialmente til porque pode eliminar o problema de gerenciamento de chave eposto a
aplicaes que utilizam a criptograia. Mesmo com a garantia da criptograia de que os dados esto
seguros, voc deve tomar mais algumas medidas para garantir a segurana da chave. Para derivar a
chave de criptograia, o DP/Pl utiliza a senha da conta de usurio associada ao cdigo que chama as
unes DP/Pl. Como resultado, o sistema operacional (e no a aplicao) gerencia a chave.
0 UPAPl trabalha tanto oom o armazenamento da maquina quanto oom o armazenamento de usuario. 0
armazenamento de usuario oarregado automatioamente oom base no perfil do usuario logado. 3uas
aplioaes oliente iro utilizar, na maioria das vezes, o UPAPl oom o armazenamento de usuario, a
menos que haja a neoessidade de armazenar segredos que sejam oomuns a todos os usuarios que
possam logar-se ao oomputador.
As ohaves utilizadas pelo UPAPl para oriptografar e desoriptografar dados sensiveis so espeoifioas de
um oomputador. uma ohave diferente gerada para oada oomputador, o que evita que um servidor
possam aoessar dados oriptografados por outro servidor.
0 UPAPl no-gerenoiado requer modulos para ter total oonfiana. As aplioaes que possuem modulos
totalmente e paroialmente oonfiaveis podem isolar os oodigos oom altos previlgios e habilita-lo para
serem ohamados a partir de um oodigo paroialmente oonfiavel. Para maiores informaes, oonsulte
'Como Criar uma Permisso de Criptografia Personalizada' em
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usseomoohrm|seomoo115.asp.
0eas|4erar e Armazeaameate 4e a|eres ash em rez 4e 1exte S|mp|es
As vezes, os dados so armazenados de uma forma que possam ser utilizados para validar dados de
entrada de usuario (por exemplo, uma oombinao de nome de usuario e senha). Nesses oasos, em vez
de armazenar os dados em texto simples, voo pode armazenar um hash oriptografioo dos dados. A
seguir, quando os dados de entrada de usuarios forem feitos, os dados tambm podero ser hashed, e
ambos podem ser oomparados. Armazenar o hash reduz o risoo do segredo ser desooberto, uma vez que
oomputaoionalmente impossivel deduzir os dados originais a partir do hash ou gerar um hash idntioo
a partir de outros dados.
0eas|4erar e Armazeaameate lse|a4e para Ap||caes Parc|a|meate 0eal|are|s
0 armazenamento isolado permite a sua aplioao salvar os dados em um oompartimento unioo de
dados que esteja assooiado oom algum aspeoto da identidade do oodigo, oomo seu site web, publisher
ou assinatura. 0 oompartimento de dados uma abstrao, no um looal espeoifioo de
armazenamento, ele oonsiste em um ou mais arquivos de armazenamento isolados, ohamados stores,
que oontm os looais reais de armazenamento dos dados.
0 armazenamento isolado pode ser espeoialmente util para aplioaes paroialmente oonfiaveis que
neoessitam armazenar dados de estado espeoifioos para usuarios e modulos partioulares. As aplioaes
paroialmente oonfiaveis no tm aoesso direto ao sistema do arquivo para persistir o estado, a menos
que elas tenham sido agraoiadas explioitamente oom a permisso para fazerem isso atravs de uma
alterao na politioa de segurana.
0s dados gravados separadamente so armazenados, isolados e protegidos de outras aplioaes
paroialmente oonfiaveis, ainda que no estejam protegidos de oodigo totalmente oonfiavel ou de outros
usuarios que tenham aoesso ao oomputador oliente. Para proteger os dados nesses oenarios, voo deve
utilizar a oriptografia de dados e segurana de sistema de arquivo por meio da utilizao de UACLs. Para
maiores informaes, oonsulte 'lntroduo ao Armazenamento lsolado' no .NL1 lramework Ueveloper's
0uide em hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usopgu|oehrm|
opoonlnrroouor|on1olso|areoSrorage.asp.
Preteger 0hares Part|ce|ares
Chaves partioulares no protegidas so susoetiveis a uma vasta gama de ataques por parte de usuarios
ou oodigos malioiosos. Chaves partioulares utilizadas para assinar modulos no devem ser deixadas em
T8 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
looais desprotegidos, oomo oomputadores de desenvolvedores ou em ambientes abertamente
oompartilhados.
Chaves partioulares roubadas podem ser utilizadas por um ataoante para assinar um oodigo malioioso
oom seu nome forte. voo deve oonsiderar a opo de proteger suas ohaves partioulares oom uma
autoridade oentral de segurana designada para esse fim dentro de sua organizao. Mantenha suas
ohaves partioulares em um oomputador isolado e fisioamente protegido, transferindo as ohaves, quando
neoessario, oom midia portatil.
Para maiores informaes sobre oomo guardar segredos de maneira efetiva, oonsulte wr|r|ng Seoure
0ooe, 3eoond Ldition, de Miohael oward e Uavid LeBlano.
Segeraaa 4e Acesse ae 0e4|ge
A segurana do aoesso ao oodigo a teonologia .NL1 lramework que aplioa prinoipios de autorizao e
autentioao ao oodigo em vez de usuarios. A segurana do aoesso ao oodigo pode ser um meoanismo
poderoso para garantir que somente o oodigo que voo deseje que seja exeoutado seja exeoutado pelo
usuario.
1odos os oodigos gerenoiados esto sujeitos segurana do aoesso ao oodigo. uando um modulo
oarregado, ele ganha um oonjunto de permisses de aoesso ao oodigo que determinam quais so os
reoursos que podem ser aoessados e quais os tipos de operaes privilegiadas que ele pode exeoutar. 0
sistema de segurana .NL1 lramework utiliza evidnoias para autentioar (identifioar) o oodigo de modo a
oonoeder essas permisses.
Nota: um modulo a unidade de oonfigurao e oonfiana para segurana do aoesso ao oodigo. 1odos os oodigos
no mesmo modulo reoebem as mesmas permisses e so, dessa forma, igualmente oonfiaveis.
A segurana do aoesso ao oodigo oonsiste nos seguintes elementos:
Permisses. /s permisses representam os direitos do cdigo acessar um recurso protegido ou

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

acessar servidores que utilizem um protocolo dierente


/cessar o sistema de arquivo local

/cessar e interagir com aplicaes Microsot 0ice locais

/cessar e interagir com cdigos no-gerenciados, como objetos C0M

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

Evitar demandas de permisses que gerem excees

Utilizar c padrc Demanda/Assert para chamadcres parcialmente ccnfiveis

Ccnsiderar c usc de ncmes fcrtes para seus mdulcs

Evitar ccnceder tctal ccnfiana para zcnas restritas

0eahecer es 0eaar|es 4e lmp|emeatae 4e sea Ap||cae


Jenha uma compreenso clara dos cenrios de implementao de sua aplicao durante o
desenvolvimento, uma vez que o local no qual sua aplicao implementada tem um eeito
signiicativo nas permisses concedidas aplicao por padro. /s uncionalidades da aplicao, como
eibio de caia de dilogo (por eemplo, utilizando um 3aveFileDialog) ou acesso a recursos do
sistema, podem ser restringidas com base no local de implementao.
De modo particular, as permisses concedidas a sua aplicao dependem da zona na qual ela esteja
localizada (por eemplo, a zona de lnternet, a zona da lntranet local ou zona Conivel). 0 usurio tem
algum controle sobre a iliao aplicao na zona Conivel, mas voc no deve coniar no usurio
para inserir sua aplicao nessa zona de modo a garantir uma correta uncionalidade. Desenvolva sua
aplicao para alhar caso permisses insuicientes sejam concedidas ela em tempo de eecuo.
3e um usurio tentar eecutar uma ao e a aplicao no tiver permisses suicientes para eecutar a
ao, a tentativa pode resultar em uma demanda alha de permisso o que, por sua vez, gerar uma
eceo de segurana. 3ua aplicao precisa manejar essas ecees, ou ela ir alhar. voc deve
certiicar-se de que tais alhas sejam bem manipuladas e deve conceder inormaes suicientes ao
usurio para enderear o problema sem revelar inormaes inapropriadas ou sensiveis e relacionadas
segurana.
Nota: As aplioaes implementadas oom os reoursos de implementao Cliok0noe do.NL1 lramework verso 2.0
tero permisses espeoifioas oonoedidas de aoordo oom suas manifestaes de implementao. As permisses
oonoedidas sero fixadas quando a aplioao for implementada, e a insero do looal da aplioao na zona
Confiavel no afetara as permisses que forem oonoedidas.
r|tar 0emaa4as 4e Perm|sse qee 0erem xcees
Determine a permisso necessria para cada uma das uncionalidades de suas aplicaes para que
possam ser eecutadas de maneira adequada sem gerar ecees. Considere o seguinte:
Desenvclva uma alternativa para evitar a demanda de permissc que pcssa causar

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

endereo lP de seu computador (por eemplo,


\\<MachinelPaddress\c$\our/ppPath\our/pp.ee) para simular esse cenrio.
0t|||zar e pa4re 0emaa4a/Assert para chama4eres parc|a|meate ceal|are|s
0 padro Demanda/Assert utilizado em mdulos totalmente coniveis para permitir o acesso s
operaes privilegiadas quando chamadas por chamadores parcialmente coniveis. Lsse padro til
quando um chamador parcialmente conivel precisa eecutar operaes privilegiadas de um modo
seguro, mas no possui os privilgios necessrios. Usando o Assert, voc garante a coniabilidade dos
chamadores de seu cdigo.
Nota: 0 padro 0emanda/Assert deve ser usado somente quando voo oompreender por oompleto os risoos de
segurana que ele pode introduzir. Ueolarar permisses desabilita as verifioaes normais de permisso do .NL1
lramework, responsaveis por verifioar todos os oodigos de ohamada da pilha. Uesabilitar esse meoanismo pode
introduzir uma sria vulnerhabilidade de segurana em seu oodigo, e deve ser tentada somente quando voo
entender perfeitamente suas implioaes e ja tiver esgotado todas as outras solues possiveis.
Nesse padro, as chamadas Demanda ocorrem antes das chamadas Assert. / Demanda veriica se o
chamador tem a permisso e, a seguir, a Assert desabilita a stack walk para a permisso particular de
modo que os chamadores no sejam checados para o tempo de eecuo da linguagem comum para
poder veriicar se tm as permisses apropriadas.
Para um chamador parcialmente conivel chamar com sucesso um mtodo de mdulo totalmente
conivel, voc pode demandar permisses apropriadas para certiicar-se de que o chamador
parcialmente conivel no prejudique o sistema e, a seguir, declarar a permisso especiica para que
possa eecutar a operao de alto privilgio.
voc deve chamar o Assert em seu mdulo totalmente conivel antes de azer a operao privilegiada
e chamar o PevertAssert em seguida de orma a garantir que o cdigo subseqente em seus
83 0ap|te|e 5 - 0eas|4eraes 4e Segeraaa
chamados de mtodo no saiam eitosos por engano por que o Assert ainda esteja em eeito. voc
deve posicionar esse cdigo em uma uno particular de modo que o Assert seja removido da pilha
automaticamente (utilizando um chamado RevertAssert) aps o retorno do mtodo. L importante
tornar esse mtodo particular; assim, um atacante no poder invocar o mtodo usando um cdigo
eterno.
0t|||zar e Pa4re 0emaa4a/Assert Para 0hama4eres Parc|a|meate 0eal|are|s
Considere o seguinte eemplo.
P1vafe vo1d P1v11egedOpeaf1on{}
{
// Demand fo pem1ss1on.
neW I11elOPem1ss1on{ Pem1ss1on5fafe.unesf1cfed }.Demand{}
// Assef fo a11oW ca11e W1fh 1nsuff1c1enf pem1ss1ons.
neW I11elOPem1ss1on{ Pem1ss1on5fafe.unesf1cfed }.Assef{}
// Pefom you p1v11eged opeaf1on.
}
Por padro, um mdulo totalmente conivel no permite chamados a partir de aplicaes ou mdulos
parcialmente coniveis; tais chamados geram uma eceo de segurana. Para evitar essas ecees,
voc pode adicionar o AllcwPartially1rustedCallersAttribute (/PJC/) ao arquivo montagemlno.cs
gerado pelo visual 3tudio .NLJ conorme descrito abaio.
|monfagem: A11oWPaf1a11y1usfedCa11esAff1bufe{}]
Nota: Codigos que utilizam AP1CA devem ser revisados para garantir que eles no possam ser explorados por
nenhum oodigo malioioso paroialmente oonfiavel. Para maiores informaes, oonsulte 'AP1CA' em 'Chapter 8
Code Aooess 3eourity in Praotioe' de lmproving web Applioation 3eourity: 1hreats and Countermeasures em
hrrp.mson.m|orosofr.oom||brar,oefau|r.asp7ur|=||brar,en-usonnerseohrm|1l0M0h03.asp.
0eas|4erar e 0se 4e Me4e|es 4e Neme ferte
voc pode aumentar a segurana de seus mdulos utilizando nomes ortes para eles. voc deve
considerar a opo de assinar todos os mdulos em sua aplicao com um nome orte, e modiicar a
politica de segurana para poder coniar nesse nome orte. voc pode assinar o mdulo com um par de
chaves de nome orte utilizando a erramenta 3n.ee tool. Para mudar a politica de segurana
manualmente, voc pode usar o snap-in do .NLJ Framework Coniguration MMC ou Caspol.ee, uma
erramenta de linha de comando (localizada em %3ystemRoot%\Microsot.NLJ
\Framework\<version>\CasPol.ee).
3eu processo para assinar mdulos com chaves particulares deve levar em considerao o seguinte:
Use a delayed signing para desenvclvimentc. 0 processo de construo para a compilao do

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,

utilize o seguinte comando para assinar com a chave particular.


sn - monfagem.d11 f:\keypa1.snk
0s membros da equipe designada devem, ento, testar e revisar o mdulo antes de liber-lo para
uso da organizao.
Para maiores inormaes sobre delayed signing e o processo eplicado nessa seo, consulte os
seguintes recursos em lmproving web /pplication 3ecurity: Jhreats and Countermeasures:
Chapter 3 Jhreat Modeling, em |tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-

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

provveis de ocorrer se o mdulo or comprometido.


ldentiique o nivel de coniana de seu ambiente-alvo, uma vez que a politica de segurana do

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

uma classe de base, conorme demonstrado no seguinte cdigo.


pub11c sea1ed c1ass NobodyDe1vesIomMe
{...}
112 0uia de /rquitetura e Projeto de 3mart Clients
0nde or possivel, use o mtodo de classe declarativo ou atributos de nivel de mtodo para

restringir o acesso aos membros do grupo windows especiicado, conorme demonstrado no


seguinte cdigo.
|P1nc1pa1Pem1ss1on{5ecu1fyAcf1on.Demand,ko1e=0"Doma1nName\W1ndoWs
Goup"}]
pub11c sea1ed c1ass Odes{}
{...}
Lstabelea um processo de construo seguro para delayed signing, teste, revises de

segurana e proteo de chaves particulares.


Semar|e
/s aplicaes 3mart Client so aplicaes distribuidas. Dessa orma, para gerenciar a segurana
de modo eetivo para elas, voc precisa considerar a segurana no servidor, no cliente e a coneo
de rede entre os dois. /s consideraes de 3mart Client especiicas incluem o desenvolvimento de
autenticao e autorizao segura, validao de dados e proteo de dados sensiveis. voc deve,
tambm, eaminar como usar a segurana do acesso ao cdigo de orma a gerenciar a segurana
ao nivel do cdigo e no ao nivel do usurio.
80 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
0
0saa4e 1hrea4s Me|t|p|es
Um thread uma unidade bsica de eecuo. Um nico thread eecuta uma srie de instrues da
aplicao, seguindo um caminho nico de lgica pela aplicao. Jodas as aplicaes tm ao menos
um thread, mas voc pode desenvolver suas aplicaes de modo que elas possam usar threads
mltiplos, com cada thread eecutando lgicas separadas. /o utilizar threads mltiplos em sua
aplicao, voc pode processar tareas etensas ou que demandem muito tempo no background.
Mesmo em um computador com um nico processador, o uso de threads mltiplos pode melhorar
signiicativamente a resposta e aproveitamento de sua aplicao.
Desenvolver sua aplicao de modo a utilizar mltiplos threads pode ser muito complicado,
especialmente se voc no tomar cuidado com questes de proteo e sincronizao. /o desenvolver
sua aplicao 3mart Client, voc precisa avaliar com ateno onde e como os mltiplos threads devem
ser usados para que voc possa ganhar mima vantagem sem criar aplicaes que sejam
desnecessariamente compleas e diiceis de azer o debug.
Lsse capitulo eamina alguns dos conceitos que so mais importantes para o desenvolvimento de
aplicaes 3mart Client com threads mltiplos. Lle descreve alguns dos usos recomendados para
threads mltiplos em uma aplicao 3mart Client e como implementar essas capacidades
1hrea4s Me|t|p|es ae .N1 framewerk
Jodas as aplicaes .NLJ Framework so criadas com um nico thread, que utilizado para eecutar a
aplicao. Lm aplicaes 3mart Client, esse thread cria e gerencia a interace do usurio (Ul) e
chamado de Ul thread.
Utilize o Ul thread para todo o processamento, incluindo chamadas de servio da web, chamadas de
objeto remoto e chamadas em um banco de dados. Lntretanto, utilizar o Ul thread dessa orma no
geralmente uma boa idia. Na maioria dos casos, voc ser incapaz de predizer quanto tempo uma
chamada para um servio da web, objeto remoto ou banco de dados ir levar, e voc pode azer com
que o Ul trave enquanto o Ul thread waits espera por uma resposta.
Criar threads adicionais permite que sua aplicao eecute um processamento adicional sem usar o Ul
thread. Utilize mltiplos threads para evitar o travamento do Ul enquanto a aplicao az uma chamada
a um servio da web, ou para eecutar certas tareas locais em paralelo, de modo a aumentar a
eicincia geral de sua aplicao. Na maioria dos casos, voc deve considerar a opo de eecutar
quaisquer tareas no relacionadas ao Ul em um thread separado.
sce|her atre 0hama4as S|acra|cas e Ass|acra|cas
/s aplicaes podem azer tanto chamadas sincrnicas quanto assincrnicas. Uma chamada sincrnica
espera por uma resposta ou valor de retorno antes de proceder. Uma chamada dita o|cq0eaoa se
no tiver permisso de continuar.
Uma chamada ass|ncrn|ca, ou nac-o|cq0eaoa no espera por uma resposta. Chamadas ass|ncrn|cas
so eecutadas pelo uso de um thread separado. 0 thread original inicia a chamada assincrnica que,
por sua vez, usa outro thread para eecutar a solicitao enquanto o thread original continua
processando.
Com aplicaes 3mart Client, importante minimizar chamadas sincrnicas a partir do Ul thread. /o
desenvolver sua aplicao 3mart Client, voc deve considerar cada chamada que sua aplicao ir
azer e determinar se uma chamada sincrnica pode aetar negativamente a resposta e desempenho
da aplicao.
Use chamadas sincrnicas a partir do Ul thread somente quando:
Lecutar operaes que manipulem o Ul

Lecutar operaes pequenas, bem deinidas que no apresentem riscos de o Ul travar

Use chamadas assincrnicas a partir do Ul thread quando:


Lecutar operaes de background que no aetem o Ul

Fizer chamadas para outros sistemas ou recursos localizados na rede

Lecutar operaes que possam levar um longo tempo para serem concluidas

sce|her atre 1hrea4s 4e feregreea4 ee 4e 8ackgreea4


Jodos os threads no .NLJ Framework so designados como threads de oreground ou de background.
0s dois mantm apenas uma dierena threads de background no impedem um processo de
terminar. /ps todos os threads de oreground pertencentes a um processo tiverem terminando, a CLR
(Common Language Runtime) inaliza o processo, terminando quaisquer threads de background que
possam ainda estar sendo eecutados.
Por padro, todos os threads gerados ao criar e iniciar um novo objeto 1hread so threads de
oreground, e todos os threads que entram em um ambiente de eecuo gerenciado a partir de um
cdigo no-gerenciado so marcados como threads de background. Lntretanto, voc pode modiicar a
classiicao do thread ao modiicar a propriedade 1hread.Isackgrcund. Um thread designado
como um thread de background ao deinir-se a 1hread.Isackgrcund como true, e designado como
thread de oreground ao deinir-se a 1hread.Isackgrcund como false.
0bservao: Para maiores informaes sobre o objeto 1hread, oonsulte 'usando a Classe de 1hread', mais adiante
nesse oapitulo.
Na maioria das aplicaes, voc optar por deinir threads dierentes como sendo de oreground ou de
background. 0eralmente, voc deve deinir as threads que escutam passivamente por uma atividade
como threads de background, e deinir as threads responsveis pelo envio de dados como threads de
oreground, de modo que o thread no seja terminando antes de todos os dados serem enviados.
voc deve utilizar threads de background somente quando tiver certeza de que no haver eeitos
adversos pelo ato do thread ser terminado sem cerimnia pelo sistema. Use um thread de oreground
quando o thread estiver eecutando operaes sensiveis ou transacionais que precisem ser concluidas,
ou quando voc precisar controlar como o thread inalizado de orma que recursos importantes
possam ser liberados.
88 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Maa|pe|ae 4e Pretee e S|acrea|zae
s vezes, ao construir aplicaes, voc cria mltiplos threads que precisam utilizar recursos de chave,
como dados ou componentes da aplicao, ao mesmo tempo. 3e voc no tomar cuidado, um thread
pode alterar um recurso, enquanto outro thread est trabalhando com ele. 0 resultado pode ser que o
recurso seja deiado em um estado indeterminado e seja considerado inutilizvel. lsso conhecido
como uma race ccno|t|cn. 0utros eeitos adversos do uso de mltiplos threads sem a considerao
necessria do uso compartilhado de recursos incluem deadlocks, estagnao do thread e questes de
ainidade do thread.
Para evitar esses eeitos ao acessar um recurso de dois ou mais threads, voc precisa coordenar os
threads que esto tentando acessar o recurso usando tcnicas de proteo e sincronizao.
0 gerenciamento do acesso de thread a recursos compartilhados utilizando proteo e sincronizao
uma tarea complea e deve ser evitada sempre que possivel, passando os dados entre os threads e
no ornecendo acesso compartilhado para uma nica instncia.
3e voc no pode eliminar o compartilhamento de recursos entre os threads, voc deve:
Usar o statement lcck no Microsot visual C# e o statement SyncLcck no Microsot visual

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.

Use o atributo 1hreadStatic para criar membros por thread.

Use uma proteo de dupla veriicao ou o mtodo Interlccked.CcmpareExchange para evitar a

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.

Manter velocidades de animao constantes (independentemente da velocidade do processador) ao

trabalhar com gricos.


Monitorar servidores e outras aplicaes para conirmar que eles estejam on-line sendo

eecutados.
0 .NLJ Framework ornece trs process timers:
System.Windcw.Fcrms.1imer

System.1imers.1imer

System.1hreading.1imer

0 System.Windcw.Fcrms.1imer til caso queira aumentar os eventos em uma aplicao do


windows Forms. Lle oi otimizado especialmente para trabalhar com o windows Forms e deve ser
utilizado dentro de um windows Form. Lle designado a trabalhar em um ambiente single-threaded e
80 0ap|te|e 0 - 0saa4e 1hrea4s Me|t|p|es
opera sincronizadamente com o Ul thread. lsso signiica que este timer nunca preempt a eecuo de
um cdigo de aplicao (permitindo que voc no chame o Applicaticn.DcEvents) e seguro para
interagir com o Ul.
System.1imers.1imer arquitetado e otimizado para o uso em ambiente de multi-threaded. Dierente
do System.Windcw.Fcrms.1imer, este timer chama o seu manipulador de evento em um thread
trabalhador obtido do thread pool CLR. voc deve assegurar que o manipulador do evento no interaja
com o Ul nesse caso.
System.1imers.1imer epe uma propriedade Synchrcnizing0bject que pode imitar l comportamento
do System.Windcws.Fcrms.1imer, mas, a menos que voc necessite controle mais preciso sobre o
timing dos eventos, voc deveria utilizar o System.Windcws.Fcrms.1imer.
System.1hreading.1imer um timer simples de lightweight server-side. No , de maneira inerente,
thread sae e mais complicado de usar que outros timers. Lste timer geralmente inadequado em
ambientes windows Forms. Jabela 6.1 Lista as propriedades de cada timer.
1ahe|a 0.1: Prepr|e4a4es 4e Precess 1|mer
Propredades 5ystem.Wndows.Iorms 5ystem.1mers 5ystem.1hreadng
Lventos de 1hreading rodam
em que thread?
lnstnoias so thread safe?
Requer windows lorms?
Lventos de timer event
podem ser agendados?
ul thread ul or worker thread worker thread
3im
No
No
No No 3im
No No 3im
qeaa4e esar 1hrea4s Me|t|p|es
Multithreading pode ser usado em muitas situaes comuns para melhorar signiicantemente a
resposta e usabilidade de sua aplicao.
voc deveria considerar ortemente o uso de threads mltiplos para:
Comunicar-se atravs de uma rede, por eemplo, a um web server, banco de dados ou objeto

remoto.
Lecutar operaes locais de time-consuming que poderia causar o travamento do Ul.

Distinguir tareas de prioridade variante.

Melhorar a perormance de inicializao da aplicao.

L necessrio eaminar sua utilizao detalhadamente.


0emea|car-se Atrares 4e ema ke4e.
3mart-clients podem comunicar-se atravs de uma rede, de vrias maneiras, incluindo:
Chamadas a objetos remotos, como DC0M, RPC ou .NLJ remoting

Comunicados Message-based, como os chamados web service e solicitaes HJJP

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

operaes l/0 assincrnicas, utilizando o l0CompletionPorts /Pl.


Nota: 3e a aplioao estiver tentando exeoutar operaes l/0 oom um oomputador que no tenha a funoionalidade
I0Uomp|etonPorts, ele revertera para o uso de worker threads.
0 thread pool contm um padro de 25 threads por processador. 3e todos os 25 threads esto em
uso, requests queue adicionais so disponibilizadas. Cada thread utiliza o padro de stack size e roda
na prioridade padro.
0 eemplo de cdigo abaio mostra o uso de um thread pool.
p1vafe vo1d 1headPoo1Lxamp1e{}
{
Wa1fCa11back ca11back = neW Wa1fCa11back{ 1headPoc }
1headPoo1.queueuseWoklfem{ ca11back }
}
02 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
No cdigo acima, primeiro crie um delegado para o cdigo que voc queira eecutar em um worker
thread. 0 .NLJ Framework deine o delegado WaitCallback, que se reere a um mtodo que utiliza um
nico parmetro de objeto e retorna sem valores. 0 mtodo seguinte implementa o cdigo a ser
eecutado.
p1vafe vo1d 1headPoc{ Obecf sfafelnfo }
{
// Do somefh1ng on Woke fhead.
}
voc solicita um nico argumento de objeto para um mtodo 1hreadPrcc especiicando-o como
segundo parmetro no chamado ao mtodo ueueUserWcrkItem. No eemplo anterior, nenhum
argumento passado para o mtodo 1hreadPrcc, ento o parmetro stateInfc ser nulo.
Utiliza classe 1hreadPccl quando:
Jenha um grande nmero de tareas pequenas e independentes eecutadas no background.

No necessite ter controle absoluto sobre o thread utilizado para eecutar uma tarea.

0t|||zaa4e a 0|asse 1hrea4


voc pode gerenciar eplicitamente as threads utilizando a classe 1hread. lsso lnclui threads criados
pelo CLR e aqueles criados ora do CLR que adentram o ambiente gerenciado para eecutar um cdigo.
0 CLR monitora todos os threads em seu processo que tenham eecutado cdigos dentro do .NLJ
Framework e utiliza uma instncia da classe Jhread para gerenci-los.
3empre que possivel, voc deve criar threads utilizando a classe 1hreadPccl. No entanto, eistem
muitas situaes onde voc precisar criar e gerenciar seu prprios threads em vez de usar a classe
1readPccl.
Use um objeto 1hread quando:
Necessite que uma tarea tenha uma prioridade particular.

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.

Necessite ter uma identidade estvel associada ao 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.

Relatar o progresso para o Ul conorme um thread de background eecuta seu processamento.

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

registro de classes e tipos de livrarias.


Aplicaes que nc tinham autcncmia. /lm de registrar classes e tipos no registro, aplicaes

tipicamente incluiam arquivos compartilhados, localizados no disco, assim como coniguraes


contidas no registro. / aplicao no possuia autonomia; mais, suas partes eram distribuidas em
dierentes reas no computador.
Ccmpcnentes que nc pcdiam ser implementadcs ladc a ladc. No era possivel implementar

duas verses dierentes da mesma DLL num mesmo diretrio.


Lsses problemas eram uma grande barreira pala implementao em manuteno eetiva das
aplicaes do cliente.
0 Microsot .NLJ Framework possui um nmero de caracteristicas que simpliicam o processo de
implementao de aplicaes .NLJ Framework. Lssas caracteristicas incluem:
Assemblies autc-descritivcs. 0s assemblies .NLJ Framework contm uma metadado que

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

uncionalidade 0roup Policy do diretrio de servio Microsot /ctive Directory , ou o Microsot


3ystems Management 3erver (3M3). Usar o sotware de implementao 0roup Policy para instalar o
pacote em toda rede permite que voc assegure que o pacote seja instalado com altos privilgios.
lgualmente, usar uma tecnologia de push para empresas, como o 3M3 permite que voc instale o
.NLJ Framework com as permisses necessrias. Para instalar o .NLJ Framework utilizando o 0roup
108 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Policy ou o 3M3, primeiro voc precisa remover o arquivo do windows lnstaller do dotnet.ee. Para
mais detalhes sobre como azer isso, ver "Redistributing the .NLJ Framework" em
http://msdn.microsot.com/library/deault.asp?url~/library/en-us/dnnetdep/html/redistdeploy.asp.
Sclicite que usurics finais implementem, eles mesmcs, c .NE1 Framewcrk usando o

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

.NLJ Framework automaticamente ar o download da aplicao e seus assemblies dependentes no


cliente quando o usurio clicar em um link.
Implementac de Update Stub em Aplicaes Nc-tcuch. Com essa abordagem, voc utiliza

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

para um arquivo compartilhado e roda a aplicao a partir do compartilhamento.


Xccpy. Com essa abordagem, voc copia arquivos diretamente no cliente. 0 .NLJ Framework

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

um pacote windows lnstaller, e o pacote ento instalado no cliente.


Cada abordagem tem seus pontos ortes e racos. Para ajud-lo a determinar a implementao mais
apropriada para o seu ambiente, voc deve eaminar cada um deles mais detlhadamente.
lmp|emeatae Ne-1eech
/ implementao no-touch permite que seus usurios acessem sua aplicao em um web server
usando um link URL para a aplicao. Para implementar uma aplicao utilizando implementao no-
touch, voc simplesmente tem que copiar os arquivos apropriados para um web server. uando um
usurio navega para o local da aplicao, utilizando um link URL, o Microsot lnternet Lplorer az o
download e roda a aplicao. / aplicao e seus assemblies dependentes so baiados para o cliente
usando HJJP e so armazenados em um local especial chamado cache de download de assembly.
uando o .NLJ Framework determina se um assembly no web server precisa ser baiado ou no,
somente o date-time stamp do arquivo veriicado, e no o nmero de verso do assembly. 3e os
assemblies no servidor no tm um date-time stamp mais tardio que os no cliente, eles no sero
baiados.
3e voc utilizar a implementao no-touch para implementar suas aplicaes 3mart Client, voc
precisar ornecer ao usurio uma URL que leve ao local da aplicao no web server. Com essa
abordagem, nenhum programa de instalao necessrio no computador do cliente todos os cdigos
so baiados conorme a necessidade. 3ua aplicao automaticamente atualizada sempre que
mudanas ocorrerem no web server. 3e os arquivos mudarem, ser eito o download das novas verses
quando necessrio, como qualquer web browsing.
/ implementao no-touch depende da habilidade do .NLJ Framework para interagir com o lnternet
Lplorer 5.01 ou mais recente para veriicar assemblies .NLJ que estejam sendo solicitados. Durante
uma solicitao, eito o download do eecutvel para o cache de download. Um processo chamado
lLLec inicia a aplicao em um ambiente isolado e seguro oerecido pela inra-estrutura de cdigo de
acesso de segurana do .NLJ Framework.
Nota: 0 oliente tentara rodar a aplioao somente se tiver ambos instalados, o .NL1 lramework e o lnternet
Lxplorer verso 5.01 ou posterior.
3e voc decidir utilizar a implementao no-touch para implementer uma aplicao que use arquivos
de conigurao, voc pode precisar conigurar o diretrio web server directory a im de permitir o
download dos arquivos de conigurao da aplicao, j que essas capacidade no est habilitada em
seu modo padro. /ssegure-se de habilitar que seja eito o download dos arquivos de conigurao
somente a partir do diretrio onde sua aplicao est localizada; ademais, voc pode habilitar arquivos
provados de conigurao a serem baiados e introduzir um risco de segurana.
Nota: Arquivos de oonfigurao so baixados duas vezes quando usada a implementao no-touoh: a primeira vez
para verifioar informao sobre vinoulos (por exemplo, para oontrolar a verso exata dos oomponentes que a
aplioao usa) e a segunda para busoar informao de oonfiguraes de usuario espeoifioas.
voc pode usar a implementao no-touch de dentro de uma aplicao que j tenha sido
implementada, baiar e rodar o cdigo usando o mtodo Assembly.LcadFrcm(). Lssa tcnica pode ser
usada para azer o download de cdigos que mudam requentemente, ou para ornecer instalao sob
demanda de algumas outras uncionalidades.
/ implementao no-touch permite que voc rode verses localizadas da aplicao. / cultura atual do
computador do cliente a de azer o download automtico dos recursos necessrios dos assemblies
apropriados para oerecer uma verso localizada da aplicao.
110 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
voc pode assegurar aplicaes de implementao no-touch usando os mecanismos de segurana
oerecidos pelo web server. Por eemplo, para restringir o acesso aplicao somente a usurios
autorizados em uma intranet, voc pode habilitar o windows lntegrated 3ecurity no diretrio da
aplicao no web server. Para permitir que todos os usurios acessem a aplicao, voc pode habilitar
acesso annimo ao diretrio da aplicao.
Nota: 3e o seu web server no permite aoessos annimos ou utilize o windows lntegrated 3eourity para autentioar
os olientes, sua aplioao pode no oonseguir fazer o download do arquivo de oonfigurao.
l|m|taes 4a lmp|emeatae Ne-1eech
/ implementao no-touch pode ser til na implementao de aplicaes nicas, ou para implantao
de aplicaes mais compleas. No entanto, no uma abordagem apropriada para a completa
instalao de aplicaes 3mart Client mais completas pelas seguintes razes:
Ccnfiguraes de segurana padrc restritas

Funcicnalidade cffline nc ccnfivel

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).

lmplementar assemblies no cache de assembly global.

lmplementar ou usar cdigos no gerenciados.

lmplementar componentes que solicitem registro ou aam outras mudanas de registro

lntegrar-se com o windows 3hell (especialmente os icones de instalao no menu lniciar e o item

Adicicnar cu Remcver Prcgramas no Painel de Controle).


/cessar um Banco de Dados.

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

que a aplicao implementada.


Lecutar outras operaes de segurana ora as deinidas na zona associada com o local de

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

armazenado no cache de download de assemblies, que gerenciado como parte do cache do


lnternet Lplorer. Lm alguns casos, quando a aplicao roda on-line, voc pode no azer o
download de todas as partes da aplicao, o que aetar a habilidade da aplicao para trabalhar
oline.
Assemblies pcdem ser excludcs. Uma vez que os assemblies localizam-se em uma rea

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

aplicao antes de implement-las.


Lecutar tareas de conigurao ps implementao sem a interveno do usurio.

/jud-lo a criar aplicaes que atualizem-se automaticamente, para a ltima verso disponivel.

/ arquitetura do Updater /pplication Block mostrada na Figura 7.1.


U|ente
Atua|zador
Controlador XML
Arquivos de
Configurao
5ervdor
Uownloader
Uopa de Arquvo
Po|| & 0own|oad
validador
Controlador de
Atualizao
(Aplioao ou
.LXL separados)

Prooessador de
Postagem
(0poional)
Administrador
Manifestos
de usos
utilidade
Manifesto
Aplioao
Atualizador
f|gera T.1
4rqu|rerura oo upoarer 4pp||oar|on B|ook
Para mais inormaes sobre o Updater /pplication Block, ver "Updater /pplication Block or .NLJ" em
|tt.//mson.m|crcsc|t.ccm/||orar,/oe|a0|t.as?0r|~/||orar,/en-0s/onooa/|tm|/0oater.as.
113 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
/ implementao no-touch com um update stub da aplicao suporta a instalao transacionada de
sua aplicao. 0 Updater /pplication Block pode ajudar a assegurar que o aplicativo seja instalado com
sucesso em sua totalidade. Para eecutar uma instalao transacionada, voc precisar incluir um
cdigo que, alm de eecutar atualizaes automticas, veriique se todos os cdigos oram instalados
no disco local.
Lste cdigo pode ser no ormato de um maniest ile juntamente com o cdigo que determina que cada
arquivo do maniest esteja no disco local. Combinar a implementao no-touch com o update stub da
aplicao oerece muitos dos beneicios de implementao simpliicada, e tambm se atualiza de
acordo com a habilidade de rodar sua aplicao em um ambiente totalmente conivel. Jais beneicios
azem dessa abordagem hibrida uma opo til na aplicao de muitas aplicaes 3mart Client. No
entanto, no a escolha ideal em muitas situaes. voc ainda precisa conceder ao stub da aplicao
permisses suicientes para permitir que ele aa o download do restante da aplicao. Jambm,
aplicaes instaladas utilizando essa abordagem no oerecem integrao com o windows 3hell
(especialmente, integrao com o menu Iniciar ou o item Adicicnar cu Remcver Prcgramas no
Painel de Controle) a menos que voc construa essa uncionalidade no stub da aplicao. Finalmente,
a implementao e atualizao ocorrero sob o conteto de segurana do usurio. Lssa restrio pode
causar problemas caso sua aplicao necessite ser escrita no registro, ou em uma parte do sistema de
arquivos segurado usurio.
xecetaa4e 0e4|ges 4e em Arqe|re 0empart||ha4e
/ eecuo de um cdigo a partir de um arquivo compartilhado similar a uma implementao no-
touch, eceto pelo ato de que voc oerece ao usurio um arquivo compartilhado e no uma URL, de
onde aplicar e rodar a aplicao. Cdigos que rodam a partir de um arquivo compartilhado so
baiados sob demanda e eecutados no momento apropriado. Como o cdigo roda a partir de uma
rede, ele roda como uma aplicao parcialmente conivel, geralmente eecutando a partir da intranet
local e recebendo o conjunto de permisses dessa intranet, a menos que voc altere a politica de
segurana no cliente. Lecutar cdigos a partir de um arquivo compartilhado tem muitas vantagens e
desvantagens de uma implementao no-touch, apesar disso, o cdigo no colocado em cache no
cliente como acontece com a implementao no-touch. Devido s restries de segurana associadas
a eecuo de um cdigo a partir de um arquivo compartilhado, requentemente apropriado para a
implementao de aplicaes 3mart Client.
Nota: Com uma distribuio no-touoh, voo pode adotar uma abordagem hibrida que oombine o oodigo de
exeouo de um arquivo oompartilhado oom uma automatizao atualizada. Para maiores informaes, veja No-
1ouoh Ueployment with an Applioation update 3tub" neste oapitulo.
lmp|emeatae xcepy
/ implementao Xccpy envolve a cpia de todos os arquivos em que consiste a aplicao no
computador do cliente de modo que a aplicao possa ser eecutada. /plicaes 3mart Client
requentemente consistem em apenas um ou mais arquivos eecutveis, um ou mais DLLs, e um ou
mais arquivos de conigurao situados em uma hierarquia no diretrio. Copiando todos esses arquivos
para um outro computador, voc instala essencialmente a aplicao. Para desinstalar a aplicao, voc
apenas remove todos os arquivos do computador.
Nas situaes onde voc somente necessita modiicar o sistema de arquivos para instalar a aplicao,
a abordagem Xccpy pode ser a melhor opo. Lntretanto, como voc no ter o controle programtico
sobre o processo da instalao, a abordagem Xccpy no permitir que voc:
lmplemente assemblies no cache de assembly global (e mantenha reerncias).

lmplemente objetos C0M.

lmplemente componentes que necessitem registro ou aa mudanas no registro.

lntegre com o windows 3hell.

114 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats


3e sua aplicao requerer etapas adicionais de instalao, voc pode eecutar essas etapas
manualmente aps a cpia dos arquivos. Por eemplo, se voc necessitar modiicar registro, voc pode
editar o registro no computador alvo ou importar arquivos .reg para assegure-se de que os ajustes
apropriados estejam no lugar. 3e voc necessitar implementar assemblies no cache de assembly
global, voc pode usar a utilidade de 0acutil.ee com o switch /ir, que instala os assemblies no cache
de assembly global com uma reerncia seguida. Lstas reerncias podem ser removidas quando o
assembly desinstalado usando o switch /ur.
Nota: voo tambm pode usar uma operao drag-and-drop no windows Lxplorer para mover os assemblies
oompartilhados para o folder do oaohe de assembly global. Lntretanto, voo deve evitar este mtodo porque ele
no implementa a oontagem da refernoia. 3em a oontagem de refernoia, a rotina de desinstalao de uma outra
aplioao pode oausar a solioitao de um assembly por sua aplioao para ser removida oaohe de assembly
global.
/ implementao Xccpy apropriado para algumas aplicaes 3mart Client, mas em muitos casos as
etapas adicionais requeridas para que a aplicao uncione corretamente azem essa abordagem,
aparentemente simples, demasiadamente trabalhosa.
Pacetes w|a4ews lasta||er
voc pode empacotar sua aplicao para a instalao como um pacote windows lnstaller. Lsta
abordagem lhe oerece a habilidade irrestrita de instalar qualquer coisa no computador alvo, apesar de
a aplicao estar limitada no runtime pelo conteto da segurana do usurio inal que instala a
aplicao.
0s pacotes windows lnstaller so muito leiveis e poderosos, assim que voc pode us-los para
instalar aplicaes muito compleas que azem um grande nmero mudanas de conigurao no
cliente. Lntretanto, eles so apropriados tambm para aplicaes com eigncias muito mais simples
da instalao. Mesmo que voc tenha arquitetado sua aplicao ter o minimo impacto no cliente
quando instalado, voc deve considerar o uso de pacotes do windows lnstaller, porque eles integram-
se com o windows 3hell adicionando icones no menu Iniciar e no desktop, e adicionando a aplicao
ao item Adicicnar cu Remcver Prcgramas no Painel de Controle. Lsta integrao permite que voc
controle a instalao eicaz e a desinstalao da aplicao quando necessrio.
voc pode adicionar qualquer um, ou at mesmo todos, das opes abaio no pacote windows
lnstaller:
0rupos de projeto output

/rquivos e pastas de servios

/ssemblies

Recursos de aplicao

Fuso de mdulos

/rquivos C/B

Dependncias

Coniguraes de registro

Propriedades de projeto

/es Padro

Coniguraes de arquitetura de interace de usurio

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

download automtico eito pelos clientes.


Atualizaes Autcmticas. / aplicao conigurada para azer o download automtico e instalar

as atualizaes a partir de um servidor.


Atualizaes a partir de um arquivc ccmpartilhadc. 0s assemblies atualizados so adicionados

a um compartilhamento de rede para download automtico dos clientes.


Atualizaes Xccpy. /s atualizaes so copiadas diretamente nos clientes.

Implementac dc Paccte Windcws Installer. 0 pacote windows lnstaller atualizado, um novo

pacote criado, ou um caminho de pacote usado para atualizar o cliente.


L til eaminar cada uma das opes mais detalhadamente para que voc possa determinar qual
mais apropriada para o seu ambiente.
Atea||zaes 4a lmp|emeatae Ne-teech
3e voc usar a implementao no-touch para implementar uma aplicao simples ou partes de uma
aplicao mais complea, voc pode atualizar estes conjuntos simplesmente colocando os novos
arquivos no web server. /ntes que um assembly seja carregado pela
aplicao, o .NLJ Framework veriica automaticamente o time stamp do assembly localmente e no
servidor web para ver se o assembly necessita que seja eito um novo download, ou se o assembly
pode simplesmente rodar a partir do cache de download de assemblies do usurio.
Nota: A lmplementao no-touoh possui um numero de limitaes que o tornam inadequado para implementao
da maioria das aplioaes 3mart Client. Para mais detalhes, veja 'lmplementao No-1ouoh' , aoima, neste
oapitulo.
Lmbora a emisso de atualizaes usando o mtodo de implementao no-touch seja geralmente
muito direto, seus clientes podem ter problemas durante um upgrade devido alta de suporte para
instalaes transacionadas. 3e voc atualizar o diretrio enquanto os clientes estiverem usando a
aplicao, um cliente pode azer o download de um cdigo antigo inicialmente e ento tentar azer o
download do outro cdigo que tem sido atualizado. lsto pode levar a resultados imprevisiveis e pode
azer com que sua aplicao alhe. / soluo mais simples para este problema implementar qualquer
atualizao signiicativa em um diretrio separado no servidor web, e quando a implementao estiver
completa, mudar quaisquer ligaes posio nova.
Nota: 3e voo esoolher implementar sua aplioao usando a implementao no-touoh oom atualizao automatioa,
veja a seguinte seo, 'Atualizaes Automatioas."
118 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Atea||zaes Aetemat|cas
Na maioria dos casos, a melhor abordagem para remendar, reacomodar e atualizar aplicaes
construir a inra-estrutura de atualizao na prpria aplicao. Neste caso, a aplicao do cliente pode
ser arquitetada para azer o download e instalar automaticamente atualizaes de um servidor, e o
administrador de Jl libera essas atualizaes ao servidor para que os clientes o obtenham. Para
conseguir isso, voc pode incluir um cdigo a uma aplicao para que ela eecute o seguinte:
veriicao automtica por atualizaes.

Fazer o download das atualizaes disponiveis.

Fazer seu prprio upgrade aplicando essas atualizaes.

Durante a conigurao de sua aplicao para atualizaes automticas, importante assegurar-se de


que todos os arquivos atualizados sejam baiados para o cliente. lsto particularmente importante
quando voc atualiza os strong-named assemblies. /ssemblies que chamam assemblies strong-named
devem especiicar a verso do assembly strong-named, ento, caso voc atualize assemblies strong-
named, voc deve atualizar tambm qualquer assembly que os chamem.
/o conigurar as atualizaes transacionadas, voc pode usar o cdigo para certiicar-se de que as
atualizaes estejam instaladas localmente, veriicando-as de encontro a um maniesto.
Frequentemente voc decidir instalar a atualizao em um diretrio separado, e ento, ou remover o
diretrio original aps uma instalao bem sucedida ou deiar o diretrio original no lugar para ornecer
uma aplicao do recuo.
Para mais detalhes sobre atualizaes automticas e o uso do Updater /pplication Block, veja
lmplementao de Update 3tub em /plicaes No-touch mais acima, neste capitulo.
Nota: As atualizaes automatioas sero simplifioadas oom o Cliok0noe na verso 2.0 do .NL1 lramework. Como
parte de um manifesto de implementao, voo podera espeoifioar se quando a aplioao deve verifioar para ver
se ha atualizaes, juntamente oom uma posio alternada de atualizao.
Atea||zae 4e em Arqe|re 0empart||ha4e
uando voc copia os assemblies para um arquivo compartilhado, o download daqueles assemblies no
cliente so eitos cada vez que a aplicao roda e no colocada em cache. Com a implementao
no-touch, atualizar uma aplicao que oi originalmente implementada eecutando um cdigo a partir
de um arquivo compartilhado simplesmente um caso de adicionar o cdigo novo ao arquivo
compartilhado. 0 cliente az ento o download do cdigo novo da prima vez que ele rode.
Atea||zaes xcepy
3e voc distribuir originalmente sua aplicao usando uma tcnica de cpia de arquivos, voc pode
querer implementar atualizaes da mesma maneira. /pesar do mecanismo de implementao
original, a cpia de arquivos pode ser uma das mais eetivas abordagens para atualizar sua aplicao
quando as atualizaes orem relativamente simples, tais como modiicaes para um arquivo de
conigurao. Lm tais casos, implementar uma atualizao simplesmente o caso de copiar os novos
arquivos e de remover qualquer arquivo antigo que no seja mais necessrio.
0eralmente voc pode atualizar os assemblies privados simplesmente copiando a nova verso do
assembly sobre a mais antiga. Lntretanto, embora voc possa usar operaes simples de cpia para a
implementao inicial de um assembly strong-named, no possivel atualizar automaticamente o
assembly strong-named nesta maneira e ter sua aplicao (ou outros assemblies) usando-o
automaticamente. 0 strong name do assembly armazenado no maniesto de qualquer assembly que
o reerencie, e verses dierentes de um assembly strong-named so considerados assemblies
completamente separados pelo Common Language Runtime (CLR). / menos que voc especiique de
outra maneira, o CLR carrega a mesma verso do assembly strongnamed em que sua aplicao esteve
construida originalmente.
110 0ap|te|e T - lmp|emeataa4e e Atea||zaa4e as Ap||caes Smart 0||eat
Atea||zaes 4e w|a4ews lasta||er
0 windows lnstaller oerece uma soluo detalhada para atualizar aplicaes .NLJ Framework. Diversas
de suas caracteristicas so arquitetadas especiicamente para resolver problemas de atualizao da
aplicao.
0s pacotes do windows lnstaller tm suporte built-in para o controle de verso. 3e voc versionar sua
aplicao corretamente, o pacote do windows lnstaller poder assegurar automaticamente que a
atualizao acontea corretamente, e voc pode especiicar se as verses precedentes da aplicao
devem ser removidas quando a aplicao nova instalada. 3e voc estiver usando uma tecnologia do
impulso, como a 3M3, para implementar estas atualizaes, voc pode tambm controlar que usurios
recebero, e quando, as atualizaes. Lsta caracteristica particularmente til se voc estiver testando
atualizaes com um grupo de pessoas em particular antes de implementar as atualizaes mais
etensivamente.
3e voc planeja azer um upgrade em sua aplicao usando a tecnologia do windows lnstaller, voc
tem trs escolhas para sua eecuo:
Construa um patch package (.msp) e aplique-o na aplicao atualmente instalada.

Faa um upgrade do arquivo eistente do windows lnstaller.

Crie um arquivo windows lnstaller completamente novo.

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

implementao de inalizadores quando no necessrio, alha para suprimir a inalizao no


mtodo Dispose, ou alha na liberao de recursos no gerenciados pode conduzir a um atraso
desnecessrio para a recuperao de recursos e pode criar os escapes de recurso que degradam o
desempenho da aplicao. /s aplicaes que no liberam corretamente recursos, ou oram
eplicitamente a coleo do lio, podem impedir que o CLR gerencie a memria eicientemente.
0timizac de perfcrmance dc Windcws Fcrms. /s aplicaes 3mart Client contam com o

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

background separado. L diicil - se no impossivel - garantir tempos de resposta para os servios


situados na rede. Lecutar estes chamados em um thread separado reduz o risco de outages ou de
lentido na rede que aetam adversamente a perormance da aplicao.
125 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Prccessamentc I0 cund. Um processamento, como procurar e classiicar dados no disco, deve

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

de assemblies incorrem no aumentado do custo de perormance. 0 custo vem do carregamento de


um metadado, acesso a vrias pginas da memria em imagens pre-compiladas no CLR para
carregar o assembly (se pr-compilada com a erramenta Native lmage 0enerator, Ngen.ee),
compilao de tempo 1lJ, veriicaes da segurana, e assim por diante. voc deve considerar undir
os assemblies baseados em seus padres do uso para diminuir o custo associado perormance.
Evite a arquitetura de classes mcnclticas que ccmbinem a funcicnalidade de muitcs

ccmpcnentes em scmente um. Fatorar a arquitetura em classes menores que necessitam


somente ser compiladas quando orem chamadas realmente.
Arquitete sua aplicac de mcdc a fazer chamadcs paralelcs a servics da rede durante a

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

objetivos de desempenho que voc deiniu. 0s objetivos do desempenho devem epressar as


mtricas especiicas e mensurveis que permitam que voc quantiique a perormance de sua
aplicao a qualquer momento. Para permitir que voc colete dados de perormance, voc pode
ter que instrumentar sua aplicao para que os dados requeridos de perormance possam ser
coletados e publicados. /lgumas das opes que voc tem para realizar isso so discutidas em
detalhes na seo seguinte.
Analise Resultadcs. Depois que voc coletou dados de perormance de sua aplicao, voc

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

provavelmente modiicar a aplicao ou sua conigurao para tentar e resolver o problema.


voc deve tentar minimizar mudanas de modo que voc possa determinar o eeito das
mudanas na perormance da aplicao. 3e voc izer mais de uma mudana ao mesmo
tempo, pode ser diicil determinar que eeito cada mudana ter na perormance total da
aplicao.
138 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
1este e Avalie. Depois de mudar sua aplicao ou sua conigurao, voc deve test-la outra

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

lanadas e capturadas por sua aplicao.


130 0ap|te|e 8 - 0esempeahe 4a Ap||cae Smart 0||eat
Para aprender mais sobre estes contadores, seus pontos iniciais, o que medir e como medir veja a
seo, "CLR and Managed Code" no Capitulo 15, "Measuring .NLJ /pplication Perormance" do
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|at15.as.
3ua aplicao pode tambm ornecer contadores de perormance especiicos que voc pode monitorar
acilmente usando logs e alertas da perormance. voc pode deinir um contador padro de
perormance, como mostrado no seguinte eemplo:
jC#]
PefomanceCounfe counfe = neW PefomanceCounfe{ "Cafegoy",
"CounfeName", fa1se }
jV1sua1 as1c .NET]
D1m counfe As NeW PefomanceCounfe{"Cafegoy", "CounfeName", Ia1se}
Uma vez que o objeto do contador de perormance criado, voc pode especiicar uma categoria para
seus contadores de perormance padro e manter todos os contadores relacionados junto. / classe de
PerfcrmanceCcunter deinida no namespace System.Diagncstics, juntamente com um grande
nmero de outras classes que voc pode usar para ler e deinir contadores e categorias de
perormance. Para mais inormao sobre como criar contadores de perormance padro veja,
Knowledge Base article 317679, How to create and make changes to a custom counter or the
windows Perormance Monitor by using visual Basic .NLJ," em |tt.//s0crt.m|crcsc|t.ccm
/oe|a0|t.as?sc|o~|o;en-0s;317679.
Nota: Para registrar um oontador de performanoe, voo deve primeiramente registrar a oategoria. voo deve ter
permisses sufioientes para registrar uma oategoria de oontador de performanoe, o que pode afetar oomo voo
neoessita implementar sua aplioao.
lastremeatae
H um grande nmero de erramentas e de tecnologias que voc pode se usar para ajudar
instrumentar sua aplicao e gerar a inormao necessria para medir a perormance da aplicao.
Lstas erramentas e tecnologias incluem:
Event 1racing fcr Windcws (E1W). Lste sub-sistema de LJw oerece viso geral de um sistema

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

windows e ornece interaces de programao para o gerenciamento de inormaes e o controle de


acessos em uma empresa. lsto usado geralmente por administradores de sistema para
automatizar tareas da administrao usando os certiicados que invocam o componente wMl. Para
mais inormao, veja windows Management lnstrumentation at http://msdn.microsot.com/library
/deault.asp?url~/library/en-us/wmisdk/wmi/wmi_start_page.asp.
Debug and 1race Classes. 0 .NLJ ramework ornece classes Debug e 1race sob o

System.Diagncsis para instrumentar seu cdigo. / classe Debug usada primariamente


imprimindo debugs da inormao e veriicando se h airmaes. / classe 1race permite que voc
instrumente coniguraes de liberao para monitorar a sade de sua aplicao no momento da
eecuo. No visual 3tudio .NLJ, o 1race padro. /o usar a comando-linha construir voc deve
adicionar a bandeira /d:1race para o compilador ou #define 1RACE no cdigo onte visual C# .NLJ
para habilit-lo. Para cdigos onte no visual Basic .NLJ, voc deve adicionar /d:1RACE=1rue para o
compilador da linha de comando. Para mais inormaes, ver Knowledge Base article 815788,
"H0w J0: Jrace and Debug in visual C# .NLJ," em |tt.//s0crt.m|crcsc|t.ccm /oe|a0|t.as?sc|o
~|o;en-0s;815788.
0lk Prel||er
0 CLR Proiler uma erramenta que perila a memria ornecida pela Microsot disponivel para o
download no M3DN. Permite que voc olhe o heap gerenciado no processo de sua aplicao e de
investigar o comportamento do coletor do lio. Usando esta erramenta, voc pode obter inormaes
teis sobre a eecuo, o alocamento de memria, e o consumo da memria de sua aplicao. Lsta
inormao pode ajudar-lhe compreender como sua aplicao est usando a memria e como voc
pode otimizar seu uso.
0 CLR Proiler est disponivel em |tt.//mson.m|crcsc|t.ccm/net|ramewcr|/ocwn|caos/tcc|s
/oe|a0|t.as. veja tambm "How to use CLR Proiler" at |tt.//mson.m|crcsc|t.ccm/||orar,
/oe|a0|t.as?0r|~/||orar,/en-0s/onag/|tm|/sca|enet|cwtc13.as?|rame~tr0e para mais detalhes de
como usar a erramenta CLR Proiler.
0 CLR Proiler registra inormao do consumo da memria e do comportamento do coletor de lio em
um arquivo de registro. voc pode ento analisar estes dados com o CLR Proiler usando o nmero de
vistas gricas dierentes. /lgumas das vistas mais importantes so:
Allccaticn 0raph. Mostra a pilha de chamados como os objetos oram alocados. voc pode usar

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

assemblies, as unes, os mdulos, ou as classes.


Call 0raph. Mostra que mtodos chamam outros mtodos e com que reqncia. voc pode usar

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,

lno3ys Jechnologies Limited


Agradecimentcs a ncsscs gerenciadcres de prcdutcs: Lugenio Pace, Microsot; and vasu vijay,

Llectronic Data 3ystems


142 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
5obre o patterns & practces Mcrosoft
0s guias de patterns & practices (padres e prticas) Microsot contm as recomendaes
especiicas que ilustram como projetar, construir, implementar e operar solues de arquitetura
para negcios desaiadores e cenrios tcnicos. 0erecem uma orientao tcnica prounda
baseada na eperincia real-world que vai alm dos papis brancos para ajudar os proissionais de
lJ da empresa, trabalhadores de inormtica e os desenvolvedores com a entrega de solues
rpidas.
Proissionais de lJ, proissionais de inormtica e desenvolvedores podem escolher quatro tipos de
prticas & padres:
Patterns 0s patterns (padres) so uma maneira consistente de documentar solues para

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

endeream eigncias do negcio, eigncias de Ciclo de vida, e os coninamentos tcnicos


para cenrios geralmente atuais. Reerncias de /rquitetura tm seu oco planejar a arquitetura
em sistemas lJ.
Referncias de lcccs de Ccnstruc e Sistemas I1 Reerncias de Blocos de

Construo e 3istemas lJ so projetos reutilizveis de subsistema que se dirigem a desaios


tcnicos comuns atravs de uma escala larga de cenrios. Muitos incluem eecues testadas
da reerncia e aceleram o desenvolvimento.
Referncias de lcccs de Ccnstruc e Sistemas I1 Jm seu oco na arquitetura e

implementao de subsistemas.
Prticas de Ciclc de Vida Prticas de Ciclo de vida ornecem a orientao para tareas ora

do espao de arquitetura e projeto tal como a distribuio e as operaes em um ambiente da


produo.
0s guias de patterns & practices so revistos e aprovados por equipes da engenharia de Microsot,
consultores, servios de sustentao do produto, e por scios e clientes. 0s padres & as guias
das prticas so:
Ccmprcvadas - Baseados na eperincia do campo.

Fidedigncs - 0erecem o melhor conselho disponivel.

paLLerns & pracLices


Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
Preciscs - 3o validados e testados.

Acicnveis - Fornecem as etapas ao sucesso.

Relevante - dirigem-se aos problemas do mundo real baseados em cenrios do cliente.

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

coniana total de seus resultados.


Conie na orientao completamente testada e suportada, nas recomendaes da qualidade de

produo e codiique, no simplesmente amostras.


Entregue vantagens de I1 estratgicas
Resolva seus problemas hoje e aa um eame das vantagens das tecnologias uturas da Microsot

com prticos conselhos.


Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
patterns & practices: Jitulos /tuais
0utubro de 2003
1tulc Versc 0nline Livrc
Patterns
Lnterprise 3olution Patterns http://msdn.microsot.com/practices/type/Patterns
using Microsot .NLJ /Lnterprise/deault.asp
Microsot Data Patterns http://msdn.microsot.com/practices/type/Patterns
/Data/deault.asp
Peferncas de Arqutetura
/pplication /rchitecture or http://msdn.microsot.com/library/deault.asp?url~
.NLJ: Designing /pplications /library/en-us/dnbda/html/distapp.asp
and 3ervices
Lnterprise Notiication http://msdn.microsot.com/library/deault.asp?url~
Reerence /rchitecture or /library/en-us/dnentdevgen/html/enraelp.asp
Lchange 2000 3erver
lmproving web /pplication http://msdn.microsot.com/library/deault.asp?url~
3ecurity: Jhreats and /library/en-us/dnnetsec/html/JhreatCounter.asp
Countermeasures
Microsot /ccelerator http://www.microsot.com/technet/treeview
or 3i 3igma /deault.asp?url~/technet/itsolutions/mso/sisigma
/deault.asp
Microsot /ctive Directory http://www.microsot.com/technet/treeview
Branch 0ice 0uide: /deault.asp?url~/technet/prodtechnol/ad
volume 1: Planning /windows2000/deploy/adguide/deault.asp
Microsot /ctive Directory http://www.microsot.com/technet/treeview
Branch 0ice 3eries /deault.asp?url~/technet/prodtechnol/ad
volume 2: Deployment and /windows2000/deploy/adguide/deault.asp
0perations
Microsot Content lntegration http://msdn.microsot.com/library/deault.asp?url~
Pack or Content Management /library/en-us/dncip/html/cip.asp
3erver 2001 and 3harePoint
Portal 3erver 2001
Microsot Lchange 2000 0nline version not available
3erver Hosting 3eries
volume 1: Planning
Microsot Lchange 2000 0nline version not available
3erver Hosting 3eries
volume 2: Deployment
Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
Microsot Lchange 2000 http://www.microsot.com/technet/treeview
3erver Upgrade 3eries /deault.asp?url~/technet/itsolutions/guide
volume 1: Planning /deault.asp
Microsot Lchange 2000 http://www .microsot.com/technet/treeview
3erver Upgrade 3eries /deault.asp?url~/technet/itsolutions/guide
volume 2: Deployment /deault.asp
Microsot 3olution http://www.microsot.com/technet/treeview
or lntranets /deault.asp?url~/technet/itsolutions/mso
/msi/Deault.asp
Microsot 3olution or http://www.microsot.com/downloads
3ecuring wireless L/Ns /details.asp?Familyld~CDB639B3-010B-47L7-B23
4-/27CD/291D/D&displaylang~en
Microsot 3ystems http://www.microsot.com/technet/treeview
/rchitecture /deault.asp?url~/technet/itsolutions/edc
Lnterprise Data Center /Deault.asp
Microsot 3ystems http://www.microsot.com/technet/treeview/
/rchitecture deault.asp?url~/technet/itsolutions/idc/deault.asp
lnternet Data Center
Jhe Lnterprise Project http://www.microsot.com/technet/treeview
Management 3olution /deault.asp?url~/technet/itsolutions/mso/epm
/deault.asp
UNlX /pplication http://msdn.microsot.com/library/deault.asp?url~
Migration 0uide /library/en-us/dnucmg/html/ucmglp.asp
Reerence Building Blocks and lJ 3ervices
.NLJ Data /ccess http://msdn.microsot.com/library/deault.asp?url~
/rchitecture 0uide /library/en-us/dnbda/html/daag.asp
/pplication Updater http://msdn.microsot.com/library/deault.asp?url~
/pplication Block /library/en-us/dnbda/html/updater.asp
/synchronous lnvocation http://msdn.microsot.com/library/deault.asp?url~
/pplication Block /library/en-us/dnpag/html/paiblock.asp
/uthentication in /3P.NLJ: http://msdn.microsot.com/library/deault.asp?url~
.NLJ 3ecurity 0uidance /library/en-us/dnbda/html/authaspdotnet.asp
Building lnteroperable web http://msdn.microsot.com/library/deault.asp?url~
3ervices: w3-l Basic /library/en-us/dnsvcinter/html/wsi-bp_msdn_
Proile 1.0 landingpage.asp
Building 3ecure /3P.NLJ http://msdn.microsot.com/library/deault.asp?url~
/pplications: /uthentication, /library/en-us/dnnetsec/html/secnetlpM3DN.asp
/uthorization, and 3ecure
Communication
1tulc Versc 0nline Livrc
Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
Caching /pplication Block http://msdn.microsot.com/library/deault.asp?url~
/library/en-us/dnpag/html/Cachingblock.asp
Caching /rchitecture 0uide or http://msdn.microsot.com/library/deault.asp?url~
.Net Framework /pplications /library/en-us/dnbda/html/Caching/rch.asp?rame~
true
Coniguration Management http://msdn.microsot.com/library/deault.asp?url~
/pplication Block /library/en-us/dnbda/html/cmab.asp
Data /ccess /pplication Block http://msdn.microsot.com/library/deault.asp?url~
or .NLJ /library/en-us/dnbda/html/daab-rm.asp
Designing /pplication-Managed http://msdn.microsot.com/library/?url~/library
/uthorization /en-us/dnbda/html/damaz.asp
Designing Data Jier Components http://msdn.microsot.com/library/deault.asp?url~
and Passing Data Jhrough Jiers /library/en-us/dnbda/html/B0/0ag.asp
Lception Management http://msdn.microsot.com/library/deault.asp?url~
/pplication Block or .NLJ /library/en-us/dnbda/html/emab-rm.asp
Lception Management http://msdn.microsot.com/library/deault.asp?url~
/rchitecture 0uide /library/en-us/dnbda/html/eceptdotnet.asp
Microsot .NLJ/C0M Migration http://msdn.microsot.com/library/deault.asp?url~
and lnteroperability /library/en-us/dnbda/html/cominterop.asp
Microsot windows 3erver http://www.microsot.com/downloads/
2003 3ecurity 0uide details.asp?Familyld~8/2643C1-0685-4D89-B655-
521L/6C7B4DB&displaylang~en
Monitoring in .NLJ Distributed http://msdn.microsot.com/library/deault.asp?url~
/pplication Design /library/en-us/dnbda/html/monitordotnet.asp
New /pplication lnstallation http://www.microsot.com/business/reducecosts
using 3ystems Management /eiciency/manageability/application.msp
3erver
Patch Management using http://www.microsot.com/technet/treeview/
Microsot 3ystems Management deault.asp?url~/technet/itsolutions/msm/swdist/
3erver - 0perations 0uide pmsms/pmsmsog.asp
Patch Management Using http://www.microsot.com/technet/treeview/
Microsot 3otware Update deault.asp?url~/technet/itsolutions/msm/swdist/
3ervices - 0perations 0uide pmsus/pmsusog.asp
3ervice /ggregation /pplication http://msdn.microsot.com/library/deault.asp?url~
Block /library/en-us/dnpag/html/serviceagg.asp
3ervice Monitoring and Control http://www.microsot.com/business/reducecosts
using Microsot 0perations /eiciency/manageability/monitoring.msp
Manager
1tulc Versc 0nline Livrc
Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
User lnterace Process http://msdn.microsot.com/library/deault.asp?url~
/pplication Block /library/en-us/dnbda/html/uip.asp
web 3ervice Faade or http://msdn.microsot.com/library/deault.asp?url~
Legacy /pplications /library/en-us/dnpag/html/wsacadelegacyapp.asp
Liecycle Practices
Backup and Restore or http://www.microsot.com/technet/treeview/deault.asp
lnternet Data Center ?url~/technet/ittasks/maintain/backuprest/Deault.asp
Deploying .NLJ /pplications: http://msdn.microsot.com/library/deault.asp?url~
Liecycle 0uide /library/en-us/dnbda/html/D/L0Roadmap.asp
Microsot Lchange 2000 http://www.microsot.com/technet/treeview/deault.
3erver 0perations 0uide asp?url~/technet/prodtechnol/echange/echange
2000/maintain/operate/opsguide/deault.asp
Microsot 3L 3erver 2000 http://www.microsot.com/technet/treeview
High /vailability 3eries: /deault.asp?url~/technet/prodtechnol/sql/deploy
volume 1: Planning /coneat/sqlha/3LH/LP.asp
Microsot 3L 3erver 2000 http://www.microsot.com/technet/treeview
High /vailability 3eries: /deault.asp?url~/technet/prodtechnol/sql/deploy
volume 2: Deployment /coneat/sqlha/3LH/LP.asp
Microsot 3L 3erver 2000 http://www.microsot.com/technet/treeview
0perations 0uide /deault.asp?url~/technet/prodtechnol/sql/maintain
/operate/opsguide/deault.asp
0perating .NLJ-Based http://www.microsot.com/technet/treeview
/pplications /deault.asp?url~/technet/itsolutions/net/maintain
/opnetapp/deault.asp
Production Debugging or http://msdn.microsot.com/library/deault.asp?url~
.NLJ-Connected /pplications /library/en-us/dnbda/html/DB0rm.asp
3ecurity 0perations or http://www.microsot.com/technet/treeview
Microsot windows 2000 3erver /deault.asp?url~/technet/security/prodtech
/win2000/secwin2k/deault.asp
3ecurity 0perations 0uide or http://www.microsot.com/technet/treeview
Lchange 2000 3erver /deault.asp?url~/technet/security/prodtech
/mailech/opsguide/deault.asp
Jeam Development with visual http://msdn.microsot.com/library/deault.asp?url~
3tudio .NLJ and visual /library/en-us/dnbda/html/tdlg_rm.asp
3ource3ae
Lste titulo est disponivel como livro.
148 0e|a 4e Arqe|tetera e Prejete 4e Smart 0||eats
Para aprender mais sobre patterns & practices visite: http://msdn.micrcscft.ccm/practices
Para comprar guias de patterns & practices visite: http://shcp.micrcscft.ccm/practices
1tulc Versc 0nline Livrc
2006 Miorosoft Corporation. 1odos os direitos reservados. Miorosoft e o
logotipo da Miorosoft so maroas registradas ou oomeroiais da Miorosoft
Corporation nos Lstados unidos e/ou em outros paises.

Potrebbero piacerti anche