estudo comparativo sobre aps.net web services e … · binários utilizando o com (component object...

19
1 ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E WCF Daniel Strassburger <[email protected]> Edemar Costa <[email protected]> – Orientador Universidade Luterana do Brasil (Ulbra) – Curso de Ciência da Computação – Câmpus Canoas Av. Farroupilha, 8001 – Bairro São José – CEP 92425-900 – Canoas - RS 29 de Novembro de 2011 RESUMO Este artigo propõe a comparação entre dois sistemas orientados a serviços, um deles utilizando o método de ASP. NET Web Services (ASMX) e o outro utilizando o Windows Communication Foundation (WCF). A comparação abordou quesitos fundamentais na comunicação orientada a serviços. São eles: transações, segurança, reúso, interoperabilidade e aplicabilidade. O objetivo é mostrar as vantagens da migração para a nova tecnologia WCF. Palavras-chave: Comparação, Web Services, WCF, ASMX, SOA. ABSTRACT Title: “Comparative study between ASP.NET Web Services and WCF Web Services” This paper proposes the comparison between two service oriented systems, one of them utilizing the ASP.NET Web Services (ASMX) method and the other utilizing the Windows Communication Foundation (WCF). The comparison treated fundamental questions in the oriented communication services: transactions, security, reuse, interoperability, applicability. The goal is to show the advantages of migration to new WCF technology. Key-words: Comparison, Web Services, WCF, ASMX, SOA. 1 INTRODUÇÃO A comunicação entre aplicações é um item cada vez mais discutido e implementado. Devido à quantidade de tecnologias e métodos difundidos nos dias de hoje, existe grande variedade de formas destinadas a realizar a comunicação entre sistemas. Com a evolução das linguagens, identifica-se alguns conceitos antigos sobre comunicação entre aplicações, como bibliotecas estáticas (.lib) ou dinâmicas (.dll), interoperação e intercâmbio de componentes binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. No entanto, na era da internet e dos sistemas web, não há necessidade de continuar utilizando alternativas legadas. Sendo assim, criou-se a orientação a serviços, conceito ao qual este método incorporou os benefícios das metodologias anteriores, aperfeiçoando seu desempenho. Claro, a orientação a serviços também apresenta desafios. “A engenharia de software moderna é o refinamento contínuo dos níveis sempre crescentes de independência” (LÖWY, 2010). O problema é qual e por que escolher tal solução. Com base neste dilema, este artigo abordará um comparativo entre duas soluções de interoperabilidade: uma utilizando clássicos Web Services e outra utilizando WCF Web Services com a linguagem ASP.NET e o Visual Studio 10. O item 2 deste artigo terá enfoque teórico sobre as metodologias e formas de resolver o problema, ao referir-se a serviços, serviços Web, WCF e arquitetura orientada a serviços. O item 3, apresentará a definição da solução proposta, e o item 4 mostrará a validação dos dados. Por fim, no item 6, será feita a conclusão, baseada nos resultados. 2 REFERENCIAL TEÓRICO Tratando-se de exposição e consumo de serviços, muitas soluções podem ser encontradas, como “computação na nuvem” (cloud computing), software como serviço (SaaS) e serviços web (Web Services). Cada uma destas soluções tem suas peculiaridades. No caso de computação na nuvem, o conceito é utilizar

Upload: vutruc

Post on 08-Nov-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

1

ESTUDO COMPARATIVO SOBRE APS.NET WEB

SERVICES E WCF

Daniel Strassburger <[email protected]>

Edemar Costa <[email protected]> – Orientador

Universidade Luterana do Brasil (Ulbra) – Curso de Ciência da Computação – Câmpus Canoas

Av. Farroupilha, 8001 – Bairro São José – CEP 92425-900 – Canoas - RS

29 de Novembro de 2011

RESUMO

Este artigo propõe a comparação entre dois sistemas orientados a serviços, um deles utilizando o método de

ASP. NET Web Services (ASMX) e o outro utilizando o Windows Communication Foundation (WCF). A

comparação abordou quesitos fundamentais na comunicação orientada a serviços. São eles: transações, segurança,

reúso, interoperabilidade e aplicabilidade. O objetivo é mostrar as vantagens da migração para a nova tecnologia

WCF.

Palavras-chave: Comparação, Web Services, WCF, ASMX, SOA.

ABSTRACT

Title: “Comparative study between ASP.NET Web Services and WCF Web Services”

This paper proposes the comparison between two service oriented systems, one of them utilizing the ASP.NET

Web Services (ASMX) method and the other utilizing the Windows Communication Foundation (WCF). The

comparison treated fundamental questions in the oriented communication services: transactions, security, reuse,

interoperability, applicability. The goal is to show the advantages of migration to new WCF technology.

Key-words: Comparison, Web Services, WCF, ASMX, SOA.

1 INTRODUÇÃO

A comunicação entre aplicações é um item cada vez mais discutido e implementado. Devido à

quantidade de tecnologias e métodos difundidos nos dias de hoje, existe grande variedade de formas

destinadas a realizar a comunicação entre sistemas.

Com a evolução das linguagens, identifica-se alguns conceitos antigos sobre comunicação entre

aplicações, como bibliotecas estáticas (.lib) ou dinâmicas (.dll), interoperação e intercâmbio de componentes

binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. No

entanto, na era da internet e dos sistemas web, não há necessidade de continuar utilizando alternativas

legadas.

Sendo assim, criou-se a orientação a serviços, conceito ao qual este método incorporou os benefícios

das metodologias anteriores, aperfeiçoando seu desempenho. Claro, a orientação a serviços também

apresenta desafios. “A engenharia de software moderna é o refinamento contínuo dos níveis sempre

crescentes de independência” (LÖWY, 2010).

O problema é qual e por que escolher tal solução. Com base neste dilema, este artigo abordará um

comparativo entre duas soluções de interoperabilidade: uma utilizando clássicos Web Services e outra

utilizando WCF Web Services com a linguagem ASP.NET e o Visual Studio 10.

O item 2 deste artigo terá enfoque teórico sobre as metodologias e formas de resolver o problema, ao

referir-se a serviços, serviços Web, WCF e arquitetura orientada a serviços. O item 3, apresentará a definição

da solução proposta, e o item 4 mostrará a validação dos dados. Por fim, no item 6, será feita a conclusão,

baseada nos resultados.

2 REFERENCIAL TEÓRICO

Tratando-se de exposição e consumo de serviços, muitas soluções podem ser encontradas, como

“computação na nuvem” (cloud computing), software como serviço (SaaS) e serviços web (Web Services).

Cada uma destas soluções tem suas peculiaridades. No caso de computação na nuvem, o conceito é utilizar

Page 2: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

2

recursos que estão fisicamente em outro lugar, longe do usuário. Já com SaaS, temos ferramentas prontas

para serem utilizadas e não é necessário licenças de software e sim taxas, diluídas mas vitalícias. A terceira

tecnologia é a disponibilização e consumo de Web Services, de forma que a comunicação entre sistemas seja

mais rápida, ágil e segura.

Os projetistas de software devem optar pela forma de comunicação mais adequada à empresa,

visando a maximizar seus resultados e a atender seus requisitos. Principalmente, buscar a redução de custos

desnecessários ao negócio, como, por exemplo, gastos com infraestrutura, aplicações comuns etc. Estima-se

que até 90% dos custos de TI (tecnologia da informação) são relativos à manutenção em sistemas legados

(PIGOSKI, 1996).

Com o uso de Web Services, há a viabilidade de comunicação entre aquele que disponibiliza e o que

consome o serviço, mas também auxilia a integração e interoperabilidade entre sistemas heterogêneos

(tecnologias diferentes, plataformas distintas, sistemas legados etc.). Daí, a importância de utilizar os

princípios de arquiteturas orientadas a serviços.

2.1 Histórico

Tudo começou pela década de 1920, na Polônia, quando foi construído o primeiro computador

eletromecânico, do tamanho de uma máquina de escrever. Na década de 1930, esse computador foi vendido

aos alemães, sendo utilizado para criptografar a comunicação. Hoje ele é conhecido como a máquina

Enigma. “A Enigma não era um computador de propósitos gerais: ela apenas conseguia fazer o ciframento e

decodificação (hoje chamamos isso de encriptação e decriptação)” (LÖWY, 2007, p. 476). Todo o algoritmo

e lógica eram representados por rotores, e se o usuário quisesse mudar este algoritmo teria que alterar a

estrutura mecânica da máquina, trocar rotores, ordem, posição inicial e cabos. Segundo Löwy (2010), o

algoritmo era dependente do problema para o qual foi programado e do projeto de hardware da máquina.

Isso começou a mudar no final dos anos 1940 e início dos anos 1950, quando os primeiros

computadores eletrônicos de propósitos gerais passaram a admitir o desenvolvimento de algoritmos. Agora

as máquinas podiam executar códigos dirigidos para qualquer problema e não apenas a um problema

especifico para diversos problemas. Durante a Segunda Guerra Mundial, foi usado com o objetivo de defesa.

Ainda assim, os códigos gerados nessa época eram ligados diretamente ao hardware, não podendo ser

executados em outros computadores. Mas isso não era problema, visto que existiam poucos computadores

úteis no mundo todo.

E, assim, as linguagens foram evoluindo. Na década de 1960 já existiam linguagens de mais alto

nível, como Cobol e Fortran, que introduziram o conceito de compiladores: o desenvolvedor escreveria o

programa de uma maneira, e o compilador geraria os códigos de que a máquina necessitava. O problema

agora era que a linguagem não era completamente estrutural, pois havia recursos de salto (jump) e ir para (go

to), que muitas vezes causavam efeitos desastrosos nos algoritmos que os usavam.

2.1.1 Linguagem estruturada

Nos anos 1970, nasceram as linguagens estruturadas, propriamente ditas, como C e Pascal. Uma

verdadeira revolução, no qual desassociaram o código gerado de seu formato e estrutura interna,

introduzindo o conceito de funções e estruturas. Iniciaram-se também as pesquisas sobre Engenharia de

Software, visando à redução de custos. Empresas começaram a tratar do reúso em suas aplicações. Em C, o

reúso é feito através da utilização de funções. Mas, com variáveis globais, é comum ocorrerem alterações, o

que pode danificar uma ou mais funções. “O problema com o reúso baseado em função é que ele é

dependente dos dados que manipula” (LÖWY, 2007, p. 477).

2.1.2 Orientação a objetos

Na década de 1980, a solução para estes problemas foi proposta pela criação das linguagens

orientadas a objetos, como Smalltalk, C++ e logo em seguida o Java. Agora, a função e os dados estão em

um mesmo objeto, resolvendo o problema da linguagem estruturada. As funções se tornaram métodos, nos

quais fica encapsulada a lógica da programação, enquanto os dados se tornaram atributos do objeto.

Obviamente, a orientação de objetos não era perfeita. O reúso exercido por uma classe que ainda está

em formato fonte fica restrito a determinada linguagem. “Você não poderia ter um cliente de Smalltalk

consumindo uma classe de C++ ou derivando dela” (LÖWY, 2007, p. 477).

Page 3: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

3

De acordo com Löwy (2007), a herança não é a melhor solução para o reúso, e em alguns casos

provê mais problemas do que soluções. O desenvolvedor tem que estar familiarizado com a classe base da

derivação, e isso produz uma dependência vertical devido à hierarquia de classe.

Outro problema ocorria quando os objetos eram distribuídos entre processos ou computadores. Por

exemplo, não era possível utilizar C++ comum para a invocação. A solução era criar processos host e utilizar

uma tecnologia alternativa para chamadas remotas, como soquetes TCP (Transmission Control Protocol)

para fazer chamadas a distância. Essas chamadas eram muito diferentes das chamadas originais da

linguagem, consequentemente, não era possível beneficiar-se delas.

Figura 1 – Linguagem estruturada e orientada a objetos (SANTOS)

1.

2.1.3 Orientação a componente

E mais uma vez a necessidade de evolução era iminente, exigindo melhor interoperabilidade entre

sistemas. Em 1994, após um longo período de utilização das bibliotecas estáticas (.lib) e dinâmicas (.dll), foi

criada, pela Microsoft, a tecnologia COM. “A orientação a componente permite interoperação e intercâmbio

de componentes binários” (LÖWY, 2007, p. 477).

Apesar de ser uma tecnologia inovadora, o COM não foi muito bem-sucedido, pois a maioria dos

desenvolvedores tinha problemas graves com sua implementação. “Ela era feia sem necessidade, porque era

construída sobre um sistema operacional que não sabia de sua existência, e as linguagens usadas para

escrever componentes COM eram orientadas a objeto, mas não a componentes” (LÖWY, 2007, p. 478).

2.1.4 Orientação a serviços

Com este breve histórico de engenharia de software, é possível notar um padrão: novas tecnologias e

métodos de desenvolvimento sempre incorporam os benefícios das antecessoras e aprimoram vários outros

quesitos não abordados antes. Com outras palavras, dependência é ruim, mas é necessária. “Um aplicativo

absolutamente independente é inútil porque não adiciona nenhum valor” (LÖWY, 2007, p. 479).

Ciente das dificuldades das tecnologias antecessoras, a orientação a serviço surgiu como uma

alternativa para os problemas encontrados na orientação a objeto e na orientação a componente. A ideia

principal da orientação a serviço é a de que os desenvolvedores devem se preocupar com as regras de

negócio e deixar que os quesitos segurança, escalabilidade e interoperabilidade, a linguagem faça por si.

Toda a sequência de comunicação entre serviço e cliente é feita através de mensagens padronizadas. O

serviço, por sua vez, envia um metadado também padronizado, que descreve o que o serviço pode fazer e

como os clientes devem invocar as operações.

1 Figura obtida no site www.webfinal.com.br.

Page 4: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

4

2.2 O que são Serviços Web?

A criação, a popularização e a evolução da internet trouxeram muita facilidade e comodidade aos

usuários. No entanto, à medida que a rede foi crescendo, novas necessidades foram surgindo, como, por

exemplo, a necessidade de integração dos sistemas computacionais de uma empresa. Esses sistemas

implementam os processos de negócio e a troca de informações com fornecedores, clientes e sócios. O

objetivo é sobreviver e obter sucesso no atual contexto da economia de mercado, que tem exigido que os

serviços sejam disponibilizados via web.

Foi neste contexto que surgiu a tecnologia de serviços web, a qual visa à integração de sistemas

computacionais e de serviços, de forma que esta integração seja independente da localização geográfica

destes sistemas e serviços, da plataforma sobre a qual os mesmos são executados, da linguagem de

programação em que foram implementados etc.

No final de 2000, ano do surgimento dos serviços web, as empresas Oracle, HP, Sun, IBM, BEA e

Microsoft (maiores fornecedoras de software para TI do mundo) anunciaram a intenção de utilizar esses

padrões em seus produtos. Desde então, esta tecnologia tem sido alvo de muitas pesquisas e investimentos a

fim de que se possa especificar e padronizar protocolos para solucionar alguns dos problemas ainda

existentes em sua arquitetura. O objetivo é ter uma infraestrutura confiável para o seu desenvolvimento e

implantação, de modo que ela seja adotada de forma mais efetiva comercialmente.

Nos últimos anos, a necessidade de conectar pessoas, informações e processos mudou a forma como

o software vem sendo desenvolvido. Sistemas bem-sucedidos de TI exigem cada vez mais interoperabilidade

entre plataformas e serviços flexíveis que possam evoluir facilmente com o tempo. Isso tem levado ao

domínio de XML (Extensible Markup Language) como a linguagem universal para representar e transmitir

dados estruturados que sejam independentes de linguagem de programação, plataforma de software e

hardware.

Criado sob a ampla aceitação de XML, os serviços da web são aplicativos que usam transportes,

codificações e protocolos-padrão para troca de informações. “Um serviço web é um sistema de software

projetado para suportar interação máquina-máquina interoperáveis sobre uma rede” (BOOTH et al., 2004).

Com amplo suporte entre fornecedores e empresas, os serviços da web permitem que sistemas de

computação em qualquer plataforma se comuniquem pelas intranets e extranets da empresa, e na internet,

com suporte para segurança de ponta a ponta, serviços de mensagens confiáveis, transações distribuídas e

muito mais.

Utilizando serviços web, pode-se trocar dados com acoplamento fraco na forma de mensagens XML

entre sistemas heterogêneos. O acesso remoto a dados e a lógica da aplicação são conceitos antigos, mas

atuando com baixo acoplamento tonaram-se inovadores. Tentativas anteriores – como o modelo de objetos

componentes distribuídos (DCOM - Distributed Component Object Model), Internet Inter-ORB Protocol

(IIOP) e Java Remote Method Invocation (RMI) – requeriam forte integração entre o cliente e o servidor. Ao

invés de usar o contrato baseado em XML, que é essencial para serviços da web, eles usavam os formatos de

dados binários, específicos do sistema operacional e de sua implementação.

Enquanto DCOM, IIOP e Java / RMI exigem uma tecnologia de determinado componente ou

convenção no chamado de objetos, os serviços da web não. A única suposição feita entre o cliente e o

servidor é que os destinatários vão entender as mensagens que recebem. Em outras palavras, o cliente e o

servidor concordam com um contrato, neste caso, um contrato que é definido usando WSDL e XSL Schema

Definition (XSD). Em seguida, o cliente e o servidor comunicam-se por mensagens, confirmando que

honraram o contrato através de um transporte especifico, como o Hypertext Transfer Protocol (HTTP).

Como resultado, temos programas escritos em qualquer linguagem e sendo executados em qualquer sistema

operacional – usando qualquer modelo componente – e podendo utilizar o serviço web. Além disso, a

flexibilidade de um formato de texto como XML permitirá a evolução da troca de mensagens de maneira

fracamente acoplada. Esse fraco acoplamento é obrigatório em ambientes em que não seja possível a

atualização simultânea de todas as partes na troca de mensagens.

Os serviços da web baseiam-se em um conjunto central de padrões que descrevem a sintaxe e a

semântica da comunicação por software: o XML fornece a sintaxe comum para a representação de dados; o

protocolo Simple Object Access Protocol (SOAP) fornece a semântica para a troca de dados; o Web Services

Description Language (WSDL) fornece um mecanismo para descrever as capacidades de um serviço da web.

Page 5: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

5

Especificações adicionais, conhecidas de modo geral como arquitetura WS-*, definem a funcionalidade de

detecção, os sistemas de eventos, os anexos, a segurança, os serviços de mensagens confiáveis, as transações

e o gerenciamento dos serviços da web.

Estas características dos serviços web se devem, em grande parte, ao fato de basearem-se em normas

padrões, dentre as quais se destacam: XML, SOAP, WSDL e UDDI (Universal Description, Discovery and

Integration). O acesso a um serviço web é semelhante a qualquer requisição feita através de uma URL

(Uniform Resource Locator). A diferença está no conteúdo do que é enviado na requisição do cliente para o

servidor. Os clientes enviam um documento XML, formatado de maneira especial, de acordo com as regras

da especificação SOAP (CERAMI, 2002).

2.3 ASP.NET Web Services

Dentre várias definições para Web Services encontradas, uma delas é; o Web Service é a lógica da

aplicação disponível para outros programas, através de protocolos padrões da web e independente de

qualquer plataforma. Sobre a lógica da aplicação, pode-se afirmar que o Web Service expõe alguma lógica ou

código da aplicação, que podem ser cálculos ou operações ao banco de dados, por exemplo. Levando em

conta que a maioria dos sites, hoje, são acessados via navegador, logo Web Services serão acessados por

programas. Todo o conceito de Web Service é baseado em protocolos padrões da Web, como HTTP, XML,

SOAP, WSDL e UDDI, que serão mostrados em detalhes, mais adiante, neste artigo. Um Web Service pode

ser implementado por qualquer plataforma. Os padrões citados anteriormente não são proprietários, e são

suportados pela maioria dos fabricantes e desenvolvedores de plataformas (BASIURA, 2001).

Segundo Josuttis (2007), existem cinco padrões fundamentais para Web Services. Dois deles são

padrões gerais que já existiam e foram usados no desenvolvimento dos Web Services:

XML é usado para descrever modelos, formatos e tipos de dados, ou seja, é a linguagem sobre a

qual são construídas todas as linguagens de Web Services.

HTTP é o protocolo que irá transportar as mensagens geradas pelos Web Services.

Os outros três padrões fundamentais são específicos para Web Services:

WSDL é usado para definir interfaces de serviço. Ele irá descrever dois diferentes aspectos de um

serviço: sua assinatura (nome e parâmetros) e detalhes de protocolo e localização. Este padrão

descreve exatamente o que o Web Service faz e como invocá-lo.

SOAP é o padrão que define o protocolo do Web Service. Enquanto HTTP é o protocolo usado

pela internet, SOAP é o formato específico para a troca de dados via Web Service.

UDDI é o padrão para gerenciamento do Web Service, ou seja, registra e encontra serviços.

2.3.1 WSDL

O WSDL descreve o serviço na forma bottomup (de baixo para cima). Inicia com os tipos usados e

termina com a localização (ou endereço) do serviço. Com isso, são formadas três camadas.

A primeira camada descreve a interface do serviço. Esta interface pode consistir em uma ou mais

operações com entrada ou saída de parâmetros que usam tipos específicos na primeira sessão do arquivo

WSDL. Existem algumas diferenças entre a versão WSDL 1.1 e a 2.0, mas não é o objetivo abordar com

detalhes cada diferença, e sim mostrar a evolução do protocolo. No WSDL 1.1, os parâmetros dos serviços

são definidos nas sessões “<message>”, enquanto na versão WSDL 2.0 são definidos como qualquer outro

tipo na seção “<types>” (JOSUTTIS, 2007).

A segunda camada define o binding (ligação) do Web Service. Isto é, o protocolo e formato para o

qual as operações do Web Service são fornecidas. A terceira camada define a localização física (endereço,

URL) onde o Web Service está disponível. A figura 2 mostra as duas estruturas de WSDL 1.1 e WSDL 1.2.

Page 6: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

6

Figura 2 – Estrutura do WSDL 1.1 e WSDL 2.0.

2.3.2 SOAP

As mensagens SOAP contêm um formato XML e o elemento root chamado “<Envelope>”. Ele pode

conter um opcional “<Header>” e um elemento obrigatório “<Body>”. O elemento Body (corpo) contém o

payload (carga útil), que pode ser uma requisição, uma resposta ou dados de falha. O elemento Header

(cabeçalho) pode conter informações adicionais para ajudar a lidar com a infraestrutura de mensagens (como,

por exemplo, dicas de roteamento e dicas de segurança) (JOSUTTIS, 2007).

Abaixo é exemplificada uma requisição SOAP.

Figura 3 – Exemplo de requisição SOAP.

A mensagem de resposta a esta requisição deve conter o formato mostrado na Figura 4.

Figura 4 – Exemplo de resposta a requisição SOAP.

2.3.3 UDDI

Inicialmente, a UDDI era um termo mais amplo, “Universal Description, Discovery and Integration

Business Registry” (resumindo, UDDI Business Registry ou ainda mais curto UBR). A ideia original era

Page 7: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

7

introduzir as três funções de um mercado de trabalho: fornecedores que oferecem serviços, consumidores

que precisam de serviços e corretores que agrupam esses serviços para publicá-los (JOSUTTIS, 2007).

Figura 5 – UDDI - Fornecedores, consumidores e corretores.

2.4 O que é o WCF?

Segundo Löwy (2010), o Windows Communication Foundation é um kit de desenvolvimento de

software (SDK) para desenvolvimento e distribuição no Windows. O WCF fornece um ambiente de execução

dinâmico para seus serviços, isto é, efetua a compilação e interpreta os códigos dos aplicativos. Embora seja

possível o desenvolvimento de serviços sem o WCF, na prática, esse desenvolvimento fica

significativamente mais fácil com ele.

Esta ferramenta, além de facilitar o desenvolvimento, traz vários benefícios, como mais segurança

nos códigos, devido à estrutura bem formada, aos padrões de mercado empregados, aos gerenciamentos de

estados, às métricas de desempenho e à fácil implementação.

De fato, o WCF foi construído com os aspectos de SOA (Service Oriented Architecture) em mente.

Cambiucci (2008) cita alguns.

O design e a implementação de serviços são naturalmente desacoplados da lógica de negócios da

aplicação. Essa característica é que permite a migração das aplicações atuais para um modelo de

serviços.

Serviços expõem funcionalidades para clientes remotos através de contratos explícitos de serviços

e de dados.

Serviços são executados de forma autônoma, não havendo impacto entre eles quando ocorre uma

falha. Ou seja, o isolamento é uma condição obrigatória entre serviços, assim como as fronteiras

de segurança.

Serviços podem ser distribuídos através de diferentes protocolos, o que atende a uma série de

cenários presentes no ambiente corporativo. A interoperabilidade é uma exigência.

Serviços são agnósticos ao transporte, ou seja, podem ser expostos diretamente na web, via

intranet, ou usado como um backend em ambientes corporativos.

Resumindo, serviços são orientados a mensagens, possuem contratos de serviços e de dados, são

multiprotocolos e multihosts, com aspectos de segurança, isolamento, políticas, monitoração,

comportamentos etc. Todos esses aspectos são atendidos pelo modelo de programação do WCF.

Ainda, através do ABC do WCF (onde Endpoint = Address + Binding + Contract) é possível uma

grande flexibilidade na implantação e configuração de serviços em diversos ambientes de TI.

Desde a versão 1.0 do .NET Framework é possível implementar serviços web como os encontrados

no mercado, com a diferença de que o desenvolvedor pode utilizar os recursos nativos do framework em sua

construção. Entre estes recursos estão: autenticação, cache e gerenciamento de estado.

A partir do .NET Framework 3.0, a Microsoft unificou as várias tecnologias de programação para

Page 8: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

8

sistemas distribuídos em um único modelo, visando a arquitetura orientada a serviços (SOA). Uma das

principais características desta nova API (Application Programming Interface) é o fato do WCF ser

totalmente desacoplado das regras de negócio que serão expostas pelo serviço. A tecnologia WCF tem

muitas funcionalidades, que visam performance, segurança, disponibilidade, transações, sincronizações e

tratamento de erros (LÖWY, 2007).

2.5 Arquitetura orientada a serviços

Uma arquitetura orientada a serviços (SOA) é baseada em quatro abstrações principais: um frontend

de aplicação, um serviço, um repositório de serviços e um barramento de serviços.

O W3C conceitua SOA como um conjunto de componentes que podem ser invocados e ter suas

descrições de interface publicadas e descobertas. “As tecnologias RMI, DCOM, CORBA e DCE são

exemplos de sistemas SOA” (HAAS, BROWN, 2004).

O frontend da aplicação é desacoplado dos serviços. Cada serviço tem um “contrato”, que define o

que será feito e apresenta uma ou mais interfaces para implementar esse contrato.

O repositório de serviços fornece um lar para os serviços, e o barramento de serviços fornece um

mecanismo de padrão industrial para a conexão e interação com os serviços.

Os arquitetos das empresas veem a SOA como um meio de ajudar os negócios a responder mais

rapidamente e com melhor relação custo-benefício às condições do mercado, que estão em constate

mudança.

Durante o evento SOA & Business Processes Conference 2007, realizado em Redmond, EUA, a

Microsoft apresentou para o mercado uma arquitetura de referência para projetos de SOA, como uma

proposta para a organização de camadas e serviços, conforme é visto na figura 8.

Figura 6 - Arquitetura de Referência SOA proposta pela Microsoft.

Cambiucci (2009) descreve as principais camadas da arquitetura de referência SOA.

Primeiro, percebe-se uma camada de aplicações compostas, que é destinada às interfaces de

composição de serviços da solução. Aqui, as interfaces e aplicações combinam serviços e

chamadas de processos da infraestrutura.

Logo abaixo, temos a camada de composição de negócios ou processos, onde orquestrações e

workflows podem consumir serviços ou tratar regras de negócio, de acordo com as necessidades

da solução.

Na sequência, aparece a camada de serviços atômicos ou de composição, que implementam as

interfaces de serviços propriamente ditas. Baterias de Web Services ou serviços hospedados em

servidores IIS (Internet Information Services) são exemplos para essa camada.

Apoiando os serviços acima, encontramos os componentes de serviços, que podem ser

componentes legados, exportando funcionalidades existentes de nossa infraestrutura.

Page 9: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

9

Por último, a camada de integração ou legado (LoB - Line of Business Application), em que se

encontram sistemas nativos, bancos de dados e soluções que podem ser exportadas, para outras

áreas da empresa, por exemplo.

Atendendo a todas as camadas, encontramos as bibliotecas comuns, necessárias para a

manutenção, administração e operação da solução. Assim, vemos as camadas verticais do

desenho, que implementam monitoração, autorização, segurança, controle de acesso, auditoria

etc. São bibliotecas básicas, construídas ao longo do projeto ou fornecidas por alguma ferramenta

de operação de serviços. Em muitos casos, barramentos de serviços oferecem essas

funcionalidades de forma nativa, economizando algum tempo de desenvolvimento para o projeto.

Um fator de sucesso em muitos projetos de SOA tem sido a adoção de uma arquitetura de referência,

que posiciona corretamente as camadas e componentes da solução. Em muitos casos, essa estruturação

garante o respeito de interfaces de forma padronizada, assim como a coesão e responsabilidades previstas

para cada camada, fornecendo o mínimo de organização e facilidade de manutenção futura.

2.6 Justificativa

Como visto nos itens acima, existe formas diferentes de obter resultados que resulta em uma

aplicação SOA. Sendo o conceito de Web Services mais antigo, muitas aplicações já foram construídas neste

modelo. Este artigo irá abordar vantagens e auxiliará em uma possível migração de Web Services para WCF,

objetivando entender desde a sua estrutura de projeto até detalhes relacionados à sua execução. Cada uma

das seções a seguir irá analisar e discutir essas mudanças, mostrando também alguns detalhes importantes

que poderão apresentar um comportamento “estranho” durante a execução, caso não sejam identificados a

tempo.

3 METODOLOGIA

Com base nestas diferenças entre WCF e ASP.NET Web Services (ASMX), uma comparação de

desempenho entre estes serviços é vital para a análise de custo-benefício em sua implementação. Isto ajudará

muito em uma migração ou aquisição de investimentos para começar a utilizar tais tecnologias. Mas não

apenas a performance foi comparada neste artigo. Foram realizados testes, abordando as principais

características de cada tecnologia, como segurança, aplicabilidade, reúso e expansibilidade.

Foi criado um ambiente de testes em que foram executados testes pontuais, analisando desempenho,

segurança, escalabilidade e aplicabilidade. Além disso, foi realizada a análise de migração em um ambiente

de produção que anteriormente utilizava ASP.NET Web Services e passou a utilizar o WCF. Foram

reestruturadas as camadas da arquitetura com base em SOA.

Neste ambiente foram apresentadas três aplicações de uma empresa de venda de computadores.

Essas aplicações são: sistema de vendas, sistema de suporte e sistema financeiro. Inicialmente, o problema

de comunicação entre esses sistemas era resolvido através do uso de ASP.NET Web Services e troca de

arquivos.

Foi desenvolvida uma camada para comunicação entre estas aplicações, utilizando o WCF e, assim,

efetuados os testes nas duas formas de solução.

O objetivo é mostrar todos os benefícios e detalhes de uma solução robusta e evolutiva, aplicando o

WCF em um ambiente real de produção.

3.1 Ambiente

Em todos os testes foi utilizado o mesmo ambiente. Um servidor com processador Intel® Xeon®

X5680 (12M Cache, 3.33 GHz, 6.4), 12 GB de memória RAM, placa de rede 1 Gbps e o sistema operacional

Windows Server 2008 R2. Os clientes serão quatro computadores com processadores Core 2 Duo 3.0 GHz,

2GB de memória RAM e placa de rede de 1 Gbps. A infraestrutura é detalhada na Figura 7. O servidor web

responsável pela exposição dos serviços será o IIS 7.0.

Page 10: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

10

Servidor

Switch

1GB Ethernet

Cliente 1 Cliente 2 Cliente 3 Cliente 4

Figura 7 – Infraestrutura para realização dos testes.

3.2 Performance de operações

Inicialmente, foram desenvolvidas duas soluções em cada uma das tecnologias, WCF e ASP.NET

Web Services. Estas soluções não terão nenhuma boa prática inclusa, apenas os requisitos mínimos para que

se possa efetuar uma transação com sucesso.

Cada uma das aplicações será formada por um processo de requisição e resposta, padrão das duas

tecnologias. A requisição enviará um número inteiro e terá como resposta uma coleção de objetos criados no

servidor. Esta coleção de objetos será padrão nas duas aplicações e pode ser conferida na Figura 8.

Ordem[] GetOrdens(int NumOrderns);

{

Ordem[] ordens = new Ordem[numOrdens];

for (int i = 0; i < numOrdens; i++)

{

Ordem ordem = new Ordem();

OrdemLinha[] linhas = new OrdemLine[2];

linhas[0] = new OrdemLine();

linhas[0].ItemID = 1;

linhas[0].Quantidade = 10;

linhas[1] = new OrdemLine();

linhas[1].ItemID = 2;

linhas[1].Quantitidade = 5;

ordem.ordemItens = lines;

ordem.ClienteID = 100;

ordem.Endereco1 = "012345678901234567890123456789";

ordem.Endereco2 = "012345678901234567890123456789";

ordem.Cidade = "0123456789";

ordem.Estado = "0123456789012345";

ordem.Cep = "12345-1234";

ordem.Pais = "United States";

ordem.TipoEnvio = "Courier";

ordem.CartaoCreditoTipo = "XYZ";

ordem.NumeroCartao = "0123456789012345";

ordem.ValidadeCartao = DateTime.UtcNow;

ordem.NomeCartao = "01234567890123456789";

ordens[i] = ordem;

}

return ordens;

}

Figura 8 – Código que irá criar processamento no serviço.

Com este cenário foi possível simular um ambiente de produção e realizar a contagem de transações

que cada uma das aplicações pode oferecer por segundo. Nos testes executados, tanto no ASP.NET Web

Services quanto no WCF, o servidor trabalhou com o processamento próximo a 100% de utilização.

Este teste mostrou o poder de desempenho do WCF e do APS.NET Web Services. Contudo, uma

Page 11: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

11

aplicação SOA requer análises em diversas variáveis, e isso será abordado nas próximas subseções.

3.3 Segurança

Foi desenvolvido um estudo sobre segurança em que foram abordados quesitos básicos do ASP.NET

Web Services e do WCF. Apesar de as duas formas poderem utilizar o protocolo HTTPS (Hypertext Transfer

Protocol Secure), o WCF consegue ter mais recursos de segurança nativamente e, quando é desenvolvida

uma aplicação SOA, é fundamental que este quesito seja relacionado.

As principais funcionalidades fornecidas pelo WCF para o gerenciamento de autenticação e

autorização de serviços, abordando as vantagens e desvantagens de cada modo, serão explanadas na

validação de segurança.

O ASP.NET Web Services provê a segurança apenas no nível do IIS, e o WCF já consegue embutir

várias funcionalidades em seu código, visto que não é necessariamente publicado pelo IIS.

O resultado esperado é um detalhamento dos quesitos de segurança de cada uma das tecnologias,

tendo um pouco mais de segurança os serviços em WCF. E será validado na implementação da solução,

acionando os principais requisitos de segurança.

O ASMX pode confiar somente na segurança baseada no transporte, ou seja, ele somente será seguro

se o serviço for exposto através de HTTPS. Só se pode abrir mão do HTTPS se for utilizada a segurança

baseada na mensagem, que está disponível no ASMX, através do Web Services Enhancements (WSE).

Muitas vezes se utiliza um “SoapHeader” com usuário e senha. Isso somente terá alguma segurança se

utilizar HTTPS ou segurança em nível de mensagem. Do contrário, qualquer um que intercepte a requisição,

conseguirá extrair o conteúdo da mensagem e seus respectivos headers.

Como já era de se esperar, o WCF fornece ambos os níveis de segurança nativamente. São

configurações que se realizam (de forma imperativa ou declarativa), e que o serviço utilizará para efetuar a

autenticação e a autorização do cliente. Uma das grandes dificuldades encontradas ao utilizar-se o WCF é

que, mesmo se ele for configurado para autenticar o cliente, será necessário utilizar um certificado para

garantir a segurança.

3.4 Representação dos dados

Foi feita uma análise das diferenças na representação de dados entre ASP.NET Web Services e

WCF. Neste item será abordada a maneira como é padronizado o código.

A análise detalhou algumas diferenças nas classes utilizadas por cada uma das tecnologias,

identificando assim suas vantagens e desvantagens.

3.5 Camada de serviços

Neste ambiente de aplicações utilizando a comunicação através de alguns ASP.NET Web Services e

arquivos de importação, muito tempo e confiabilidade se perdem. Até mesmo o desenvolvimento de novas

aplicações fica comprometido nesta estrutura.

Foi criada uma camada de serviços WCF para esta organização de vendas de computadores,

inicialmente para ligar apenas os três sistemas informados, vendas, suporte e financeiro.

A camada de serviços é completamente independente das aplicações, e adequações foram feitas nas

antigas aplicações para que as trocas de informações sejam suportadas.

3.5.1 Reuso

Foi realizada uma análise na estrutura do código, visando o reúso: quanto é possível reutilizar os

Web Services desenvolvidos em ASP.NET e quanto é possível reusar os serviços WCF. Esta análise exige

um pouco mais de cuidado devido ao tempo necessário para confirmações.

3.5.2 Migração

Com o desenvolvimento desta nova plataforma, analisamos quesitos importantes, como tempo de

desenvolvimento, dificuldade da estrutura e compatibilidade. O objetivo é determinar a ocasião mais propícia

para realizar uma migração de plataforma ou quando será necessário desenvolver novamente toda a estrutura

de comunicação.

Page 12: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

12

4 VALIDAÇÃO

Os resultados obtidos com este trabalho serão abordados nas subseções a seguir.

4.1 Desempenho

Com os testes de desempenho, foi identificada uma melhora de 12%, 13% e 52% para requisições de

1, 10 e 100 objetos respectivamente.

Nesta seção, a comparação feita tem o objetivo de mensurar o desempenho dos serviços e nenhuma

segurança foi utilizada. O WCF binding utilizado foi o “BasicHttpBinding”. Esta ligação padrão utiliza

HTTP como protocolo de transporte.

A hospedagem dos serviços foi feita no IIS 7.0, deixando exposto apenas um serviço. O binding

utilizado foi o “BasicHttpBinding”, para o WCF Service e o protocolo HTTP para o ASP.NET Web Service.

A figura abaixo ilustra as camadas de um serviço que utiliza este protocolo.

Figura 9 – Camadas utilizando o BasicHttpBinding.

Todos os testes executados empregaram a mesma configuração de hardware apresentada na sessão

3.1. O número de processos-cliente usados no sistema cliente foi suficiente para assegurar que o processador

do servidor fosse completamente saturado, ou seja, próximo a 100% de utilização. Os dados coletados e aqui

apresentados refletem uma média de várias execuções convergentes, e todos os cuidados foram tomados para

garantir sua sustentabilidade.

Para criar uma quantidade significativa de requisições aos serviços, foi utilizada a ferramenta

WCFStorm (www.wcfstorm.com).

Page 13: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

13

Figura 10 – WCFStorm.

Também foi aplicado um projeto open source para executar estes testes de carga. O projeto utilizado

foi o WCF Load Test (http://wcfloadtest.codeplex.com/), Foram levados em consideração os resultados das

duas ferramentas.

Testes unitários e, posteriormente, testes de carga foram criados para verificar a capacidade de

resposta de cada uma das tecnologias. Os testes unitários realizam uma chamada simples ao serviço, que

retornou uma coleção de objetos. Nos testes de carga foi criado um cenário onde foi simulado o aumento

crescente de usuários até 200, aumentado 10 usuários a cada 10 segundos.

4.1.1 Throughput

Nas comparações de taxa de transferência, quanto maior o valor alcançado, melhor será o resultado.

Também será demostrado os resultados de tempo de resposta, neste caso, quanto menor o valor, mais rápido

o serviço responde as chamadas. Foram utilizados gráficos de barras para exemplificar os resultados.

Como é mostrado na figura 11, o WCF melhorou o desempenho sobre ASMX. No gráfico, três

diferentes assinaturas foram utilizadas. Em cada caso, um inteiro é passado do cliente para o servidor, e uma

coleção de objetos (1,10 ou 100) é retornado para o cliente. O WCF supera em 12%, 13% e 52% para 1, 10

ou 100 objetos em uma mensagem, respectivamente.

Figura 11 – Gráfico de throughput.

0

50

100

150

200

250

300

Mensagem com 1 obj Mensagem com 10 obj Mensagem com 100 obj

Op

era

çõe

s p

or

segu

nd

o

Throughput

WCF

ASMX

Page 14: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

14

4.1.2 Tempo de resposta

Cada operação leva um determinado tempo para obter o retorno. Como visto na figura 12, o WCF

consegue responder a mais transações por segundo, consequentemente, sua taxa de tempo de resposta é mais

rápida também.

É possível verificar o tempo de resposta no gráfico abaixo.

Figura 12 – Gráfico de tempo de resposta.

Desta maneira, o WCF mostra larga vantagem no tempo de resposta de seus serviços expostos. Com

estas duas vantagens extremamente importantes comprovadas nos testes, a comunicação através do WCF é

uma forma segura, eficaz e rápida para transmitir os dados entre aplicações e clientes.

4.1.3 Memória

Foi analisada a memória do servidor no momento dos testes de carga. Notou-se que a utilização de

memória é mais elevada com o WCF. Isso se deve ao nível de complexidade das informações por ele

processadas.

A ferramenta utilizada para mensurar este recurso foi o “Perfmon.exe” nativo no Windows

Server 2008 R2.

Tabela 1 – Utilização de memória em %.

WCF ASMX Teste 1 58 55 Teste 2 58 55 Teste 3 60 57

Verifica-se que, com aplicações WCF, a memória do servidor deve ser mais elevada para suportar

melhor a tecnologia.

4.2 Camada de serviços

O problema de comunicação entre aplicações consome boa parte no tempo de desenvolvimento de

uma solução. Foi analisado um projeto em produção no qual aplicações comunicavam-se entre si através de

Web Services e de exportação e importação de arquivos.

A figura abaixo mostra como estava o ambiente originalmente.

0.00000

0.00500

0.01000

0.01500

0.02000

0.02500

Mensagem com 1 obj Mensagem com 10 obj Mensagem com 100 obj

Segu

nd

os

Tempo de resposta

WCF

ASMX

Page 15: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

15

Figura 13 – Camada de serviços

Foi implementada uma camada de serviços, interligando as aplicações envolvidas, proporcionando

desta maneira uma forma centralizada de comunicação.

Figura 14 – Camada de serviços

Assim, obteve-se uma padronização na comunicação entre as aplicações, provendo melhor controle e

facilidade para o desenvolvimento, testes e correções, entre outros. O ganho de desempenho é notório, mas

difícil de comparar, visto que nem todas as comunicações feitas anteriormente ocorriam através de serviços

web e sim por transferência de arquivos ou até mesmo de forma manual.

Todas as vantagens explicadas na seção anterior ficaram visíveis nesta implementação, mas não foi

possível efetuar testes exatamente iguais, pois a lógica do sistema também mudou.

4.2.1 Reúso

O reúso é um item difícil de mensurar, devido ao tempo que se leva para comprovar sua eficácia.

Pelo fato do WCF prover uma interface com o contrato de seus serviços, os serviços ficam mais simples de

interpretar, modificar e reutilizar.

4.3 Migração

Os ASP.NET Web Services já existem há algum tempo e há muitas aplicações que ainda o utilizam.

Esta seção ajudará a entender melhor as diferenças entre ASMX e o WCF, desde a sua estrutura de projeto

até detalhes relacionados a sua execução.

4.3.1 Contratos

O ASMX irá se basear nos métodos decorados com o atributo “WebMethodAttribute” para gerar o

Page 16: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

16

documento WSDL. Para controlar a visibilidade dos métodos, é necessário adicionar ou remover este

atributo. Qualquer tipo complexo referenciado nos métodos será automaticamente inserido na descrição do

serviço sem nenhuma configuração extra.

Já o WCF trabalha de forma bem diferente. Ele utiliza interfaces para determinar os contratos que o

serviço apresenta. Essas interfaces são aquelas tradicionais, já utilizadas no dia a dia, mas decorada com um

atributo chamado “ServiceContractAttribute”. Os métodos são descritos dentro das interfaces e expostos

através do atributo “OperationContractAttribute”.

4.3.2 Serialização e Desserialização

A serialização e a desserialização estão condicionadas ao serializador que cada tecnologia utiliza. O

ASMX utiliza o “XmlSerializer” para transformar os objetos em XML e vice-versa. O “XmlSerializer”

serializa todos os membros públicos (propriedades e campos), sem a necessidade de definir qualquer

atributo. É possível controlar a forma como essa serialização será realizada utilizando vários atributos que

existem neste mesmo namespace.

O WCF, por outro lado, utiliza o serializador “DataContractSerializer” por padrão. Este serializador

trabalha de forma semelhante ao “XmlSerializer”, com poucas diferenças. Entre essas diferenças está o

tratamento do atributo “SerializableAttribute”, utilizado para manter a compatibilidade com objetos .NET

Remoting. Outra diferença é a capacidade que este serializador tem de manter membros definidos como

private e protected. Este serializador ainda gera um XML mais simplificado, melhorando a

interoperabilidade entre as plataformas. Se desejar utilizar o “XmlSerializer”, basta adicionar ao contrato o

atributo “XmlSerializerFormatAttribute”.

4.3.3 Protocolo e hospedagem

O ASMX só pode ser hospedado no IIS, utilizando o protocolo HTTP/HTTPS. O WCF tem uma

arquitetura mais flexível e independente do protocolo, ou seja, ele pode ser executado em HTTP, HTTPS,

TCP, MSMQ etc.

O WCF também pode utilizar o IIS como host. Mas, além dele, é possível fazer uso de outras

aplicações para expor um serviço, como um Windows Service, ou ainda, uma simples aplicação

Windows/Console.

4.3.4 Implantação

Assim como em qualquer aplicativo .NET, basta mover os serviços para o IIS remoto e tudo já

funciona. É necessário certificar-se de que tenha a mesma versão do .NET Framework (isso inclui o service

pack) instalada no servidor. É importante dizer que ambas tecnologias necessitam de um diretório virtual

devidamente criado no IIS, com as permissões também configuradas.

4.3.5 Cliente

Dentro do Visual Studio .NET você tem duas opções para referenciar um serviço: “Add Web

Reference” e “Add Service Reference”. A primeira opção é utilizada para referenciar um serviço ASMX. A

segunda é utilizada para referenciar um serviço WCF. Ao serem acionadas, essa opções criarão

automaticamente o proxy, utilizando a API da tecnologia correspondente.

4.4 Segurança

A segurança entre ASP.NET Web Services e WCF é fundamental em um ambiente orientado a

serviços. Nesta sessão, são apresentadas duas soluções, ambas abordando as funcionalidades de cada uma

das tecnologias.

Por ser uma tecnologia recente, o WCF provê nativamente muitos recursos para trazer segurança a

um serviço.

4.4.1 ASP.NET Web Service

Web services criados com o ASP.NET podem dispor de segurança de autenticação e autorização

oferecida por esta estrutura ou customizada. O ASP.NET opera em conjunto com o IIS para prover várias

opções de autenticação e autorização. Também é possível criar opções de autenticação com o uso de SOAP

Headers. Para isso, é necessário que o serviço tenha uma classe responsável pela verificação das credenciais.

Page 17: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

17

A figura 15 apresenta um exemplo de utilização do SOAP Header com a instância “Authentication”. Esta

classe irá coletar os dados para autenticação.

Figura 15 – Exemplo SOAP Header.

O atributo “Authentication” é uma instância da classe “AuthHeader”, responsável por armazenar e

decripitar os dados de autenticação, pois serão enviados criptografados por questões de segurança no

transporte.

Figura 16 – Classe “AuthHeader” derivando a classe “SoapHeader”.

O cliente irá enviar as credenciais criptografadas e invocar o serviço web. Veja a codificação.

Figura 17 – Cliente fazendo chamada ao serviço web.

O serviço irá decripitar os dados de autenticação e verificar se o usuário possui direitos de acesso. O

código abaixo mostra esta sequência.

Figura 18 – Serviços verificando credenciais e atendendo ao cliente.

4.4.2 WCF

Apesar de serviços WCF não fugirem muito do padrão de segurança de aplicações convencionais, há

algumas exceções, e uma delas é a forma de segurança que será aplicada à mensagem. Essa forma de

segurança influencia na forma que a autenticação será realizada e como a mensagem será protegida durante a

viagem. É importante dizer que – se a transferência da mensagem entre o cliente e o serviço, ou entre o

Page 18: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

18

serviço e o cliente não fosse protegida – a autenticação e a autorização estariam completamente vulneráveis,

permitindo vários tipos de ataque.

Assim como outras configurações, a segurança também é uma característica do binding, podendo

efetuar a configuração de forma declarativa ou imperativa. O WCF fornece cinco formas diferentes para

tornar segura a transferência da mensagem. Cada uma dessas formas tem suas particularidades e influenciam

em como a mensagem será protegida e em como a autenticação será realizada. Abaixo são detalhadas essas

formas de segurança.

None – Como o próprio nome indica, nenhuma espécie de segurança é fornecida e toda a

mensagem será trafegada sem criptografia.

Transport – Esta opção informa ao WCF que o transporte (TCP, IPC, MSMQ ou HTTPS)

garantirá a segurança da mensagem, criptografando toda a comunicação. Além disso, fornece

integridade, privacidade e autenticação mútua. Um dos pontos negativos deste modo é que a

segurança só será garantida se for ponto a ponto. Ou seja, se houver intermediários entre o cliente

e o serviço, não há garantia de que a mensagem chegará segura até o destino final.

Message – Com esta opção, toda a mensagem será criptografada, garantindo a autenticação e a

proteção da mensagem (confidencialidade e integridade). Ao contrário da segurança baseada no

transporte, a segurança em nível de mensagem garante a segurança end-to-end,

independentemente do número de intermediários entre o cliente e o serviço. Isso permite,

inclusive, que o serviço seja exposto sob um protocolo não seguro, como é o caso do HTTP.

Outro grande benefício é que a segurança se baseia em padrões existentes no mercado, o que

garantirá a interoperabilidade. Já um ponto negativo desta opção é a sobrecarga, pois todas as

mensagens serão criptografadas e assinadas.

Both – Como o próprio nome diz, esta opção utiliza a segurança em nível de transporte e em nível

de mensagem, ou seja, a mensagem será protegida e, além disso, será transferida por um

transporte seguro. Apesar de maximizar a segurança, isso pode causar uma grande perda de

performance. Além disso, esse nível de segurança só é permitido em protocolos específicos, como

é o caso do MessageQueue, no qual a latência não é sentida.

TransportWithMessageCredential – Esta opção é uma mistura das duas anteriores. Ou seja, a

autenticação do cliente será fornecida em nível de mensagem, enquanto a proteção da mensagem

(confidencialidade e integridade) e a autenticação do serviço serão fornecidas pela segurança do

transporte.

TransportCredentialOnly – Apenas a autenticação mútua é fornecida em nível de transporte, não

havendo a proteção da mensagem. Esta opção somente está disponível para o ligação

“basicHttpBinding”.

5 CONCLUSÃO

Com este estudo, foram identificadas as principais vantagens do WCF e os benefícios alcançados

com sua utilização. Ganhos de desempenho e escalabilidade, fundamentais para as organizações, são

possíveis com a utilização de comunicação WCF. Como o assunto é relativamente novo, a documentação

sobre tais testes ainda deixa a desejar, e este estudo poderá ser uma base de conhecimento e poderá trazer

resultados significativos para o desenvolvimento da integração de aplicações comerciais.

O WCF fornece uma grande quantidade de funcionalidades que facilmente podem ser adicionadas

em serviços. Além disso, grande parte dessas funcionalidades pode ser configurada de forma declarativa,

através de arquivos de configuração que, na maioria dos casos, trazem enorme flexibilidade.

Apesar de ser uma tecnologia com muito mais recursos, o WCF não é complicado, pelo contrário, é

bem simples. Ainda há algum receio em sua utilização, pois sistemas legados de intercomunicação de

aplicações são extremamente caros e vitais nas empresas. Não é simples conseguir mudar o fluxo de dados

de uma hora para outra. Mas, as vantagens obtidas com a programação orientada a serviços trazem

benefícios (a curto e a longo prazos) aos quais arquitetos e desenvolvedores de software deveriam estar

atentos.

Conclui-se que o WCF é uma excelente evolução para os antigos ASP.NET Web Services, e que, na

medida do possível, as aplicações legadas (ASMX) deveriam ser substituídas, levando em conta o

treinamento de desenvolvedores no WCF para melhor aproveitamento. Apesar de o desenvolvimento ser

Page 19: ESTUDO COMPARATIVO SOBRE APS.NET WEB SERVICES E … · binários utilizando o COM (Component Object Model). Cada conceito, com suas vantagens e defeitos. ... Nos anos 1970, nasceram

19

feito em uma plataforma orientada a objetos, o resultado é extremamente satisfatório. Tudo indica que, em

um futuro próximo, será criada uma plataforma especifica para desenvolvimento orientado a serviços.

5.1 Trabalhos futuros

A orientação a serviços é uma forma de desenvolvimento muito rica, mas pode ser melhor em

diversos pontos. Algumas das oportunidades para novos trabalhos são:

WCF na nuvem.

Ambiente de Desenvolvimento Integrado (Integrated Development Environment – IDE) para

orientação a serviços.

AGRADECIMENTOS

Gostaria de agradecer especialmente ao professor Edemar Costa, por acompanhar e auxiliar o

desenvolvimento deste trabalho, assim como a todos os professores que fizeram parte de minha formação

acadêmica.

Um agradecimento especial a minha mãe, Alzira Ferreira Gomes, cujo apoio tornou possível a

conclusão da minha graduação nesta universidade. Muito obrigado.

REFERÊNCIAS

BASIURA, Russ et al. Professional ASP.NET Web Services. Birmingham: Ed. Wrox Press Ltd, 2001.

BOOTH, David et al. Web Services Architecture. [S. l], W3C, fev. 2004. 98f. Disponível em:

<http://www.w3.org/TR/ws-arch/>. Acesso em: 24 abr. 2011.

CAMBIUCCI, Waldemir. Cenários de implementação de serviços com WCF - Parte 1: Aspectos de

SOA. [S. l], MSDN Blogs, jun. 2008. 3f. Disponível em:

<http://blogs.msdn.com/b/wcamb/archive/2008/06/25/cen-rios-de-implementa-o-de-servi-os-com-wcf-parte-

1-aspectos-de-soa.aspx>. Acesso em: 17 abr. 2011.

CAMBIUCCI, Waldemir. Uma introdução ao Software + Serviços, SaaS e SOA. [S. l], MSDN Library,

maio 2009. 23f. Disponível em: <http://msdn.microsoft.com/pt-br/library/dd875466.aspx>. Acesso em: 17

abr. 2011.

CERAMI , Ethan. Web Services Essentials. 1 ed. Sebastopol: Ed. O’Reilly Media, Inc., 2002.

HAAS, Hugo; BROWN, Allen. W3C Working Group Note. [S. l], W3C Glossary, fevereiro 2004.

Disponível em: <http://www.w3.org/TR/ws-gloss/>. Acesso em: 17 abr. 2011.

JOSUTTIS, Nicloai. SOA in Practice. Sebastopol: Ed. O’Reilly Media, Inc., ago. 2007.

KHAN, Iqbal. Address Scalability Bottlenecks with Distributed Caching. [S. l], MSDN Magazine, jun.

2010. 12 f. Disponível em: <http://msdn.microsoft.com/pt-br/magazine/ff714590.aspx#>. Acesso em: 17 abr.

2011.

LIBERTY, Jesse; HOROVITZ, Alex. Programming .NET 3.5. Sebastopol: Ed. O’Reilly Media, Inc., jul.

2010.

LÖWY, Juval. Programando Serviços WCF. 1 ed. Sebastopol: Ed. O’Reilly Media, Inc., 2007.

LÖWY, Juval. Programming WCF Services. 3 ed. Sebastopol: Ed. O’Reilly Media, Inc., 2010.

PIGOSKI, Thomas M., Practical Software Maintenance. [S. l], John Wiley & Sons, Inc., 1996.

SANTOS, Victor. Orientação a Objeto – Parte I. [S. l], Web Final, julho 2010. Disponível em:

<http://www.webfinal.com.br/blog/2010/07/03/sexta-net-aula-5-orientacao-a-objeto-parte-i/>. Acesso em:

17 abr. 2011.

SHODJAI, Payam. Serviços da Web e a plataforma Microsoft. [S. l], MSDN, 28 ago 2006. 47 f.

Disponível em: <http://msdn.microsoft.com/pt-br/library/aa480728.aspx>. Acesso em: 17 abr. 2011.