.NET -  Criando Web Services - Cálculo IMC


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 ideia é 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
Host : www.weather.com
Content-Type: text/xml
Content-Length : <whatever>
Header

 

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">
                 <zip_code>37919</zip_code>
            <m:CurrentTemp>
</:SOAP:BODY>
<SOAP:Envelope>
Mensagen XML

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

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>"
            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:

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:

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

Até o próximo artigo ....

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti