Transcript of Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva rodrigo@facens.br.
- Slide 1
- Desenvolvimento de Aplicaes para Web Rodrigo Cristiano Silva
rodrigo@facens.br
- Slide 2
- WCF Addresses TCP HTTP Contracts Service Contract Data Contract
Bindings Basic TCP Hosting IIS 5/6 Self- Hosting Endpoints Address
Binding Contract Client Proxy
- Slide 3
- O que o WCF? WCF um SDK (Software Development Kit) para
desenvolver e instalar servios no Windows; WCF oferece um ambiente
de execuo para servios, possibilitando que tipos da CLR (Common
Language Runtime) sejam expostos como servios e que servios sejam
consumidos como tipos da CLR; WCF a implementao de um conjunto de
padres da indstria de software que definem como devem ser as
interaes com servios, as converses de tipos e gerenciamento de
vrios protocolos.
- Slide 4
- Servios Um servio uma unidade de funcionalidade exposta ao
mundo; Representam o prximo passo na longa jornada: funes objetos
componentes servios; Uma aplicao orientada a servios agrega servios
em uma nica aplicao lgica, de forma similar, uma aplicao orientada
a componentes agrega componentes e uma aplicao orientada a objetos
agrega objetos.
- Slide 5
- Cliente de um Servio O cliente de um servio meramente um
programa que consome suas funcionalidades (mtodos); Um cliente pode
ser qualquer tipo de aplicao: Windows Forms, WPF, Silverlight,
ASP.NET, Console ou outro servio; Clientes e servios interagem
atravs do envio e recebimento de mensagens, usualmente mensagens
SOAP. Tais mensagens so independentes do protocolo de transporte;
Clientes WCF podem trabalhar com servios desenvolvidos em outras
tecnologias; Servios WCF tambm podem trabalhar com clientes
desenvolvidos em outras tecnologias.
- Slide 6
- Proxy Com WCF, o cliente nunca interage com o servio
diretamente, mesmo quando trata com um servio local; O cliente
sempre usa um proxy para encaminhar chamadas ao servio; O proxy
oferece as mesmas operaes (mtodos) que o servio; Seus mtodos so
responsveis por encapsular, de forma transparente, a criao e o
envio de mensagens ao servio.
- Slide 7
- Endereos No WCF, todo servio associado um nico endereo; O
endereo possui dois elementos importantes: a localizao do servio e
o protocolo de transporte; A parte do endereo referente localizao
indica o nome da mquina alvo, uma porta de comunicao e um caminho
especfico opcional (URI); WCF suporta os seguintes protocolos de
transporte: HTTP/HTTPS TCP IPC Peer network MSMQ Service bus
- Slide 8
- Endereos Endereos sempre tm o seguinte formato: [endereo
base]/[URI opcional] O endereo base sempre tem o seguinte formato:
[transporte]://[mquina ou domnio][:porta opcional] Alguns exemplos:
http://localhost:8001/MyService net.tcp://localhost:8002/MyService
net.pipe://localhost/MyPipe net.msmq://localhost/MyQueue
- Slide 9
- Endereos Endereos TCP: Usam net.tcp para transporte e
tipicamente incluem um nmero de porta. Quando uma porta no
especificada, o valor padro 808. Exemplo:
net.tcp://localhost:8002/MyService Endereos HTTP: Usam http para
transporte e tambm podem usar https para transporte seguro.
Endereos HTTP so tipicamente utilizados em servios que sero
publicados na Internet. Se a porta no for especificada, o valor
padro 80. Exemplo: http://localhost:8001/MyService Endereos IPC:
Usam net.pipe para transporte indicando o uso do mecanismo Windows
Named Pipe. Servios que usam o IPC aceitam somente chamadas da
mesma mquina, por isso, necessrio usar o nome da mquina ou
localhost no endereo, seguido de uma string nica que identifica o
pipe. Exemplo: net.pipe://localhost/MyPipe
- Slide 10
- Contratos No WCF, todos os servios expem contratos; O contrato
uma forma padro e independente de plataforma de descrever o que o
servio faz; WCF define quatro tipos de contratos: Service
contracts: Descrevem quais operaes o cliente pode realizar no
servio; Data contracts: Definem quais tipos de dados so passados do
cliente para o servio e vice-versa. WCF define contratos implcitos
para tipos primitivos como int e string; Fault contracts: Definem
quais erros so lanados pelo servio e como o servio manipula e
propaga erros para seus clientes; Message contracts: Permitem que o
servio interaja diretamente com mensagens. So teis nos casos de
interoperabilidade, quando a outra parte impe um formato explcito
de mensagem (tipicamente proprietrio). A menos que requisitos como
maior flexibilidade e extensibilidade sejam necessrios, message
contracts devem ser evitados, pois eles no adicionam valor e
adicionam complexidade.
- Slide 11
- Service Contract O atributo ServiceContractAttribute permite
que se defina um contrato de servio. O atributo pode ser aplicado
em uma interface ou em uma classe, como mostra o exemplo
abaixo:
- Slide 12
- Service Contract O atributo ServiceContract mapeia uma
interface CLR para um contrato de servio independente de
tecnologia; O atributo ServiceContract expe uma interface CLR como
um contrato WCF independentemente de sua visibilidade
(modificadores de acesso). Aplicar o atributo ServiceContract uma
interface internal expe essa interface como um contrato de servio
pblico; Somente interfaces decoradas com o atributo ServiceContract
sero consideradas contratos WCF, outros tipos no; Adicionalmente,
nenhum dos membros da interface faro parte do contrato ao aplicar
somente o atributo ServiceContract, necessrio indicar
explicitamente quais mtodos sero expostos no contrato WCF usando o
atributo OperationContract; O atributo OperationContract pode
somente ser aplicado mtodos.
- Slide 13
- Service Contract Uma nica classe pode suportar mltiplos
contratos implementando interfaces decoradas com o atributo
ServiceContract, conforme exemplo abaixo:
- Slide 14
- Hosting Todo servio WCF deve ser hospedado em um processo
Windows chamado host process; Um nico host process pode hospedar
mltiplos servios e o mesmo servio pode ser hospedado em mltiplos
host processes; No existem restries quanto a um host process tambm
ser um client process. Chamamos esse tipo de hosting de in-process
(ou in-proc) hosting; A hospedagem de um servio WCF pode ser feita
pelo: Internet Information Services (IIS) Windows Activation
Service (WAS) Windows Server AppFabric Desenvolvedor como parte da
aplicao (Self-hosting)
- Slide 15
- IIS 5/6 Hosting A principal vantagem de hospedar um servio no
IIS que o host process iniciado automaticamente quando a primeira
requisio do cliente disparada; A principal desvantagem que somente
o HTTP pode ser usado como protocolo de transporte; No IIS 5, ainda
existe a restrio de que todos os servios usam o mesmo nmero de
porta; A hospedagem no IIS bastante similar hospedagem de um web
service clssico. necessrio criar um diretrio virtual no IIS e um
arquivo.svc; O arquivo.svc funciona de forma similar ao
arquivo.asmx, usado para identificar o arquivo e a classe do code
behind, segue exemplo:
- Slide 16
- IIS 5/6 Hosting O arquivo web.config tipicamente lista os tipos
que se deseja expor como servios, segue exemplo:
- Slide 17
- Self-Hosting Self-hosting a tcnica na qual o desenvolvedor o
responsvel por prover e gerenciar o ciclo de vida do host process;
possvel utilizar qualquer Windows process, tais como uma aplicao
Windows Forms, WPF, Console ou um Windows Service; importante
ressaltar que o processo deve estar rodando antes do cliente fazer
chamadas ao servio. Isto no um problema para um Windows Service ou
para uma hospedagem in-proc; Diferentemente da hospedagem no IIS,
um self-hosted service pode usar qualquer protocolo de transporte
do WCF; Como na hospedagem IIS, o arquivo app.config tipicamente
lista os tipos dos servios que se deseja hospedar, segue
exemplo:
- Slide 18
- Self-Hosting O host process deve registrar explicitamente o
tipo do servio em tempo de execuo e abrir o host para receber as
chamadas do cliente; A criao do host tipicamente feita no mtodo
main() atravs da classe ServiceHost; importante notar que cada
instncia de ServiceHost associada com um tipo particular de servio.
Para hospedar vrios tipos de servio sero necessrias vrias instncias
de ServiceHost; Ao executar o mtodo Open() no host, inicia-se o
tratamento das chamadas dos clientes; Ao executar o mtodo Close(),
a instncia do host finalizada, permitindo que as chamadas correntes
terminem sua execuo, enquanto novas chamadas so recusadas;
- Slide 19
- Self-Hosting Segue abaixo exemplo de cdigo necessrio para
hospedar um servio em uma aplicao Windows Forms:
- Slide 20
- Self-Hosting e Base Adresses possvel registrar mltiplos
endereos base para um mesmo servio, desde que no usem o mesmo
protocolo de transporte: possvel registrar mltiplos hosts para um
mesmo servio, desde que usem endereos base diferentes:
- Slide 21
- Bindings Existem mltiplos aspectos e muitos possveis padres de
comunicao para servios WCF; Se todas as possveis opes de comunicao
e interao fossem contadas, provavelmente o nmero de combinaes
estaria na casa de dezenas de milhares; Claramente, cliente e
servio devem estar alinhados em todas as opes para que se estabelea
uma comunicao apropriada; Gerenciar este nvel de complexidade no
traz nenhum valor para maioria das aplicaes, e ainda pode trazer
implicaes de produtividade e de qualidade severas caso decises
erradas sejam tomadas; Para simplificar essas escolhas e torn-las
gerenciveis, o WCF agrupa conjuntos de aspectos de comunicao em
bindings; Um binding meramente um conjunto de escolhas a respeito
de protocolo de transporte, codificao da mensagem, padro de
comunicao, segurana, propagao de transaes e interoperabilidade;
Tudo que se precisa fazer determinar o cenrio alvo para o servio e
escolher um dos bindings oferecidos pelo WCF.
- Slide 22
- Bindings mais Comuns Basic binding: Representado pela classe
BasicHttpBinding, utilizado para expor um servio WCF como um web
service ASMX, assim clientes antigos podem trabalhar com servios
novos; TCP binding: Representado pela classe NetTcpBinding, usa o
protocolo TCP para comunicao entre mquinas de uma intranet.
otimizado para comunicao WCF-to-WCF, entretanto, requer que ambos
cliente e servio usem WCF; IPC binding: Representado pela classe
NetNamedPipeBinding, usa named pipes para a comunicao na mesma
mquina; Web Service binding: Representado pela classe
WSHttpBinding, usa HTTP ou HTTPS para transporte e oferece uma
variedade de caractersticas ligadas a Internet, todas usando os
padres WS-*; MSMQ binding: Representado pela classe NetMsmqBinding,
usa MSMQ para transporte e oferece suporte a chamadas desconectadas
em fila.
- Slide 23
- Escolhendo um Binding
- Slide 24
- Usando Binding Existem trs maneiras de trabalhar com bindings:
Usar os bindings padres como eles so; Configurar algumas das
propriedades dos bindings, tais como propagao de transaes e
segurana; Escrever o prprio binding personalizado.
- Slide 25
- Endpoints Todo servio associado com um address que define onde
o servio est, um binding que define como se comunicar com o servio
e um contract que define o que o servio faz; Esse triunvirato
governando o servio pode ser facilmente lembrado como ABC do
servio; O endpoint a fuso do address, binding e contract.
- Slide 26
- Endpoints Todo servio deve expor ao menos um endpoint e cada
endpoint aceita somente um nico contrato; Um servio pode expor
mltiplos endpoints, estes podem usar o mesmo ou bindings diferentes
e podem expor o mesmo ou contratos diferentes; importante ressaltar
que nada no cdigo do servio pertence aos seus endpoints, e eles so
sempre externos ao cdigo do servio; possvel configurar endpoints ou
atravs de um arquivo de configurao (app.config ou web.config) ou
programaticamente.
- Slide 27
- Endpoints Abaixo exemplo de arquivo de configurao definindo um
servio que expe mltiplos endpoints:
- Slide 28
- Endpoints Abaixo exemplo de configurao de endpoints
programaticamente:
- Slide 29
- Metadata Exchange Por padro, o servio no publicar seus
metadados; Publicar os metadados de um servio envolve um esforo
significativo, uma vez que voc tem que converter tipos CLR e
informaes de binding em WSDL, e todo esse esforo no agrega nenhum
valor ao servio; Felizmente, o host j sabe tudo o que precisa saber
sobre um servio e seus endpoints, ento ele pode publicar os
metadados se for explicitamente instrudo a faz-lo; Existem duas
opes para publicar os metadados de um servio: Usando HTTP-GET
(protocolo baseado em texto suportado pela maioria das
plataformas); Ou usando um endpoint dedicado.
- Slide 30
- Metadata usando HTTP-GET WCF pode gerar os metadados de um
servio usando HTTP-GET automaticamente; Basta habilitar
explicitamente essa funcionalidade, adicionando um behavior ao
servio; Por padro, o endereo que os clientes devem usar para
acessar os metadados o registrado como endereo HTTP base do servio;
Uma vez habilitada a troca de metadados atravs do HTTP- GET,
possvel acessar o endereo base do servio atravs de um browser,
mesmo que se tenha feito a hospedagem do servio usando a tcnica de
self-hosting.
- Slide 31
- Metadata usando HTTP-GET Segue abaixo exemplo de como habilitar
essa funcionalidade:
- Slide 32
- Metadata Exchange Endpoint Publicao de metadados usando
HTTP-GET meramente uma funcionalidade do WCF, no h garantias que
outras plataformas suportaro essa maneira de expor os metadados;
Existe uma maneira de publicar metadados atravs de um endpoint
especial chamado metadata exchange endpoint; Tudo que se precisa
fazer determinar o endereo e o binding e adicionar o metadata
behavior; Para o binding, o WCF oferece suporte aos protocolos
HTTP, HTTPS, TCP e IPC; Para o endereo, possvel usar um endereo
completo ou qualquer endereo base registrado.
- Slide 33
- Metadata Exchange Endpoint Abaixo exemplo que expe trs MEX
endpoints:
- Slide 34
- WCF Test Host O Visual Studio 2010 traz consigo um host de
servio de propsito geral; O executvel chamado WcfSvcHost.exe;
WcfSvcHost um utilitrio de linha de comando que aceita dois
parmetros: O caminho do assembly que contm a classe do servio; O
caminho do arquivo de configurao do host; Exemplo de comando:
WcfSvcHost.exe /service:MyService.dll /config:App.config O assembly
especificado pode ser uma class library (DLL) ou uma aplicao
(EXE).
- Slide 35
- WCF Test Host Uma vez executado, o WcfSvcHost coloca um cone na
barra de tarefas do Windows e, ao clicar nesse cone, uma caixa de
dilogo aparece listando todos os servios hospedados; No painel
Debug das propriedades do projeto possvel especificar o
WcfSvcHost.exe como programa externo a ser inicializado; A maior
vantagem de usar o WcfSvcHost que durante o desenvolvimento, no ser
necessrio desenvolver um projeto de host separado; A maior
desvantagem que ele somente pode ser usado em cenrios simples nos
quais no necessrio: Acesso a instncia do host antes de abri-lo;
Acesso ao modelo de eventos aps aberto.
- Slide 36
- Programao no Cliente Para executar operaes em um servio, um
cliente precisa importar o contrato do servio; Se o cliente usa
WCF, a forma mais comum de executar operaes usar um proxy; O proxy
uma classe CLR que expe uma nica interface CLR que representa o
contrato do servio; Se o servio suporta vrios contratos, o cliente
precisa de um proxy para cada contrato; O proxy encapsula todos os
aspectos do servio como sua localizao, tecnologia de implementao e
regras de comunicao.
- Slide 37
- Gerando o Proxy O Visual Studio 2010 permite importar os
metadados do servio e gerar um proxy usando a opo Add Service
Reference do menu de contexto do projeto; Se o servio foi hospedado
usando a tcnica de self-hosting e no faz parte da mesma solution,
necessrio executar a aplicao que hospeda o servio e, aps isso,
selecionar a opo Add Service Reference; Se o servio self-hosted e
faz parte da mesma solution, necessrio execut-lo sem o debugger
antes de selecionar a opo Add Service Reference; Se o servio
hospedado no IIS 5/6 ou WAS, no h necessidade de execut-lo antes de
criar o proxy; Na tela Add Service Reference especifica-se o
endereo dos metadados do servio e o namespace no qual o proxy ser
criado. Ao clicar no boto OK, o Visual Studio criar o proxy e
atualizar o arquivo de configurao; Uma vez adicionada uma
referncia, o projeto apresentar uma nova pasta Service References e
nela existir um item para cada servio;
- Slide 38
- Proxy usando SvcUtil Uma alternativa para importar os metadados
e criar o proxy usar a ferramenta de linha de comando SvcUtil.exe;
Por exemplo, se o servio MyService est hospedado no IIS e publica
seus metadados atravs do HHTP-GET, pode-se executar o seguinte
comando para gerar o proxy: SvcUtil
http://localhost/MyService/MyService.svc /out:Proxy.cs
- Slide 39
- Configurao do Cliente O cliente precisa saber onde o servio est
hospedado, deve usar o mesmo binding que o servio e, claro,
importar a definio do contrato do servio; Na essncia, isto
exatamente a mesma informao usada no endpoint do servio. Para
refletir isso, o arquivo de configurao do cliente pode usar as
mesmas configuraes usadas no endpoint do host; O WCF oferece um
editor de arquivos de configurao chamado SvcConfigEditor.exe, que
pode editar os arquivos de configurao do host e do cliente. Pode
ser executado atravs do Visual Studio clicando com o boto direito
do mouse sobre o arquivo de configurao e selecionando Edit WCF
Configuration; Abaixo exemplo de arquivo de configurao no
cliente:
- Slide 40
- SvcConfigEditor
- Slide 41
- Trabalhando com Proxy Para o usar o proxy, o cliente precisa
instanciar um objeto proxy passando para o construtor o nome da seo
endpoint do arquivo de configurao; Em seguida, o cliente pode usar
mtodos do proxy para chamar mtodos do servio e, aps o trmino da
execuo do mtodo, o cliente precisa fechar o proxy, conforme
exemplo:
- Slide 42
- WCF Test Client O Visual Studio 2010 traz consigo um simples
cliente de propsito geral que pode ser usado para executar operaes
na maioria dos servios; O cliente chamado de WcfTestClient.exe e
pode ser executado conforme exemplo abaixo: WcfTestClient.exe
http://localhost:9000/
- Slide 43
- WCF Test Client