A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva

Apresentações semelhantes


Apresentação em tema: "Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva"— Transcrição da apresentação:

1 Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva

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

3 O que é o WCF? WCF é um SDK (Software Development Kit) para desenvolver e instalar serviços no Windows; WCF oferece um ambiente de execução para serviços, possibilitando que tipos da CLR (Common Language Runtime) sejam expostos como serviços e que serviços sejam consumidos como tipos da CLR; WCF é a implementação de um conjunto de padrões da indústria de software que definem como devem ser as interações com serviços, as conversões de tipos e gerenciamento de vários protocolos.

4 Serviços Um serviço é uma unidade de funcionalidade exposta ao mundo; Representam o próximo passo na longa jornada: funções objetos componentes serviços; Uma aplicação orientada a serviços agrega serviços em uma única aplicação lógica, de forma similar, uma aplicação orientada a componentes agrega componentes e uma aplicação orientada a objetos agrega objetos.

5 Cliente de um Serviço O cliente de um serviço é meramente um programa que consome suas funcionalidades (métodos); Um cliente pode ser qualquer tipo de aplicação: Windows Forms, WPF, Silverlight, ASP.NET, Console ou outro serviço; Clientes e serviços interagem através do envio e recebimento de mensagens, usualmente mensagens SOAP. Tais mensagens são independentes do protocolo de transporte; Clientes WCF podem trabalhar com serviços desenvolvidos em outras tecnologias; Serviços WCF também podem trabalhar com clientes desenvolvidos em outras tecnologias.

6 Proxy Com WCF, o cliente nunca interage com o serviço diretamente, mesmo quando trata com um serviço local; O cliente sempre usa um proxy para encaminhar chamadas ao serviço; O proxy oferece as mesmas operações (métodos) que o serviço; Seus métodos são responsáveis por encapsular, de forma transparente, a criação e o envio de mensagens ao serviço.

7 Endereços No WCF, todo serviço é associado à um único endereço; O endereço possui dois elementos importantes: a localização do serviço e o protocolo de transporte; A parte do endereço referente à localização indica o nome da máquina alvo, uma porta de comunicação e um caminho específico opcional (URI); WCF suporta os seguintes protocolos de transporte: HTTP/HTTPS TCP IPC Peer network MSMQ Service bus

8 Endereços Endereços sempre têm o seguinte formato: [endereço base]/[URI opcional] O endereço base sempre tem o seguinte formato: [transporte]://[máquina ou domínio][:porta opcional] Alguns exemplos: net.tcp://localhost:8002/MyService net.pipe://localhost/MyPipe net.msmq://localhost/MyQueue

9 Endereços Endereços TCP: Usam net.tcp para transporte e tipicamente incluem um número de porta. Quando uma porta não é especificada, o valor padrão é 808. Exemplo: net.tcp://localhost:8002/MyService Endereços HTTP: Usam http para transporte e também podem usar https para transporte seguro. Endereços HTTP são tipicamente utilizados em serviços que serão publicados na Internet. Se a porta não for especificada, o valor padrão é 80. Exemplo: Endereços IPC: Usam net.pipe para transporte indicando o uso do mecanismo Windows Named Pipe. Serviços que usam o IPC aceitam somente chamadas da mesma máquina, por isso, é necessário usar o nome da máquina ou localhost no endereço, seguido de uma string única que identifica o pipe. Exemplo: net.pipe://localhost/MyPipe

10 Contratos No WCF, todos os serviços expõem contratos; O contrato é uma forma padrão e independente de plataforma de descrever o que o serviço faz; WCF define quatro tipos de contratos: Service contracts: Descrevem quais operações o cliente pode realizar no serviço; Data contracts: Definem quais tipos de dados são passados do cliente para o serviço e vice-versa. WCF define contratos implícitos para tipos primitivos como int e string; Fault contracts: Definem quais erros são lançados pelo serviço e como o serviço manipula e propaga erros para seus clientes; Message contracts: Permitem que o serviço interaja diretamente com mensagens. São úteis nos casos de interoperabilidade, quando a outra parte impõe um formato explícito de mensagem (tipicamente proprietário). A menos que requisitos como maior flexibilidade e extensibilidade sejam necessários, message contracts devem ser evitados, pois eles não adicionam valor e adicionam complexidade.

11 Service Contract O atributo ServiceContractAttribute permite que se defina um contrato de serviço. O atributo pode ser aplicado em uma interface ou em uma classe, como mostra o exemplo abaixo:

12 Service Contract O atributo ServiceContract mapeia uma interface CLR para um contrato de serviço independente de tecnologia; O atributo ServiceContract expõe uma interface CLR como um contrato WCF independentemente de sua visibilidade (modificadores de acesso). Aplicar o atributo ServiceContract à uma interface internal expõe essa interface como um contrato de serviço público; Somente interfaces decoradas com o atributo ServiceContract serão consideradas contratos WCF, outros tipos não; Adicionalmente, nenhum dos membros da interface farão parte do contrato ao aplicar somente o atributo ServiceContract, é necessário indicar explicitamente quais métodos serão expostos no contrato WCF usando o atributo OperationContract; O atributo OperationContract pode somente ser aplicado à métodos.

13 Service Contract Uma única classe pode suportar múltiplos contratos implementando interfaces decoradas com o atributo ServiceContract, conforme exemplo abaixo:

14 Hosting Todo serviço WCF deve ser hospedado em um processo Windows chamado host process; Um único host process pode hospedar múltiplos serviços e o mesmo serviço pode ser hospedado em múltiplos host processes; Não existem restrições quanto a um host process também ser um client process. Chamamos esse tipo de hosting de in-process (ou in-proc) hosting; A hospedagem de um serviço WCF pode ser feita pelo: Internet Information Services (IIS) Windows Activation Service (WAS) Windows Server AppFabric Desenvolvedor como parte da aplicação (Self-hosting)

15 IIS 5/6 Hosting A principal vantagem de hospedar um serviço no IIS é que o host process é iniciado automaticamente quando a primeira requisição do cliente é disparada; A principal desvantagem é que somente o HTTP pode ser usado como protocolo de transporte; No IIS 5, ainda existe a restrição de que todos os serviços usam o mesmo número de porta; A hospedagem no IIS é bastante similar à hospedagem de um web service clássico. É necessário criar um diretório 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:

16 IIS 5/6 Hosting O arquivo web.config tipicamente lista os tipos que se deseja expor como serviços, segue exemplo:

17 Self-Hosting Self-hosting é a técnica na qual o desenvolvedor é o responsável por prover e gerenciar o ciclo de vida do host process; É possível utilizar qualquer Windows process, tais como uma aplicação Windows Forms, WPF, Console ou um Windows Service; É importante ressaltar que o processo deve estar rodando antes do cliente fazer chamadas ao serviço. Isto não é 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 serviços que se deseja hospedar, segue exemplo:

18 Self-Hosting O host process deve registrar explicitamente o tipo do serviço em tempo de execução e abrir o host para receber as chamadas do cliente; A criação do host é tipicamente feita no método main() através da classe ServiceHost; É importante notar que cada instância de ServiceHost é associada com um tipo particular de serviço. Para hospedar vários tipos de serviço serão necessárias várias instâncias de ServiceHost; Ao executar o método Open() no host, inicia-se o tratamento das chamadas dos clientes; Ao executar o método Close(), a instância do host é finalizada, permitindo que as chamadas correntes terminem sua execução, enquanto novas chamadas são recusadas;

19 Self-Hosting Segue abaixo exemplo de código necessário para hospedar um serviço em uma aplicação Windows Forms:

20 Self-Hosting e Base Adresses É possível registrar múltiplos endereços base para um mesmo serviço, desde que não usem o mesmo protocolo de transporte: É possível registrar múltiplos hosts para um mesmo serviço, desde que usem endereços base diferentes:

21 Bindings Existem múltiplos aspectos e muitos possíveis padrões de comunicação para serviços WCF; Se todas as possíveis opções de comunicação e interação fossem contadas, provavelmente o número de combinações estaria na casa de dezenas de milhares; Claramente, cliente e serviço devem estar alinhados em todas as opções para que se estabeleça uma comunicação apropriada; Gerenciar este nível de complexidade não traz nenhum valor para maioria das aplicações, e ainda pode trazer implicações de produtividade e de qualidade severas caso decisões erradas sejam tomadas; Para simplificar essas escolhas e torná-las gerenciáveis, o WCF agrupa conjuntos de aspectos de comunicação em bindings; Um binding é meramente um conjunto de escolhas a respeito de protocolo de transporte, codificação da mensagem, padrão de comunicação, segurança, propagação de transações e interoperabilidade; Tudo que se precisa fazer é determinar o cenário alvo para o serviço e escolher um dos bindings oferecidos pelo WCF.

22 Bindings mais Comuns Basic binding: Representado pela classe BasicHttpBinding, é utilizado para expor um serviço WCF como um web service ASMX, assim clientes antigos podem trabalhar com serviços novos; TCP binding: Representado pela classe NetTcpBinding, usa o protocolo TCP para comunicação entre máquinas de uma intranet. É otimizado para comunicação WCF-to-WCF, entretanto, requer que ambos cliente e serviço usem WCF; IPC binding: Representado pela classe NetNamedPipeBinding, usa named pipes para a comunicação na mesma máquina; Web Service binding: Representado pela classe WSHttpBinding, usa HTTP ou HTTPS para transporte e oferece uma variedade de características ligadas a Internet, todas usando os padrões WS-*; MSMQ binding: Representado pela classe NetMsmqBinding, usa MSMQ para transporte e oferece suporte a chamadas desconectadas em fila.

23 Escolhendo um Binding

24 Usando Binding Existem três maneiras de trabalhar com bindings: Usar os bindings padrões como eles são; Configurar algumas das propriedades dos bindings, tais como propagação de transações e segurança; Escrever o próprio binding personalizado.

25 Endpoints Todo serviço é associado com um address que define onde o serviço está, um binding que define como se comunicar com o serviço e um contract que define o que o serviço faz; Esse triunvirato governando o serviço pode ser facilmente lembrado como ABC do serviço; O endpoint é a fusão do address, binding e contract.

26 Endpoints Todo serviço deve expor ao menos um endpoint e cada endpoint aceita somente um único contrato; Um serviço pode expor múltiplos endpoints, estes podem usar o mesmo ou bindings diferentes e podem expor o mesmo ou contratos diferentes; É importante ressaltar que nada no código do serviço pertence aos seus endpoints, e eles são sempre externos ao código do serviço; É possível configurar endpoints ou através de um arquivo de configuração (app.config ou web.config) ou programaticamente.

27 Endpoints Abaixo exemplo de arquivo de configuração definindo um serviço que expõe múltiplos endpoints:

28 Endpoints Abaixo exemplo de configuração de endpoints programaticamente:

29 Metadata Exchange Por padrão, o serviço não publicará seus metadados; Publicar os metadados de um serviço envolve um esforço significativo, uma vez que você tem que converter tipos CLR e informações de binding em WSDL, e todo esse esforço não agrega nenhum valor ao serviço; Felizmente, o host já sabe tudo o que precisa saber sobre um serviço e seus endpoints, então ele pode publicar os metadados se for explicitamente instruído a fazê-lo; Existem duas opções para publicar os metadados de um serviço: Usando HTTP-GET (protocolo baseado em texto suportado pela maioria das plataformas); Ou usando um endpoint dedicado.

30 Metadata usando HTTP-GET WCF pode gerar os metadados de um serviço usando HTTP-GET automaticamente; Basta habilitar explicitamente essa funcionalidade, adicionando um behavior ao serviço; Por padrão, o endereço que os clientes devem usar para acessar os metadados é o registrado como endereço HTTP base do serviço; Uma vez habilitada a troca de metadados através do HTTP- GET, é possível acessar o endereço base do serviço através de um browser, mesmo que se tenha feito a hospedagem do serviço usando a técnica de self-hosting.

31 Metadata usando HTTP-GET Segue abaixo exemplo de como habilitar essa funcionalidade:

32 Metadata Exchange Endpoint Publicação de metadados usando HTTP-GET é meramente uma funcionalidade do WCF, não há garantias que outras plataformas suportarão essa maneira de expor os metadados; Existe uma maneira de publicar metadados através de um endpoint especial chamado metadata exchange endpoint; Tudo que se precisa fazer é determinar o endereço e o binding e adicionar o metadata behavior; Para o binding, o WCF oferece suporte aos protocolos HTTP, HTTPS, TCP e IPC; Para o endereço, é possível usar um endereço completo ou qualquer endereço base registrado.

33 Metadata Exchange Endpoint Abaixo exemplo que expõe três MEX endpoints:

34 WCF Test Host O Visual Studio 2010 traz consigo um host de serviço de propósito geral; O executável é chamado WcfSvcHost.exe; WcfSvcHost é um utilitário de linha de comando que aceita dois parâmetros: O caminho do assembly que contém a classe do serviço; O caminho do arquivo de configuração do host; Exemplo de comando: WcfSvcHost.exe /service:MyService.dll /config:App.config O assembly especificado pode ser uma class library (DLL) ou uma aplicação (EXE).

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 diálogo aparece listando todos os serviços hospedados; No painel Debug das propriedades do projeto é possível especificar o WcfSvcHost.exe como programa externo a ser inicializado; A maior vantagem de usar o WcfSvcHost é que durante o desenvolvimento, não será necessário desenvolver um projeto de host separado; A maior desvantagem é que ele somente pode ser usado em cenários simples nos quais não é necessário: Acesso a instância do host antes de abri-lo; Acesso ao modelo de eventos após aberto.

36 Programação no Cliente Para executar operações em um serviço, um cliente precisa importar o contrato do serviço; Se o cliente usa WCF, a forma mais comum de executar operações é usar um proxy; O proxy é uma classe CLR que expõe uma única interface CLR que representa o contrato do serviço; Se o serviço suporta vários contratos, o cliente precisa de um proxy para cada contrato; O proxy encapsula todos os aspectos do serviço como sua localização, tecnologia de implementação e regras de comunicação.

37 Gerando o Proxy O Visual Studio 2010 permite importar os metadados do serviço e gerar um proxy usando a opção Add Service Reference do menu de contexto do projeto; Se o serviço foi hospedado usando a técnica de self-hosting e não faz parte da mesma solution, é necessário executar a aplicação que hospeda o serviço e, após isso, selecionar a opção Add Service Reference; Se o serviço é self-hosted e faz parte da mesma solution, é necessário executá-lo sem o debugger antes de selecionar a opção Add Service Reference; Se o serviço é hospedado no IIS 5/6 ou WAS, não há necessidade de executá-lo antes de criar o proxy; Na tela Add Service Reference especifica-se o endereço dos metadados do serviço e o namespace no qual o proxy será criado. Ao clicar no botão OK, o Visual Studio criará o proxy e atualizará o arquivo de configuração; Uma vez adicionada uma referência, o projeto apresentará uma nova pasta Service References e nela existirá um item para cada serviço;

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 serviço MyService está hospedado no IIS e publica seus metadados através do HHTP-GET, pode-se executar o seguinte comando para gerar o proxy: SvcUtil /out:Proxy.cs

39 Configuração do Cliente O cliente precisa saber onde o serviço está hospedado, deve usar o mesmo binding que o serviço e, é claro, importar a definição do contrato do serviço; Na essência, isto é exatamente a mesma informação usada no endpoint do serviço. Para refletir isso, o arquivo de configuração do cliente pode usar as mesmas configurações usadas no endpoint do host; O WCF oferece um editor de arquivos de configuração chamado SvcConfigEditor.exe, que pode editar os arquivos de configuração do host e do cliente. Pode ser executado através do Visual Studio clicando com o botão direito do mouse sobre o arquivo de configuração e selecionando Edit WCF Configuration; Abaixo exemplo de arquivo de configuração no cliente:

40 SvcConfigEditor

41 Trabalhando com Proxy Para o usar o proxy, o cliente precisa instanciar um objeto proxy passando para o construtor o nome da seção endpoint do arquivo de configuração; Em seguida, o cliente pode usar métodos do proxy para chamar métodos do serviço e, após o término da execução do método, o cliente precisa fechar o proxy, conforme exemplo:

42 WCF Test Client O Visual Studio 2010 traz consigo um simples cliente de propósito geral que pode ser usado para executar operações na maioria dos serviços; O cliente é chamado de WcfTestClient.exe e pode ser executado conforme exemplo abaixo: WcfTestClient.exe

43 WCF Test Client


Carregar ppt "Desenvolvimento de Aplicações para Web Rodrigo Cristiano Silva"

Apresentações semelhantes


Anúncios Google