Você está na página 1de 18

Programando Servios WCF

Juval Lwy

Apndice C: Padro de Codificao

Programando Servios WCF


Do original Programming WCF Services Copyright 2007 da Editora Alta Books Ltda.

Authorized translation from English language edition, entitled Programming WCF Services, by Juval Lwy, published
by OReilly Media, Inc. Copyright 2007 by OReilly Media, Inc.This translation is published and sold by permission
of OReilly Media,Inc., the owner of all rights to publish and sell the same. PORTUGUESE language edition
published by Editora Alta Books, Copyright 2007 by Editora Alta Books.
Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem autorizao
prvia por escrito da editora, poder ser reproduzida ou transmitida sejam quais forem os meios empregados:
eletrnico, mecnico, fotogrfico, gravao ou quaisquer outros. Todo o esforo foi feito para fornecer a mais
completa e adequada informao, contudo a editora e o(s) autor(es) no assumem responsabilidade pelos resultados
e usos da informao fornecida. Recomendamos aos leitores testar a informao, bem como tomar todos os
cuidados necessrios (como o backup), antes da efetiva utilizao. Este livro no contm CD-ROM, disquete ou
qualquer outra mdia.
Erratas e atualizaes: Sempre nos esforamos para entregar a voc, leitor, um livro livre de erros tcnicos ou
de contedo; porm, nem sempre isso conseguido, seja por motivo de alterao de software, interpretao ou
mesmo quando alguns deslizes constam na verso original de alguns livros que traduzimos. Sendo assim, criamos
em nosso site, www.altabooks.com.br, a seo Erratas, onde relataremos, com a devida correo, qualquer erro
encontrado em nossos livros.
Avisos e Renncia de Direitos: Este livro vendido como est, sem garantia de qualquer tipo, seja expressa
ou implcita.
Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial so
de responsabilidade de seus proprietrios. A Editora informa no estar associada a nenhum produto e/ou fornecedor
apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes podem ter sido utilizados, e
desde j a Editora informa que o uso apenas ilustrativo e/ou educativo, no visando ao lucro, favorecimento ou
desmerecimento do produto/fabricante.
Produo Editorial Editora Alta Books
Coordenao Editorial: Fernanda Silveira
Traduo: Thas Cristina Casson
Colaborao tcnica: Ricardo Casson
Reviso: Norma Barbosa de Lima
Reviso tcnica: Eduardo Velasco
Diagramao: Fernanda Silveira
Impresso no Brasil
O cdigo de propriedade intelectual de 1 de Julho de 1992 probe expressamente o uso coletivo sem autorizao
dos detentores do direito autoral da obra, bem como a cpia ilegal do original. Esta prtica generalizada nos
estabelecimentos de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores
de criarem novas obras.

Rua Viva Cludio, 291 Jacar


Rio de Janeiro RJ. CEP: 20970-031
Tel: 21 3278-8069/ Fax: 3277-1253
www.altabooks.com.br, e-mail: altabooks@altabooks.com.br
II

Programando Servios WCF

Para minhas filhas, Abigail e Eleanor

Apndice C: Padro de Codificao

III

Sumrio
Introduo.......................................................................................................................................................................IX
Prefcio............................................................................................................................................................................XII
1. Fundamentos de WCF ................................................................................................................................................1
O que a WCF?.....................................................................................................................................................1
Servios ...................................................................................................................................................................1
Endereos.................................................................................................................................................................3
Endereos HTTP.......................................................................................................................................................5
Endereos IPC.........................................................................................................................................................5
Endereos MSMQ.....................................................................................................................................................5
Endereos de Rede de Intercmbio P2P.................................................................................................................6
Contratos..................................................................................................................................................................6
Hospedagem..........................................................................................................................................................10
Vnculos...................................................................................................................................................................15
Terminais.................................................................................................................................................................19
Configurao de Terminal via Programao......................................................................................................22
Intercmbio de Metadados..................................................................................................................................23
Programao do Lado do Cliente............................................................................................................................30
Configurao Via Programao versus Administrativa.....................................................................................39
Arquitetura WCF...................................................................................................................................................39
Trabalhando com Canais........................................................................................................................................41
Confiabilidade.....................................................................................................................................................44
Notas.......................................................................................................................................................................49
2.Contratos de Servios..............................................................................................................................................51
Sobrecarga de Operao........................................................................................................................................51
Herana em Contratos..........................................................................................................................................53
Projeto e Produo de Contratos de Servios.....................................................................................................58

Consultas a Contratos.........................................................................................................................................61
3.Contratos de Dados..................................................................................................................................................68
Serializao...........................................................................................................................................................68
Atributos dos Contratos de Dados.......................................................................................................................74
Hierarquia de Contrato de Dados......................................................................................................................85
Equivalncia entre Contratos de Dados..............................................................................................................92
Controle de Verso................................................................................................................................................95
Novos Membros.....................................................................................................................................................95
Enumeraes.......................................................................................................................................................102
Delegados e Contratos de Dados......................................................................................................................103
Conjuntos de Dados e Tabelas...........................................................................................................................104
Tipos Genricos..............................................................................................................................................108
Colees............................................................................................................................................................111
Notas...................................................................................................................................................................120
4.Gerenciamento de Instncias...........................................................................................................................121
Comportamentos................................................................................................................................................121
Servios por Chamada.........................................................................................................................................122
Servios por Sesso.............................................................................................................................................127
Servios nicos....................................................................................................................................................136
Desativao de Instncias..................................................................................................................................142
Controle de Fluxo .............................................................................................................................................147
Notas..................................................................................................................................................................153
5.Operaes................................................................................................................................................................154
Operaes Requisio-Resposta.....................................................................................................................154
Operaes Unidirecionais................................................................................................................................154
Operaes de Callback........................................................................................................................................159
Eventos.................................................................................................................................................................178
Fluxo Contnuo....................................................................................................................................................181
Gerenciamento de Fluxo...................................................................................................................................184

6.Falhas........................................................................................................................................................................185
Erros e Excees...............................................................................................................................................185
Contratos de Falhas............................................................................................................................................188
Extenses de Tratamento de Erro...................................................................................................................198
7.Transaes................................................................................................................................................................213
O Desafio da Recuperao................................................................................................................................213
Transaes.......................................................................................................................................................214
Propagao de Transao..................................................................................................................................219
Gerenciadores e Protocolos de Transao......................................................................................................222
A Classe Transaction.........................................................................................................................................227
Programao Transacional de Servio..............................................................................................................228
Programao Transacional Explcita...................................................................................................................243
Gerenciamento de Estado de Servio...............................................................................................................253
Gerenciamento de Instncias e Transaes......................................................................................................255
Servio nico Transacional................................................................................................................................299
Callbacks.............................................................................................................................................................273
Nota...................................................................................................................................................................278
8.Gerenciamento de Concorrncia.......................................................................................................................279
Gerenciamento de Instncia e Concorrncia.......................................................................................................279
Modo de Concorrncia de Servio......................................................................................................................280
Instncias e Acesso Paralelo.............................................................................................................................286
Recursos e Servios.............................................................................................................................................287
Contexto de Sincronizao de Recurso..............................................................................................................289
Contexto de Sincronizao do Servio................................................................................................................297
Contexto Personalizado de Sincronizao de Servio....................................................................................307
Callbacks e Segurana do Cliente.....................................................................................................................312
Callbacks e Contexto de Sincronizao............................................................................................................315
Chamadas Assncronas........................................................................................................................................321

VI

Programando Servios WCF

9. Servios em Fila335
Clientes e Servios Desconectados...................................................................................................................335
Chamadas em Fila............................................................................................................................................336
Transaes ...........................................................................................................................................................343
Gerenciamento de Instncias.............................................................................................................................348
Gerenciamento de Concorrncia......................................................................................................................354
Falhas de Entrega..............................................................................................................................................355
Falhas de Reproduo.........................................................................................................................................363
Chamadas em Fila Versus Conectadas.............................................................................................................367
Servios de Resposta........................................................................................................................................369
Ponte HTTP..........................................................................................................................................................386
10.Segurana.................................................................................................................................................................392
Autenticao ......................................................................................................................................................392
Autorizao ..........................................................................................................................................................393
Segurana de Transferncia.............................................................................................................................393
Gerenciamento de Identidade...........................................................................................................................399
Poltica Geral........................................................................................................................................................400
Abordagem Dirigida a Cenrio............................................................................................................................400
Aplicativo de Intranet..........................................................................................................................................401
Aplicativos para Internet......................................................................................................................................427
Aplicativo Business-to-Business.........................................................................................................................446
Aplicativo Annimo...............................................................................................................................................451
Nenhuma Segurana..........................................................................................................................................453
Sumrio dos Cenrios.........................................................................................................................................454
Framework de Segurana Declarativa...............................................................................................................455
Auditoria de Segurana........................................................................................................................................470
Notas....................................................................................................................................................................475
Apndice A. Introduo Orientao a Servio...........................................................................................476
Apndice B. Servio de Publicao/Inscrio...................................................................................................484
Apndice C. Padro de Codificao para a WCF...............................................................................................500
Apndice C: Padro de Codificao

VII

VIII

Programando Servios WCF

Introduo

Juval Lwy, autor deste excelente livro, e eu compartilhamos da mesma paixo: projetar e construir sistemas
distribudos ou, como esto mais e mais sendo chamados hoje em dia, sistemas conectados. Ns dois seguimos
um caminho muito parecido na senda da tecnologia, mesmo sempre tendo trabalhando em empresas diferentes e
em diferentes projetos e, por grande parte de nossas carreiras, em diferentes continentes tambm.
No incio dos anos 90, quando ns dois lentamente comeamos a nos viciar na idia de fazer algo num computador
que pudesse afetar outro, o mundo das plataformas de tecnologia para aplicativos de sistemas distribudos
comeava a tomar forma ao nosso redor.
Enquanto estaes de trabalho e hardware de servidor tornavam-se mais acessveis e cada vez mais populares, a
criao de grandes sistemas que no eram dependentes de uma nica central de transaes em suas camadas
intermedirias tornava-se uma proposta atrativa economicamente. O mesmo valia para opes de intercmbio de
dados de longa distncia. difcil de acreditar nos dias de hoje, mas minha companhia telefnica insistia, na poca,
que mais de 1.200 bits por segundo nunca seria possvel usando linhas de telefone. Hoje elas trabalham com 6
MBps ou mais no mesmo cabo de cobre. Essa foi uma poca promissora.
Com a tecnologia para computao distribuda acessvel se consolidando, dois grandes campos de tecnologia de
sistemas distribudos surgiram no incio dos anos 90: o DCE (Distributed Computing Environment Ambiente de
Computao Distribuda), liderado pela Digital Equipment Corporation (mais tarde incorporada pela Compaq, e
esta, por sua vez, pela HP) e a CORBA (Common Object Request Broker Arquitecture Arquitetura de Gerenciador
Comum de Requisio de Objeto), liderada pelo consrcio OMG (Object Management Group Grupo de
Gerenciamento de Objeto), com grande apoio da IBM. Em 1996-1997, todos esses grandes esforos de engenharia
efetivamente foram paralisados. Eis que a Internet surgiu e o mundo tornou-se obcecado por (a) HTML, (b) HTTP,
(c) capital de risco e (d) IPOs (Initial Public Offering1 Oferta pblica inicial).
O mercado levou 10 anos para recuperar-se do que foi chamado de boom da Internet e do declnio posterior. No
apenas economicamente, mas tambm de uma perspectiva tecnolgica. Algum bem resultou disso: j no havia
mais dois campos de tecnologia de sistemas distribudos, apenas um ou dezenas deles, dependendo da perspectiva.
Agora em 2007, o mercado ainda continua em grande discrdia quanto forma correta de escrever cdigo para
sistemas distribudos. Algum da Sun Microsystems ou da BEA2 provavelmente diria para usar Java; meus colegas
aqui da Microsoft (e eu mesmo) com certeza diramos que C# ou Visual Basic a melhor forma. Mas algo que nem
a Sun, a BEA, a IBM e ns aqui na Microsoft no mais discordamos como falar uns com os outros em redes de
dados. Considerando as guerras do passado entre o DCE e a CORBA, ter-se chegado a um consenso sobre a
especificao SOAP 1.1 que a base dessa trgua, foi um acontecimento espetacular.
Apndice C: Padro de Codificao

IX

Mais de seis anos se passaram desde que o SOAP 1.1 foi proposto como uma nota tcnica para o W3C3. Desde ento,
um grande nmero de especificaes baseadas no SOAP, que vo dos fundamentos, como endereamento, a uma
vasta gama de opes de segurana e at protocolos empresariais, como coordenao de transao atmica, tem
sido desenvolvidas e negociadas entre muitos parceiros de mercado.
Minha equipe aqui da Microsoft, que ainda chama a si mesma informalmente pelo nome cdigo de seu produto,
Indigo, esteve sempre no centro desses esforos para desenvolvimento e negociao. Sem a IBM, a Microsoft
e outros parceiros seriamente comprometidos com a criao de um conjunto de padres comuns a despeito de
estarem todos competindo de forma ferrenha no mercado, poucos desses frameworks4 de padres abertos existiriam,
muito menos haveria mltiplas implementaes de tantas empresas e tanta variedade de plataformas.
Admito que isso tudo levou um ano ou dois a mais do que deveria. Chegar a um acordo leva tempo e ns
simplesmente no teramos lanado nosso software, o WCF Windows Communication Foundation (Camada de
Comunicao do Windows), sem ter a certeza de que ele interoperaria5 bem com nossos parceiros e concorrentes
do mercado. O projeto em si tambm leva tempo, e tambm no teramos lanado nosso software sem ter certeza
de que ele seria familiar para nossos consumidores que investiram seu tempo em aprender e adotar nosso estilo
anterior de tecnologia de sistemas distribudos, que inclui Servios ASP.NET, WSE6, .NET Remoto, Sistema de
Mensagens MSMQ7 e a Servios Empresariais (Enterprise Services) COM+.
A lista que acabei de citar possui os nomes de cinco tecnologias e, se fossem consideradas as equivalentes feitas
com bases e cdigo no-gerenciado, existiriam muitas mais. Um dos nossos objetivos de projeto mais importantes
para a Windows Communication Foundation pode ser resumido em uma frase: uma nica forma de programar. No
importa o que voc quer construir. Seja um aplicativo de enfileiramento ou transacional de N-camadas, uma rede
de clientes P2P8, um servidor RSS ou seu prprio barramento de servios empresariais, voc no ter mais de
dominar muitas tecnologias diferentes que solucionam cada uma um pedao do problema. O Windows Communication
Foundation (Camada de Comunicao do Windows) o nico que voc aprende e usa. Uma nica forma de
programar.
Programando Servios WCF mostrar com muitos detalhes que ns aqui da Microsoft construmos uma base para
servios e aplicativos, e o livro transmite isso com preciso, didtica e dedicao s arquiteturas de programao,
exatamente as caractersticas pelas quais Juval conhecido no mundo todo.
Ns da equipe Connected Framework da Microsoft estamos muito satisfeitos com o que construmos. Damos a voc
uma infra-estrutura que unifica todos os aspectos da tecnologia de sistemas distribudos, que largamente
interopervel, que incentiva orientao a servio, que simples de aprender e que de alta produtividade. Juwal
Lwy hoje um dos mais proeminentes experts do mundo em sistemas distribudos, e estamos muito orgulhosos
de sua dedicao ao WCF. Estamos confiantes de que Juval ajudar voc a entender porque ele, nossa comunidade
de usurios entusiastas e todos ns estamos animados com o produto e com as novas oportunidades que ele cria.
Aproveite o livro e divirta-se construindo seus primeiros servios na WCF.

Clemens Vasters

Gerente de Programao, equipe Connected Framework


Microsoft Corporation

Programando Servios WCF

Notas
1 Oferta pblica inicial o nome de uma tcnica de mercado que acompanha freqentemente iniciativas de capital
de risco. Trata-se de publicar a descrio de uma companhia e previses de dividendos e ento vender aes pela
primeira vez, dessa forma captando capital.
2 - BEA Systems o nome de uma empresa (a sigla vem do prenome dos fundadores, Bill Coleman, Ed Scott e Alfred
Chuang, todos ex-funcionrios da Sun) especializada em sistemas distribudos.
3 - W3C usado no lugar de WWWC, que sigla para World Wide Web Consortium, que se pode traduzir como
Consrcio para a Internet. A W3C um esforo conjunto de empresas e pessoas para criar e manter padres de
mercado para a Internet. O site pode ser visto em http://www.w3c.org.
4 - Framework refere-se a um conjunto amplo de tcnicas, ferramentas, aplicativos, linguagens, recursos etc., todos
usados para produzir determinados resultados ou tipos de software. termo freqente na rea de TI, ento usado aqui
sem traduo (embora possa ser traduzido como arcabouo).
5 Interoperar neologismo que vem de interoperate e significa a capacidade de um sistema de operar
diretamente com diversos outros, de tecnologias e empresas diferentes. usado nesta traduo por ser considerado
como termo tcnico da rea.
6 - WSE sigla para Web Services Enhancements, que se traduz como melhorias em servios via Internet.
7 - MSMQ sigla para Microsoft Message Queue ou Fila de Mensagens Microsoft.
8 - P2P (peer to peer) literalmente significa par para par, com par no sentido de pessoa de igual importncia,
companheiro, ou seja, algo como colega para colega.

Apndice C: Padro de Codificao

XI

Prefcio

Em agosto de 2001, aprendi pela primeira vez os detalhes de uma tentativa da Microsoft de reescrever o COM+
usando cdigo gerenciado. No aconteceu muito mais depois disso. Ento, em julho de 2002, durante uma Reviso
Estratgica de Projeto do C# 2.0, o gerente de programao remota esboou, em linhas gerais, planos para
transformar o acesso remoto em algo que os desenvolvedores deveriam realmente usar. Ao mesmo tempo, a
Microsoft tambm trabalhava na incorporao das novas especificaes de segurana para servios Web na ASMX1
e trabalhava ativamente num esforo conjunto para esboar um grande nmero de especificaes adicionais.
Em julho de 2003, tive acesso a uma nova infra-estrutura transacional que tinha se aprimorado com base nas
deficincias em programao .NET transacional. At aquele momento, no havia um modelo de programao
consistente que unificasse essas tecnologias distintas. No fim de 2003, tive o privilgio de ser convidado a juntarme a uma pequena equipe de experts do mercado exterior e participar na reviso estratgica de projeto de uma
nova plataforma de desenvolvimento que recebeu o nome cdigo Indigo. Algumas das pessoas mais inteligentes e
simpticas que eu conheo faziam parte daquela equipe. Nos 2 a 3 anos seguintes, o Indigo passou por umas trs
geraes de modelos de programao. O modelo atual, declarativo e dirigido a terminais, que estreou no incio de
2005, foi estabilizado em agosto do mesmo ano e foi chamado de WCF - Windows Communication Foundation
(Camada de Comunicao do Windows).
difcil obter uma resposta consistente de diferentes pessoas sobre o que a WCF. Para o desenvolvedor de
servios Web, a soluo definitiva de interoperabilidade, uma implementao de uma longa lista de padres de
mercado. Para o desenvolvedor de aplicativos distribudos, a maneira mais fcil de fazer chamadas remotas e at
chamadas em fila. Para o desenvolvedor de sistemas, a prxima gerao de caractersticas orientadas
produtividade, como transaes e hospedagem, que oferece a estrutura comum a todos os aplicativos. Para o
desenvolvedor de aplicativos, um modelo de programao declarativo para estruturar os programas. E para o
engenheiro, a maneira pela qual se pode finalmente construir aplicativos orientados a servios. A WCF na
verdade tudo isso, simplesmente porque ela foi projetada dessa forma para ser a prxima gerao unificada das
tecnologias discrepantes da Microsoft.
Para mim, a WCF apenas a prxima plataforma de desenvolvimento, o que, em grande escala, incorpora
programao .NET de nvel mais baixo. A WCF deveria ser usada por todos os desenvolvedores .NET,
independentemente do tipo, tamanho ou domnio de mercado de um aplicativo.A WCF uma tecnologia fundamental
que oferece uma maneira fcil e simples de gerar servios e aplicativos conforme o que considero princpios slidos
de desenvolvimento. Ela criada desde suas bases para simplificar o desenvolvimento e a distribuio de aplicativos
e para baratear o custo total de propriedade. Os servios da WCF so usados para construir aplicativos orientados
a servios, desde aplicativos de uso particular a baseados na Internet e servios para sofisticados aplicativos
empresariais de ponta.

XII

Programando Servios WCF

Como este livro est organizado


Este livro abrange os tpicos e habilidades que voc precisa para escrever e desenvolver aplicativos orientados a
servios baseados na WCF. Mostraremos como tirar vantagem de caractersticas pr-existentes, como hospedagem
de servio, administrao de instncias, administrao de concorrncia, transaes, chamadas desconectadas em
fila e segurana. Enquanto o livro mostra como usar essas caractersticas, ele se concentra no por que e nos
motivos de decises de projeto particulares. No apenas se aprender programao na WCF e as questes de
sistema relacionadas, mas tambm opes de projeto relevantes, dicas, melhores prticas e armadilhas. Abordo
quase todos os tpicos e aspectos do ponto de vista da engenharia de software porque meu objetivo no apenas
transformar o leitor num expert em WCF, mas tambm em um melhor engenheiro de software. Munido com todos
esses recursos, pode-se criar aplicativos de fcil manuteno, com extensabilidade, reutilizao e produtividade.
O livro evita muitos detalhes de implementao da WCF e limita largamente a cobertura s possibilidades e
aspectos prticos dela: como aplicar a tecnologia e como escolher entre os modelos de projeto e programao
disponveis. Aproveita-se ao mximo o que o .NET 2.0 tem a oferecer e, em alguns aspectos, tambm um livro
avanado de C#.
Alm disso, ele contm muitos utilitrios, ferramentas e classes auxiliares teis que eu escrevi. Minhas ferramentas
e classes auxiliares ou atributos tm como objetivo melhorar sua produtividade e a qualidade de seus servios WCF.
Desenvolvi literalmente um pequeno framework que se apia na WCF e compensa algumas omisses em sua
estrutura ou simplifica e automatiza certas tarefas. Este livro muito mais sobre minhas ferramentas, idias e
tcnicas do que sobre a WCF nativa, e meu framework tambm demonstra como se pode estender a WCF.
Durante os ltimos dois anos, eu publiquei vrios artigos sobre a WCF na Revista da MSDN (MSDN Magazine) e
atualmente escrevo a seo da WCF na coluna Fundamentos (Foundations) da mesma revista. Usei esses artigos
como pontos de partida para os captulos deste livro e estou grato revista por me permitir fazer isso. Mesmo que
voc tenha lido os artigos, ainda assim deveria ler os captulos correspondentes aqui. Eles esto muito mais
compreensveis, oferecem ngulos adicionais, tcnicas e exemplos e freqentemente fazem referncias aos
assuntos dos outros captulos.
Cada captulo trata sistematicamente de um nico tpico e discute cada um deles em profundidade. Entretanto,
cada um deles depende dos anteriores, ento deve-se ler na ordem.
Aqui temos um breve resumo dos captulos e apndices deste livro:

Captulo 1, O Fundamental da WCF


Inicia explicando o que a WCF e, em seguida, descreve seus conceitos essenciais e blocos de construo,
como endereos, contratos, vnculos, terminais, hospedagem e clientes. O captulo termina com uma
discusso da estrutura da WCF, o que de fato o tpico-base aprofundado nos captulos subseqentes. Este
captulo presume que se entenda a motivao bsica e os benefcios da orientao a servios. Se no o
caso, deve-se ler primeiro o Apndice A. Mesmo que j tenha familiaridade com os conceitos bsicos da
WCF, eu recomendo que se faa, pelo menos, uma leitura rpida, no apenas para garantir uma base slida,
mas tambm porque algumas das classes auxiliares e termos introduzidos aqui sero usados e aprimorados
no decorrer do livro.

Captulo 2, Contratos de Servios


dedicado a projetar e trabalhar com contratos de servios. Primeiro se aprender algumas tcnicas teis
para sobrecarga e herana em contratos e algumas tcnicas avanadas. O captulo ento discute como
projetar e desenvolver contratos que facilitem a manuteno e suportem reutilizao e extensibilidade2. O
captulo encerra mostrando como interagir via programao em tempo de execuo com os metadados dos
contratos expostos.
Apndice C: Padro de Codificao

XIII

Captulo 3, Contratos de Dados


Trata de como o cliente e o servio podem trocar dados sem nunca realmente compartilhar a tipificao3
particular dos dados ou usar a mesma tecnologia de desenvolvimento. Voc ver como lidar com algumas
questes reais, como controle de verso4 de dados e como passar colees de itens.

Captulo 4, Gerenciamento de Instncias


Dedicado a responder qual instncia de servio lida com qual requisio de cliente. A WCF suporta diversos
tipos de gerenciamentos de instncias de servio, ativao e tcnicas de gerenciamento de ciclo de vida de
objetos com implicaes drsticas em escalabilidade5 e desempenho. Este captulo mostra as razes
fundamentais para cada um dos modos de gerenciamento de instncia, oferece diretrizes sobre quando e
como melhor us-los e tambm discute alguns tpicos relacionados, como controle de fluxo (throttling)6.

Captulo 5, Operaes
Lida com os tipos de operaes que um cliente pode invocar num servio e suas diretrizes de projeto
relacionadas, como, por exemplo, como melhorar e estender as caractersticas bsicas oferecidas para
suportar o uso e descarte de callbacks7, gerenciar portas e canais de callback e obter proxys duplex com
tipificao assegurada8.

Captulo 6, Falhas
Este captulo todo sobre como os servios podem informar erros e excees aos clientes, j que excees
e tratamento de excees so tecnologias especficas e no deveriam cruzar a fronteira do servio. O
captulo discute as melhores prticas de tratamento de erro, permitindo que se desassocie o tratamento de
erro no cliente do servio. Aqui tambm demonstrarei como se pode estender e melhorar o mecanismo
bsico de tratamento de erro.

Captulo 7, Transaes
Inicia explicando a motivao para transaes em geral e, em seguida, discute os muitos aspectos de
servios transacionais: arquitetura de gerenciamento de transao, configurao de propagao de
transao, o suporte de transao declarativo oferecido pela WCF e como clientes podem criar transaes.
O captulo termina discutindo diretrizes de projeto relevantes, como gerenciamento transacional de estados
de servio e modos de instanciao.

Captulo 8, Gerenciamento de Concorrncia


Descreve a poderosa, porm simples, maneira declarativa que a WCF oferece para gerenciar concorrncia
e sincronizao, tanto para o cliente quanto para o servio. O captulo ento apresenta aspectos mais
avanados, como callbacks, recursividade, afinidade entre threads9 e contexto de sincronizao e as
melhores prticas e diretrizes para evitar deadlocks10.

Captulo 9, Servios Em Fila


Mostra como os servios podem armazenar chamadas de clientes em filas, assim permitindo trabalho
assncrono e desconectado. O captulo inicia mostrando como instalar e configurar servios em fila e, em
seguida, foca em aspectos, como transaes, gerenciamento de instncia e falhas e seu impacto tanto no
modelo de negcios do servio quanto em sua implementao.

Captulo 10, Segurana


Desmistifica a segurana orientada a servios esmiuando esta tarefa multifacetada at seus elementos
bsicos, como transferncia de mensagem, autenticao e autorizao. O captulo continua demonstrando
XIV

Programando Servios WCF

como oferecer segurana para cenrios-chave, como aplicativos para intranets ou para a Internet. Finalmente,
voc ver meu framework para segurana declarativa na WCF, projetado para automatizar a configurao
da segurana e para simplificar consideravelmente seu gerenciamento.

Apndice A, Introduo a Orientao a Servios


feito para leitores que querem entender tudo sobre orientao a servios. Este apndice apresenta minha
viso sobre orientao a servios e o que significa coloc-la em um contexto concreto. O apndice define
aplicativos orientados a servios (em vez da mera arquitetura) e os prprios servios e examina os
benefcios da metodologia. O apndice ento apresenta os princpios de orientao a servios e amplia
esses princpios abstratos com alguns pontos prticos a mais exigidos pela maioria dos aplicativos.

Apndice B, Servio de Publicao-Subscrio


Apresenta meu framework para implementao de uma soluo de gerenciamento de eventos de PublicaoSubscrio. O framework permite que voc desenvolva um servio de inscrio e publicao em literalmente
uma ou duas linhas de cdigo. Enquanto o padro Publicao-Subscrio poderia muito bem ter sido parte
do Captulo 5, est num apndice separado porque ele utiliza aspectos descritos nos outros captulos, como
transaes e chamadas em fila.

Apndice C, Padres de Codificao WCF


basicamente uma lista consolidada de todas as melhores prticas e tudo que voc deve ou no deve fazer
que foi mencionado no livro. O modelo todo sobre o como e o que, no sobre o por que. As razes
fundamentais por trs dos padres so encontradas no restante do livro. Ele tambm usa as classes
auxiliares discutidas no livro.

Algumas Suposies Sobre o Leitor


Presumo que voc, leitor, seja um desenvolvedor experiente e que esteja bem familiarizado com conceitos de
orientao a objeto, como encapsulamento e herana. Tirarei vantagem deste seu conhecimento da tecnologia e
terminologia de componentes e objetos e transportarei isso para a WCF. O ideal seria voc ter um bom conhecimento
sobre .NET e C# 2.0 (incluindo o uso de mtodos genricos e annimos). Embora o livro use C# em sua maior parte,
ele to pertinente quanto para desenvolvedores de Visual Basic 2005.

O que Voc Precisa para Usar Esse Livro


Para usar este livro, voc precisa do .NET 2.0, do Visual Studio 2005, dos componentes lanados do .NET 3.0,
juntamente com o SDK11 de desenvolvimento .NET 3.0 e extenses tambm do .NET 3.0 para Visual Studio 2005.
A no ser que explicitamente mencionado, o livro destina-se a Windows XP, Windows Server 2003 e a Windows
Vista. Voc tambm pode instalar componentes adicionais do Windows, como MSMQ e IIS.

Convenes Usadas neste Livro


As convenes tipogrficas a seguir so usadas neste livro:

Itlico
Usado para termos tcnicos, links on-line e nomes de arquivos
Fonte Courrier

Usado para trechos de cdigo, comandos, namespaces12, classes, unidades (assemblies), diretivas de
interface, operadores, atributos e palavras reservadas.
Apndice C: Padro de Codificao

XV

Courrier Negrito

Usado para nfase em cdigos

Este cone designa uma nota, que um complemento importante para o texto em que se insere.

Este cone mostra uma nota de alerta relacionada ao texto prximo.

Sempre que eu quiser explicar algum ponto em um trecho de cdigo, usarei o mtodo esttico Assert da classe
Debug:
int number = 1+2;
Debug.Assert(number == 3);

O mtodo Assert aceita uma expresso booleana13 e provoca uma exceo quando o comando false.
O livro segue as diretrizes de nomenclatura recomendadas e o estilo de programao apresentado no Apndice E
de meu livro Programando Componentes .NET (Programming .NET Components ), da OReilly. Quando ele desviar
desses padres, ser provavelmente devido a limitaes de espaamento ou tamanho da linha. Quanto a convenes
de nomenclatura, uso o padro de formatao de maisculas e minsculas do Pascal para mtodos de membros
pblicos e propriedades; isto significa que a primeira letra de cada palavra no nome maiscula. Para variveis
locais e parmetros de mtodos uso formatao camelo, na qual a primeira letra da primeira palavra do nome
no maiscula. No caso de membros privados, eu prefixo essas variveis com m_:
public class SomeClass
{
int m_Number;
public int Number
{get;set};
}

Utilizo elipses entre chaves para indicar a presena de cdigo que necessrio, mas no especificado:
public class SomeClass
{...}

No interesse da clareza e espaamento, os exemplos de cdigos, na maioria das vezes, no contm todos os
comandos using necessrios para especificar todos os namespaces que o exemplo exige; em vez disso, os exemplos
incluem apenas os namespaces introduzidos no texto que os precede.

Utilizando Exemplos de Cdigo


Este livro existe para ajud-lo a fazer seu trabalho. Em geral, voc pode usar os cdigos do livro em seus programas
e documentao. No necessrio entrar em contato conosco para permisso, a no ser que voc esteja reproduzindo
uma quantidade significativa do cdigo. Por exemplo, para escrever um programa que use muitos trechos de
cdigos deste livro, no necessria permisso. Para vender ou distribuir um CD-ROM com exemplos deste livro,
necessria permisso. Responder uma pergunta citando este livro ou usando exemplo de cdigo no requer
permisso. Incorporar uma quantidade significativa de exemplo de cdigo deste livro em sua documentao de
produtos requer permisso. Ns agradecemos, mas no exigimos, atribuio, a qual geralmente inclui o ttulo,
autor, editora e ISBN. Por exemplo: Programando Servios WCF (Programming WCF Services) por Juval Lwy.
XVI

Programando Servios WCF

Copyright 2007 OReilly Media, Inc., 978-0-596-52699-3.


Se voc considerar que a utilizao dos exemplos de cdigo desrespeita as regras da permisso acima, sinta-se
vontade para entrar em contato conosco pelo e-mail permissions@oreilly.com.

Agradecimentos
Eu no teria sido capaz de chegar a termos com a WCF em seus estgios iniciais sem o apoio constante e interao
com os gerentes de programao da WCF (Indigo nessa poca). Estou especialmente grato ao meu amigo Steve
Swartz, um dos projetistas da WCF, no apenas pelo seu conhecimento e intuio, mas tambm pela sua pacincia
comigo e aquelas longas sesses de MI14. Agradeo a Yasser Shohoud, Doug Purdy e Shy Cohen pelas fascinantes
revises estratgicas de projeto e a Krish Srinivasan por sua viso quase filosfica da engenharia. Trabalhar com
todos vocs a melhor parte de aprender WCF e um privilgio em si mesmo. Os gerentes de programao da WCF
a seguir tambm dedicaram seu tempo e ajudaram a esclarecer a WCF: Andy Milligan, Brian McNamara, Eugene
Osovetsky, Kenny Wolf, Kirill Gavrylyuk, Max Feingold, Michael Marucheck, Mike Vernal e Steve Millet. Agradeo
tambm gerente do grupo, Angela Mills.
Fora da Microsoft, agradeo a Norman Headlam e Pedro Felix por terem fornecido valiosas respostas. Sou grato a
Nicholas Paldino por sua ajuda. Seu conhecimento sobre framework .NET no fica atrs do conhecimento de
ningum, e sua ateno meticulosa aos detalhes contriburam grandemente para a qualidade e coeso deste livro.
Finalmente, a minha famlia: minha mulher, Dana, que sempre me encoraja a escrever minhas idias e tcnicas,
embora compreenda muito bem que escrever um livro requer tempo precioso longe dela e de minhas filhas; e a
meus pais, que passaram para mim o amor pela engenharia. Dedico este livro a minha filha Abigail, de sete anos,
e a Eleanor, de quatro anos. Vocs so tudo para mim.

Notas
1 - ASMX sigla para ASP.NET Web Services.
2 - Extensibilidade a traduo de extensibility e se refere a tcnicas que facilitam estender, falando de forma genrica,
um aplicativo arbitrariamente, em tamanho ou adicionando caractersticas. um termo tcnico da rea e usado
com freqncia nesta traduo.
3 A palavra muito usada em TI para indicar o uso de uma classe, estrutura (comando struct de algumas linguagens)
ou interface type, que se traduz literalmente como tipo e encontra-se traduzida dessa forma largamente na rea.
No entanto, como a palavra tipo provoca muitas confuses, j que usada com freqncia na lngua portuguesa
fora deste contexto, opta-se nesta traduo pelo uso de tipificador e tipificao onde se poderia colocar tipo e
tipagem.
4 - Versioning um termo difcil de traduzir porque utilizado em dois contextos diferentes na lngua inglesa. No existe
uma palavra em portugus correspondente (um neologismo seria versionamento). Se fosse o caso, talvez no existisse
essa dubiedade. Versioning se refere s tcnicas de controle de verso (ou seja, manter histricos de vrias publicaes
sucessivas de um software, cada uma com pequenas correes ou caractersticas adicionais) e tambm aos problemas
causados por esse controle, pela ausncia dele ou pelo processo quando mal conduzido. O termo , portanto, traduzido
de vrias formas, dependendo do contexto em que usado. Por exemplo, quando falando da tcnica, traduz-se como
controle de verso. Em casos em que se fala dos problemas, traduz-se de formas diferentes, por exemplo, a expresso
versioning tolerance traduzida como tolerncia s diferenas de verso.
5 - Escalabilidade aqui usada como traduo de scalability, palavra que se refere a tcnicas que facilitem aumentar
a escala de um aplicativo (por exemplo, aumentar o nmero de clientes que um servio atende, arbitrariamente), que
difere ligeiramente do termo extensibility (ver nota 2).
Apndice C: Padro de Codificao XVII

6 - A expresso mais geral controle de fluxo usada aqui como traduo para throttling, que se refere a tcnicas de
controlar a velocidade ou capacidade de transferncia de algum recurso (por exemplo, estabelecer, no lado de um
servidor, uma velocidade mxima para que um cliente baixe um arquivo).
7 - Callback traduz-se literalmente como retro-chamado. o nome que dado a um objeto (normalmente uma
funo ou mtodo) que executado para notificar um cliente que uma tarefa assncrona foi completada. termo
tcnico de TI e usado na sua forma original em ingls.
8 - Conforme nota 3, utiliza-se tipificao assegurada ou segurana de tipificao como traduo para type-safe,
que significa literalmente de tipo seguro, que referncia tcnica de no permitir que um programa produza erros
se ele recebe um tipificador com o qual ele no possa lidar.
9 - Thread traduz-se como linha, fibra ou malha, trama, mas refere-se em diversos contextos linha - ou
seqncia - de execuo de cdigo. Por exemplo, no Windows refere-se mnima unidade lgica seqencial de
execuo de cdigo (um processo pode ter vrias threads). Assume-se como termo tcnico e utiliza-se a forma em ingls
no restante do livro. Traduz-se a expresso relacionada thread pool como conjunto de threads, referindo-se tcnica
de ter um conjunto geral de threads que se utiliza para executar tarefas, em oposio a abrir threads particulares, a fim
de otimizar sistemas (evitando o trabalho de abrir e fechar constantemente as threads). Por fim, traduz-se worker
thread como thread operacional, referindo-se a uma thread do conjunto de threads.
10 - Deadlock traduz-se literalmente como trava morta e refere-se ocorrncia de um lao infinito sem sada que
normalmente leva ao travamento do aplicativo (por exemplo, se um servio levanta um erro que faz o cliente enviar
uma mensagem, que causa um erro, que faz o servio enviar outra mensagem, e assim por diante).
11 - SDK sigla para Software Development Kit ou kit de desenvolvimento de software.
12 - Namespace traduz-se literalmente como espao de nome. termo tcnico vital para o entendimento deste livro.
Uma forma de traduzi-lo seria nomespao, mas como existe o comando namespace, que no pode ser traduzido,
optou-se por manter a forma original em ingls em todo o livro.
13 - Neologismo muito usado na rea, decorre da lgebra de Boole e refere-se a uma expresso que pode apenas
retornar verdadeiro ou falso.
14 - MI sigla de Mensagens Instantneas (IM em ingls, Instant Messaging, literalmente algo como Mensageiamento
instantneo). Refere-se a sistemas muito populares como o MSN Messenger ou o antigo ICQ, mas tambm a sistemas
particulares de comunicao semelhantes, internos a algumas empresas.

XVIII Programando Servios WCF