Вы находитесь на странице: 1из 5

VB - Programa Fonte com diversos recursos Page 1 of 5

.NET - Criando Web Services

Em meu artigo VB .NET - Criando WebServices dei uma introdução básica sobre WebServices , e , como já faz um bom tempo , é
sempre bom relembrar alguns dos conceitos básicos que estão relacionados com os web services.

A primeira coisa que você deve saber é que WebServices não estão vinculados a uma plataforma , pelo contrário a idéia é justamente a
oferecer uma funcionalidade que não dependa de uma plataforma específica. Como estou usando a plataforma .NET ela oferece recursos
para que possamos criar web services , Apache oferece este recurso , Java faz a mesma coisa e isto já existia em CORBA.

O protocolo que um Web Service usa é o protocolo SOAP (Simple Object Access Protocol) que é um padrão aberto criado por um pool de
empresas como Microsoft, IBM/Lotus, Don Box, Dave Winer (0lha ai a Microsoft e a IBM juntas na fotografia...) e proposto a IETF
(organização que publica padrões para internet como TCP,FTP, etc.) e ao W3 (World Wide Web Consortium).

O protocolo SOAP é baseado em tecnologias já existentes como HTTP, SMTP e XML e utiliza mensagens no formato XML não definindo um
modelo de troca para mensagens. A idéia por trás disto é ser independente da linguagem e independente da plataforma e também ter acesso
transparente aos firewalls visto a mensagem ser apenas texto.

As desvantagens do SOAP são as brechas na segurança , o fato de não oferecer serviços avançados (ainda) e o problema de performance
(RMI,DCOM e Remoto são mais rápidos).

Você deve estar pensando : "..mas se Soap usa XML , e XML é texto puro , como a performance pode ser pior ?"

O estrutura básica de uma mensagem SOAP é a seguinte :

Onde :

Envelope - define o começo


da mensagem SOAP

Header : possui informações


específicas da aplicação

Body : contém a mensagem


propriamente dita

Um exemplo de uma mensagem SOAP qualquer seria:

POST /Temperature HTTP/1.1x


Header
Host : www.weather.com
Content-Type: text/xml
Content-Length : <whatever>
SOAPMethodName: <some-URI>#CurrentTemp Soap Extensions
<SOAP: Envelope xmlns : SOAP "urn:schemas-xml-sopa-
org:soap.v1">
<SOAP:Body>
€€€€€€€€€€ <m:CurrentTemp xmlns:m="some-URI">
Mensagen XML
€€€€€€€€€€€€€€€€ <zip_code>37919</zip_code>
€€€€€€€€€€€ <m:CurrentTemp>
</:SOAP:BODY>
<SOAP:Envelope>

Percebeu que para enviar uns 5 bytes (codigo postal) o protocolo usa mais de 100 bytes ?

Resumindo : o protocolo embora use a estrutura XML em mensagens SOAP não é trivial. Mas fique tranquilo , você não precisará saber
nada sobre XML e protocolo SOAP vai apenas usá-los.

Mas nem só de protocolo SOAP vive um Web Service. Dois protocolos intimamente ligados aos Web Services são:

WSDL - Web Service Description Language - è um padrão para descrição de informações de serviços sendo que os serviços WSDL são
descritos pelos desenvolvedores dos serviços Web. O cliente acessa as informações para usar os serviços.

Os documentos WSDL contém um conjunto de definições (marcados com XML) que descrevem os serviços Web e especifica as capacidades
do serviço, sua localização na Web e instruções a respeito de como acessá-los. Define também a estrutura da mensagem que um serviço
Web envia e recebe.

A motivação por trás do WSDL é que antes de uma aplicação possa acessar um serviço Web esta aplicação precisa aprender sobre os
serviços disponíveis e suas capacidades.

UDDI - Universal Description Discovery and Integration - é um protocolo para publicação e procura de serviços (lista amarela de serviços).
Funciona como um tipo de anúncio do serviço Web. Não é obrigatório para web services ; se você sabe o endereço do web service.

Criando um Web Service para cálculo de índice de massa corpórea

http://www.macoratti.net/vbn_wbs2.htm 10/09/2009
VB - Programa Fonte com diversos recursos Page 2 of 5

Vamos então a parte prática : Criar um Web Service que oferece um serviço que poderá ser consultado na web.

Que tal oferecer um serviço que calcula o índice de massa corpórea - IMC. Esse índice é utilizado para avaliar o grau de obesidade das
pessoas. Ele é calculado quando dividimos o peso (em kg) pela altura ao quadrado (em m). Abaixo a tabela com os valores do IMC e o seu
significado:

CLASSIFICAÇÃO MASCULINO FEMININO


RISCO BAIXO 17,9 A 18,9 15,0 A 17,9
IDEAL 19,0 A 24,9 18,0 A 24,4
RISCO MODERADO 25,0 A 27,7 24,5 A 27,2
RISCO ELEVADO ACIMA DE 27,8 ACIMA DE 27,3

Nosso web service irá receber como parâmetros a altura em m (metros) e o peso em quilos (Kg) e o email do cliente. Irá calcular o IMC do
cliente e enviar o resultado para o Email informado.

Crie um novo projeto no VS.NET (estou usando a versão 1.1 da Net Framework) do tipo Web Service usando a linguagem VB.NET.

Será exibida uma janela chamada Service1.asmx.vb ; altere o nome para imc.asmx conforme figura abaixo:

Vamos incluir o código no arquivo icm.asmx, para isto clique no link : click here to swith to code view para entrar na janela de código.

Como vamos estar enviando um e-mail será necessário usar os namespaces:

Imports System.Web.Services
Imports System.Web.mail

Crie a função calculaIMC() e inclua o código abaixo no arquivo icm.asmx

<WebMethod()> Public Function CalculaImc(ByVal peso As Double, ByVal altura As Double, ByVal email As String) As Double

Dim altura2 As Double = altura * altura


Dim imc As Double = (peso / altura2)
Dim msg As String

Select Case imc


Case Is < 20
msg = "Seu IMC é " & imc & " você esta ABAIXO do peso."
Case 20 To 24.9
msg = "Seu IMC é " & imc & " seu peso esta NORMAL."
Case 25 To 29.9
msg = "Seu IMC é " & imc & " você esta com SOBREPESO."
Case 30 To 39.9
msg = "Seu IMC é " & imc & " você esta OBESO."
Case Is > 40
msg = "Seu IMC é " & imc & " você esta com obesidade MÓRBIDA."
End Select

If email <> "" Then


Dim mail As New Mail.MailMessage
Dim texto As String
texto = "<HTM><BODY>De acordo com peso "
texto += peso & " e altura "
texto += altura & " informados. "
texto += "<br>"

http://www.macoratti.net/vbn_wbs2.htm 10/09/2009
VB - Programa Fonte com diversos recursos Page 3 of 5

texto += msg
texto += "</BODY></HTML>"
With mail
.From = "www.macoratti.net"
.To = email
.Subject = "IMC - Indice de Massa Corporea"
.Body = texto
.BodyFormat = MailFormat.Html
End With

SmtpMail.Send(mail)
End If
End Function

O código é muito simples: dividimos o peso pela altura ao quadrado e conforme o valor do imc definimos uma mensagem para o usuário. Se
o usuário informar o email iremos montar uma mensagem que será enviada para o email indicado.

Para saber mais sobre como enviar emails com ASP.NET leia o artigo : ASP.NET - Enviando Emails : HTML e anexos

Vamos salvar e compilar o Web Service. Feito isto vamos testar abrindo o seu navegador padrão e chamando o web service via http
digitando a url onde o mesmo foi salvo e o nome do arquivo icm.asmx. Iremos obter o seguinte resultado:

Clicando no link - CalculaImc - iremos obter detalhes da descrição do Web Service.

Para testar o web service informe os valores para peso e altura e clique no botão Invoke. Você deverá obter um arquivo XML com o
resultado do imc e o seu tipo de retorno (double)

Agora só falta criar um cliente para usar o web service criado. Para isto vamos criar uma aplicação ASP.NET com um formulário que será a
interface com o usuário e que usará o nosso web service.

Crie um novo projeto no VS.NET do tipo ASP.NET web application usando a linguagem VB.NET com o nome de usaIMC.

No formulário padrão insira os seguintes controles : 2 TextBox , 1 Button , 3 labels e 1 Image , conforme layout abaixo:

http://www.macoratti.net/vbn_wbs2.htm 10/09/2009
VB - Programa Fonte com diversos recursos Page 4 of 5

Referenciando o web service no projeto Web:

Para poder usar o web service teremos que incluir uma referência
ao mesmo. Para isto clique com o botão direito do mouse sobre o
nome do projeto - usaIMC - e selecione a opção : Add Web
Reference.

A seguir informe a url do local onde o Web Service foi criado. A seguir clique em Go para que o web service seja localizado e exibido
conforme abaixo:. Para encerrar clique no botão - Add Reference.

agora no evento click do botão de comando calculaIMC insira o código abaixo:

Private Sub btnCalculaImc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculaImc.Click

Dim email As String = txtEmail.Text


Dim peso As Double = txtPeso.Text
Dim altura As Double = txtAltura.Text

Dim imc As New localhost.Service1


lblAviso.Text = " Valor do seu IMC = " + imc.CalculaImc(peso, altura2, email)
End Sub

na linha de código : Dim imc As New localhost.Service1 estou usando a referência ao web service criado.

Note também que estou usando a função CalculaImc() do web service passando os valores obtidos na página web.

Executando o projeto web informando os valores para peso e altura teremos:

http://www.macoratti.net/vbn_wbs2.htm 10/09/2009
VB - Programa Fonte com diversos recursos Page 5 of 5

Pronto ! o resultado foi obtido usando o web service criado.

Até o próximo artigo ....

José Carlos Macoratti

http://www.macoratti.net/vbn_wbs2.htm 10/09/2009

Вам также может понравиться