Terça-feira, 13 de setembro de 2005 às 14h54

Web Services para iniciantes

Conheça o curso ao vivo: Redes e Protocolos TCP/IP Avançado com Laboratório

Acompanhando a evolução e padronização da internet como mais um meio de comunicação, sugiram no mercado novas ferramentas de desenvolvimento como o ASP.NET da Microsoft e novos padrões como o WebServices que vamos discutir nesse artigo. O WebServices veio preencher uma lacuna no mercado que era a necessidade de integração entre os mais diversos ambientes existentes que não se falavam entre si por falta de um "Padrão" e fortalecer o desenvolvimento distribuído de forma a trabalhar em conjunto com os novos recursos de comunicação da internet.

Os WebServices funcionam de forma semelhante a um componente que você instala na máquina local. Porém, esse componente pode ficar residente em qualquer máquina, seja ela na sua empresa, na empresa de terceiros.. e até na "China". É isso mesmo, até na "China". Então, usando a internet e o XML (Extensible Markup Language) para troca de informações, você executa um método desse componente que dispara o processamento no servidor remoto e você recebe a resposta na sua aplicação.

A principal diferença em relação aos componentes atuais é a padronização do XML para troca de informações, fazendo com que a comunicação do mesmo ultrapasse as barreiras dos Firewall impostos para segurança de nossas redes, pois a única coisa que trafega é o XML e usando a porta 80 (Padrão) em conjunto com o já conhecido HTTP e o SOAP(Sabão), que cuida do transporte dos dados.

Para troca de informação entre a aplicação e o WebServices, é necessário que essa aplicação conheça o funcionamento do mesmo. Isso é feito por meio da leitura do WSDL. Nada mais é que um documento ou "contrato" em XML que contém todas as regras do WebServices. Ainda temos mais uma sigla a falar que é o UDDI, uma espécie de páginas amarelas de WebServices, cujo objetivo é encontra facilmente os links para os componentes.

Ao contrário do que muitos pensam, o padrão WebServices não é proprietário da Microsoft. Pelo contrário, é definido por um consórcio de diversas empresa WS-I conforme Figura 1 de forma a manter a integração entre todas as plataformas que venham a utilizar esse padrão. Permitindo assim a perfeita comunicação e troca de informações. O que aconteceu é que a Microsoft acreditou desde cedo no XML e investiu muito em todos os seus produtos, principalmente na plataforma .NET, permitindo assim a fácil e rápida integração com seus produtos.


Figura 01 - WS-I - Padronizador do WebServices

No ambiente .NET os WebServices se encaixam dentro do grupo de aplicações ASP.NET conforme visto na Figura 2.


Figura 02 - WebServices Dentro do .NET Framework

O XML foi adotado por já ser um padrão da indústria e ser independente da plataforma adotada, sendo ainda controlado pelo World Wide Web Consortium (W3c). Facilmente você consegue transformar o mesmo em outro formato independente da aplicação entender o XML.

Implementando WebServices

Na plataforma .NET essa implementação é bastante simples como vou demonstrar nesse artigo e consiste de duas partes:

- Criar um WebServices (Para ser utilizado por terceiros)
- Consumir um WebServices (Desenvolvido por terceiros)

Portanto definido se você quer criar ou consumir um WebServices grande parte do trabalho de implementação já é feita automaticamente pela plataforma .NET não necessitando por parte do programador se preocupar com a troca de informação do XML e utilização do SOAP ou WSDL.

Então para criar um WebServices você pode adicionar pelo Visual Studio um arquivo do tipo *.asmx a um projeto ASP.NET ou conforme esse exemplo iniciar um novo projeto especifico para WebServices conforme Figura 3 e Figura 4.


Figura 03 - Iniciando novo projeto WebServices


Figura 4 - Solution Explorer

A primeira coisa que você vai observar é a extensão do arquivo, para WebServices o .NET utiliza o *.asmx, observe também que esse projeto não tem interface, portanto você não pode arrastar componentes para montar layout. O propósito então é criar uma classe (Componente) que seja visualizada dentro de outra aplicação. Para iniciarmos efetue dois cliques no formulário e vamos ao código conforme Figura 5. Observe que o código é igual ao de uma outra classe qualquer e realmente é igual mesmo. A única diferença é o atributo <WebMehod()>_ que você tem que colocar em cada método que você queria tornar visível pelo WebServices. A segunda coisa que você vai ter que observar é os tipos de retornos dos métodos. Para o caso de WebServices você somente pode utilizar os tipos: Array,String,Int,DataSet,Boolean...

Chamando a atenção para o tipo DataSet, que por ser baseado em XML pode ser serializado e transportado facilmente pela web. Sendo completamente recuperado do outro lado. Altere o código pelo apresentando na Listagem 01. Esse exemplo está criando dois métodos, o primeiro realiza a soma de dois números e os segundo, realiza uma consulta no banco de dados e retorna os dados.


Figura 05 - Classe padrão do Web Services

Listagem 01 - Criando métodos

Imports System.Data.SqlClient
Imports System.Web.Services

<System.Web.Services.WebService(Namespace := "http://tempuri.org/wstreinamento/Service1")> _

Public Class Service1

Inherits System.Web.Services.WebService

<WebMethod(Description:="Somar valores")> _
Public Function Somar(ByVal intValor1 As Int32, ByVal IntValor2 As Int32) As Int32
Return intValor1 + IntValor2
End Function

<WebMethod(Description:="Consulta banco de dados e retorna DataSet")> _
Function RetornaDataSet(ByVal strQuery As String) As DataSet

Dim conn As New SqlConnection
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet
"Lembre de alterar os dados de acesso ao banco de dados
conn.ConnectionString = "Data Source=localHost; User ID=sa; Password=;Initial Catalog= Northwind;"
cmd.Connection = conn
cmd.CommandText = strQuery
da.SelectCommand = cmd
da.Fill(ds)
conn.Dispose()
cmd.Dispose()
da.Dispose()
Return ds
End Function

End Class

Mais uma vez observando o código apresentado deduzimos claramente que a implementação não tem diferença de nenhuma outra classe, deixando esse processo completamente simples e é isso mesmo. Seu WebServices já está pronto e o .NET oferece uma interface de teste para que possamos ver o resultado antes de enviar para o cliente. Para isso basta acessar pela sua maquina a url do mesmo http://localhost/wstreinamento/service1.asmx e confira o resultado apresentado na Figura 6.


Figura 06 - Interface de testes do WebServices

Agora clicando no link Somar, veja o resultado na Figura 07 e Figura 08.


Figura 07 - Método somar


Figura 08 - XML Resultante da soma dos valores no servidor

Achou fácil até esse ponto, imagine o próximo método RetornaDataSet, confira na Figura 9 e 10.


Figura 09 - Passando uma query sql como parametro


Figura 10 - XML resultante da consulta ao banco de dados.

Fantástico hein!!! Seu WebServices já está funcionando. Você não precisa implementar mais nada. Basta passar o link do WSDL (Figura 6) para quem for utilizar e pronto. Até o WSDL ele gera automaticamente confira na Figura 11.


Figura 11 - WSDL gerado automaticamente

Agora vamos consumir esse WebServices, para nosso exemplo poderíamos utilizar qualquer aplicação .NET, WebServices é um componente como outro qualquer. Vamos utilizar neste teste uma aplicação Winforms, poderia ser uma para PocketPC ou mesmo outra Web. E até outras plataformas que tenham suporte a WebServices.

Inicie um novo projeto, depois nesse projeto no Solution Explorer escolha ADD WebReference conforme Figura 12. E entre com a url do WSDL http://localhost/wstreinamento/service1.asmx?WSDL conforme Figura 13 , depois defina o nome do NameSpace (Espaço de nome) para classe que o .net vai gerar de forma a disponibilizar o WebServices dentro do código, confira na Figura 14.


Figura 12 - Adicionando referencia Web ( WebServices)


Figura 13 - Adicionando referencia Web ( WebServices)


Figura 14 - Alterando nome da referencia

Finalmente após concluir a etapa da Figura 14 você criou um novo NameSpace que vai conter a classe para esse WebServices, neste ponto o .NET criou outras classes internas que chamamos de "Proxy" para encapsular a trocar de informações. Agora adicione 01 DataGrid, 01 TextBox (ID=txtConsulta) e 01 Button conforme Figura 15. Depois efetue dois cliques no botão e adicione o código da Listagem 2.


Figura 15 - Montando formulário para testes

Listagem 02 - Adicionando código para consulta ao WebServices

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim ws As New wsFacil.Service1
Me.DataGrid1.DataSource = ws.RetornaDataSet(txtConsulta.Text).Tables(0)

End Sub

Após adicionar o código você verá que sua aplicação vai realizar consulta no banco de dados, sem que você tenha feito nenhuma codificação para isso. Comprove na Figura 16. Volte a imaginar se essa url fosse de um computador na "China" você estaria daqui efetuando uma consulta lá e recebendo os dados. Cabe a você implementar todos métodos e utilizar esse recurso a vontade.


Figura 16 - Testando o aplicativo

Finalizando

WebServices é um dos assuntos mais tratados no momento pela facilidade de integração entre ambientes diferentes, e por está seguindo uma linha de padronização permitindo a total integração. Sendo assim esse WebServices que você implementou pode ser utilizado por outra plataforma não .NET e vice-versa. O diferencial que você vai encontrar aqui é a facilidade de implementação. Isso realmente é indiscutível e tem trazido grande mercado para plataforma .NET. Existe outros temas ainda relacionados como segurança que fica para próximo artigo!!

Download código fonte

O que você gostaria saber? Aguardo seu comentário! Ele é muito importante. Participe! Até próximo artigo!

Você é de Salvador Bahia, então participe do grupo de usuários .NET http://www.mutex.com.br

3 comentários

 Polis
30/01/2006 11h03

Perfeito

Parabéns pelo artigo, ele faz exatamente o que se propõe a fazer: explicar o conceito de webservices para quem é iniciante, bom se todos os artigos fossem assim hehe...mais uma vez, parabéns

 Felipe Alencar Magalhães
14/08/2006 13h06

Show de bola!

Meus parabéns cara! Matérial sensacional! Altíssimo nível e conteúdo muito interessante!

 Thiago Pina
26/04/2008 17h23

Muito bom

Excelente, para iniciantes no assunto ficou fácil e compreensível. Parabéns!!!

Cancelar resposta

Qual a sua opinião?

Se você já possui conta iMasters, o login será feito abaixo.

Atenção: comentários considerados spams e/ou ofensivos serão moderados.
Patrocínio:
Sobre o Autor
Ramon Durães é autor da frase “Não tem que ser difícil”. Possui larga experiência em tecnologia Microsoft. É Microsoft Most Valuable Professional (MVP), Trabalha como Software Engineer na 2pc Professional Consulting onde trabalha com empresas ligadas ao desenvolvimento de software fornecendo amplo suporte na migração para .NET, arquitetura de software e adoção de Visual Studio Team System. Realiza palestras e treinamentos nos maiores eventos do Brasil. Entre em contato pelo blog (http://www.2pc.com.br/).

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.