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/