.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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#