Desenvolvimento - ASP. NET

ASP.NET - WebServices para Iniciantes

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.

por Ramon Durães



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 maquina local. Porém esse componente pode ficar residente em qualquer maquina, seja ela na sua empresa, na empresa de terceiros ou 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 unica 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 paginas amarelas de WebServices, cujo objetivo é encontrar 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 empresas 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 industria 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.


SEM XML

APRENDA ASP.NET, RAMON DURAES , R$ 10,00

COM XML

<Livro>
<Descricao> APRENDA ASP.NET </Descricao>
<Autor> Ramon Durães </Autor>
<Preco> R$ 10,00 </Preco>
</Livro>

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 em 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, afinal 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 que 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. Existem outros temas ainda relacionados como segurança que fica para próximo artigo!!

"Use .NET não é mais necessário reinventar a roda..."
» Download código fonte

O que você gostaria de 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

Ramon Durães

Ramon Durães - Especialista em desenvolvimento de software e Microsoft Most Valuable Professional (MVP) em Visual Studio Team System. Realiza treinamentos de .NET Framework em empresas, consultoria em arquitetura de software e implantação de Visual Studio Team System. Palestrante nos principais eventos da Microsoft no Brasil (Tech-Ed 2005, Tech-Ed 2006, Tech-Ed 2007, Tech-Ed 2008, Tech-ED 2009), Microsoft Innovation Days 2007 (Salvador, Brasília, Recife, Goiânia, Natal, Maringá), Microsoft Innovation Days 2009 (Salvador) , Campus Party Brasil 2009 e eventos regionais relacionados a grupos de usuários e universidades. Conhecido autor de artigos para os principais portais de conteúdo e autor de 10 publicações eletrônicas em CD (Video-Aula) pela editora Linha de Código além dos livros "Desenvolvendo para web usando o Visual Studio 2008" e "Gerenciando projetos de software usando Visual Studio Team System" pela editora Brasport. Pode ser encontrado em seu blog http://www.ramonduraes.net e @ramonduraes no Twitter.