Login:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

WebServices

Feed da seção WebServices

Newsletter de WebServices


Segunda-feira, 10/03/2008 - 08:30 - Por Angelo Bestetti
Seções relacionadas:

Retornando classe de objetos em webservices

Olá Developers. Recentemente, lendo alguns artigos sobre webservices aqui no iMasters, percebi que a maioria dos developers ainda tem muito mais problema em lidar com a informação retornada do que com as chamadas dos webservices. O que normalmente todo mundo pensa é que o SOAP de resposta é simplesmente um XML encapsulado em um envelope o que é verdade, porém esta informação é perfeitamente capaz de se transformar em objetos dentro de suas aplicações.

Para esta matéria ter realmente sentido, precisamos inicialmente construir um webservice com os parâmetros corretos. De que adianta no "Client" a gente se matar, se no "Server-Side" o WebService foi construído de forma errada?

Uma coisa bem interessante no VS.NET é podermos serializar uma classe no webservice, após criá-la. Esta classe pode ser DataSets, Strongly Typed etc.

Requisitos para este artigo:
  • Visual Studio 2005-2008
  • .NET 2.0 ou superior
  • Prestar Atenção (riss)

Primeiro Passo: Criar seu projeto no Visual Studio

Criar um projeto qualquer, eu chamei de "IHateHelloWorld" por motivos óbvios.

Segundo Passo: Criar o WebService dentro do Projeto

[vai foto aqui[vai foto aqui][vai foto aqui]

Código Básico já criado pelo Visual Studio:


Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<System.Web.Services.WebService(Namespace:="IHateHelloWorld", Description:="WebService de exemplo para retornar objetos nos WebServices")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class IHateHelloWorld
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function

End Class

Percebam que o NameSpace está diferente. O tempuri.org pode ser alterado conforme sua conveniência e adicionamos também uma "Description" para explicar do que se trata o WebService.

Terceiro Passo: Criar a Classe de Retorno


Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

''' <summary>
''' Classe de Retorno para o WebService
''' </summary>
Public Class ResultadoDaPesquisa
    Public NroPedido As Integer
    Public Cliente As String
    Public DataPedido As DateTime
    Public TotalPedido As Double
    Public PedidoEntregue As Boolean
End Class

<System.Web.Services.WebService(Namespace:="IHateHelloWorld", Description:="WebService de exemplo para retornar objetos nos WebServices")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class IHateHelloWorld
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function IHateHelloWord() As ResultadoDaPesquisa
        Dim oResultado As New ResultadoDaPesquisa
        oResultado.NroPedido = 123456
        oResultado.Cliente = "Cliente de Teste"
        oResultado.DataPedido = DateTime.Now
        oResultado.TotalPedido = "1234,56"
        oResultado.PedidoEntregue = True
        Return oResultado
    End Function
End Class

Como vocês podem notar no novo código, agora temos nossa classe que vai ser populada com resultados e serializada no WebService.

Logo após temos o WebMethod que é a função a ser chamada no WebService. Ela simplesmente retorna a Classe "ResultadoDaPesquisa" populada com seus dados que podem ser extraídos de um banco de dados ou cálculos, etc.

Aperte F5 para compilar usando o Debug e pronto. Eis o resultado:

Clique na função IhateHelloWorld e voce terá a opção para invokar a mesma:

E pronto a resposta:


<?xml version="1.0" encoding="utf-8" ?> 
<ResultadoDaPesquisa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="IHateHelloWorld">
  <NroPedido>123456</NroPedido> 
  <Cliente>Cliente de Teste</Cliente> 
  <DataPedido>2008-03-06T09:59:32.7042787-03:00</DataPedido> 
  <TotalPedido>123456</TotalPedido> 
  <PedidoEntregue>true</PedidoEntregue> 
  </ResultadoDaPesquisa>

Percebam que nós temos agora um xmlns com o seu Namespace do Webservice e foi retornado os campos de sua classe.

Vamos agora ver como construir um "Client" para acessar essas informações:

Crie uma pagina:

Conteúdo para sua página aspx:


< Page Language="VB" AutoEventWireup="false" CodeFile="IHateHelloWorldReloaded.aspx.vb" Inherits="IHateHelloWorldReloaded" >

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Acessando WebService IHateHelloWorld</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h3>Consultando o IHateHelloWorld WebService</h3>
        <br />
        <table border="0" cellpadding="10" cellspacing="0" style="width: 611px">
            <tr>
                <td width="30">
                    Nro Pedido:</td>
                <td width="70">
                    <asp:Label ID="lbl_NroPedido" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td width="30">
                    Cliente:</td>
                <td width="70">
                    <asp:Label ID="lbl_Cliente" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td width="30">
                    Data do Pedido:</td>
                <td width="70">
                    <asp:Label ID="lbl_DataPedido" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td width="30">
                    Total do Pedido:</td>
                <td width="70">
                    <asp:Label ID="lbl_TotalPedido" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td width="30">
                    Pedido Entregue :</td>
                <td width="70">
                    <asp:Label ID="lbl_PedidoEntregue" runat="server"></asp:Label></td>
            </tr>
            <tr>
                <td width="30">
                </td>
                <td width="70">
                    <asp:Button ID="btnConsultar" runat="server" Text="Consultar WebService" /></td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>

CodeFile (CodeBehind) para a pagina:


Partial Class IHateHelloWorldReloaded
    Inherits System.Web.UI.Page

    Protected Sub btnConsultar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
        Dim oWS As New IHateHelloWorld ' Instancia o WebService em um Objeto
        Dim oResposta As New ResultadoDaPesquisa ' Instancia o Objeto de Resposta


        oResposta = oWS.IHateHelloWord ' Invoka o WebService e recebe o resultado no objeto de resposta

        Me.lbl_NroPedido.Text = oResposta.NroPedido.ToString
        Me.lbl_Cliente.Text = oResposta.Cliente.ToString
        Me.lbl_DataPedido.Text = oResposta.DataPedido.ToString
        Me.lbl_TotalPedido.Text = oResposta.TotalPedido.ToString
        Me.lbl_PedidoEntregue.Text = oResposta.PedidoEntregue.ToString

    End Sub
End Class

Resultado via Web

Considerações Finais:

Lembre-se sempre que este exemplo de "Client" foi criado dentro da mesma aplicação que o WebService. Logo, na hora de adicionar a "Web Reference", você deve procurar dentro do mesmo projeto. Quando você estiver trabalhando com projetos diferentes, o WebService deve possuir um endereço: http://www.seusite.com.br/IHateHelloWorld.asmx

Deve-se sempre entender que a maioria dos objetos em .NET podem ser serializados. Com isso temos um leque de opções de informações que podemos retornar pelos Web Services.

No próximo artigo vou publicar como retornar um DataTable vindo de uma base de dados SQL e serializá-la no webservice.

That´s all Folks!

Todos os artigos de Angelo Bestetti

0 comentários publicados

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Angelo Bestetti tem mais de 20 anos de experiência em Análise Desenvolvimento e Deployment de Aplicações Corporativas e nos ultimos 15 anos focado em Web, já foi Gerente de Projetos Especiais da VKI Studios em Bristish Columbia, alem de gerenciar a House of Development empresa focada em desenvolvimento de aplicacoes web,mobile,webservices e SEO.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

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