desenvolvimento de aplicações para web rodrigo cristiano silva [email protected]

43
Windows Communication Foundation Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva [email protected]

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

  • Slide 1
  • Desenvolvimento de Aplicaes para Web Rodrigo Cristiano Silva [email protected]
  • 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