KATIA GOMES DA SILVA PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS COM A PLATAFORMA .NET Palmas – TO 2006 2 KATIA GOMES DA SILVA PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS COM A PLATAFORMA .NET “Trabalho de Estágio apresentado como requisito parcial da disciplina Prática de Sistemas de Informação I do curso de Sistemas de Informação, orientado pelo Prof. M. Sc. Fernando Luiz de Oliveira”. Palmas – TO 2006 3 KATIA GOMES DA SILVA PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS COM A PLATAFORMA .NET “Trabalho de Estágio apresentado como requisito parcial da disciplina Prática de Sistemas de Informação I do curso de Sistemas de Informação, orientado pelo Prof. M. Sc. Fernando Luiz de Oliveira”. BANCA EXAMINADORA _____________________________________________ Prof. M. Sc. Fernando Luiz de Oliveira Centro Universitário Luterano de Palmas _____________________________________________ Profª. M. Sc. Madianita Bogo Centro Universitário Luterano de Palmas _____________________________________________ Prof. M. Sc. Ricardo Marx Costa Soares de Jesus Centro Universitário Luterano de Palmas Palmas - TO 2006 4 SUMÁRIO 1. INTRODUÇÃO ................................................................................................ 8 2. REVISÃO DA LITERATURA ......................................................................... 10 2.1 Dispositivos Móveis................................................................................ 10 2.1.1 Telefones Celulares Comuns.......................................................... 11 2.1.2 PDA´s ............................................................................................. 13 2.1.3 SmartPhones (Telefone Inteligente) ............................................... 13 2.2 Programação para Dispositivos Móveis ................................................. 15 2.2.1 J2ME............................................................................................... 15 2.2.2 QuickFrame .................................................................................... 15 2.2.3 .NET para Programação de Dispositivos Móveis............................ 16 2.3 Plataforma .NET .................................................................................... 17 2.3.1 Visual Studio .NET.......................................................................... 19 2.3.1.1 Emuladores..................................................................................... 19 2.3.2 2.4 Utilização de Web Services ................................................................... 22 2.5 Exemplificação da Integração das Tecnologias ..................................... 24 3. MATERIAIS E MÉTODOS ............................................................................ 31 3.1 Local e período ...................................................................................... 31 3.2 Material .................................................................................................. 31 3.3 Metodologia ........................................................................................... 32 4. 5. .NET Compact Framework.............................................................. 20 RESULTADOS E DISCUSSÕES .............................................................. 33 4.1 Banco de dados ..................................................................................... 34 4.2 Criação do Web Service ........................................................................ 35 4.3 Desenvolvimento da aplicação para SmartPhone ................................. 40 CONSIDERAÇÕES FINAIS .......................................................................... 44 5 LISTA DE FIGURAS Figura 1 – Exemplos de dispositivos móveis ....................................................... 11 Figura 2 – Requisição de páginas Web através do protocolo WAP .................... 12 Figura 3 – Estrutura do .NET Framework ............................................................ 18 Figura 4 – Emulador ............................................................................................ 20 Figura 5 – Arquitetura do .NET Compact Framework.......................................... 21 Figura 6 – Ciclo de acesso ao Web Service ........................................................ 23 Figura 7 – Tela de desenvolvimento do protótipo................................................ 25 Figura 8 – Trecho do código do protótipo ContaFacil.vb ..................................... 25 Figura 9 – Código de ligação entre a aplicação e o Web Service ....................... 26 Figura 10 – Tela da execução da aplicação no emulador SmartPhone .............. 27 Figura 11 – Código do método de retorno dos dados do Web Service ............... 27 Figura 12 – Arquivo XML ................................................................................... 278 Figura 13 - Visualização do arquivo Produtos.asmx em um browser .................. 29 Figura 14 – Resultado da execução do método RetornaProdutos ...................... 30 Figura 15 – Arquitetura da aplicação................................................................... 33 Figura 16 – Modelo entidade relacionamento...................................................... 34 Figura 17 – Classe e métodos do Web Service................................................... 35 Figura 18 – WebMethod consultarPorNome........................................................ 37 Figura 19 – Visualização do arquivo Service.asmx ............................................. 38 Figura 20 – Janela para inserção do parâmetro do método consultarPorNome . 39 Figura 21 – Resultado da execução do método consultarPorNome.................... 40 Figura 22 – Tela da página inicial da aplicação................................................... 41 Figura 23 – Método de consulta por nome .......................................................... 42 Figura 24 – Código do caminho do Web Service ................................................ 42 Figura 25 – Tela do resultado da consulta por nome .......................................... 43 6 LISTA DE ABREVIATURAS ASMX = Active Server Method Extension CLR = Commom Language Runtime CLS = Common Language Specidication HTTP = Hyper Text Transfer Protocol IL = Intermediate Language J2ME = Java 2 Micro Edition MSIL = Microsoft Intermediate Language PDA = Personal Digital Assistants SOAP = Simple Object Access Protocol WAP = Wireless Application Protocol WML = Wireless Makup Language WSDL = Web Services Description Language XML = Extensive Mark up Language 7 RESUMO Resumo: As aplicações desenvolvidas para dispositivos móveis estão passando por grandes transformações tecnológicas, isso se deve à necessidade de haver comunicação em qualquer lugar e a qualquer momento. Este trabalho visa desenvolver uma aplicação para programação de dispositivos móveis, em especial celulares (SmartPhones), a partir de uma aplicação básica de armazenamento, busca e acesso a base de dados, utilizando a plataforma .NET, Web Services e a ferramenta Visual Studio.NET para o desenvolvimento da aplicação. Palavras-chave: Dispositivos Móveis, Plataforma .NET, Web Services. 8 1. INTRODUÇÃO A mobilidade é o termo utilizado para identificar dispositivos que podem ser operados à distância ou sem fio (NETTO, 2004). A particularidade que os usuários e empresas procuram na atualidade é poder executar as tarefas a qualquer hora e em qualquer lugar, sem a dependência de fios ou de um computador desktop. Os usuários, por meio dos dispositivos móveis, adquirem mobilidade e ganhos de produtividade, desempenhando suas tarefas com acesso mais fácil e abrangente à informação. As possibilidades de uso para esses dispositivos são inúmeras, dentre as quais, podem ser citada a programação para jogos, para entretenimento em geral, armazenamento e busca de informações, envio e recebimento de sons e imagens e acesso a Internet. As tecnologias para desenvolvimento de aplicações para dispositivos móveis oferecem recursos que permitem integrar diversos aplicativos e plataformas, como J2ME (Java 2 Micro Edition), .NET e uma nova plataforma que está em desenvolvimento, a QuickFrame, que se caracteriza por ser padronizada para desenvolvimento de software para dispositivos móveis. Um dos componentes da plataforma .NET que oferece a estrutura necessária para o desenvolvimento de aplicações para dispositivos móveis é o .NET Compact Framework, que acompanha o Visual Studio .NET. O Visual Studio .NET é uma ferramenta que proporciona um ambiente de desenvolvimento integrado em que se pode desenvolver, depurar, testar, disponibilizar Web Services e aplicações (BASIURA et al., 2003). Além disso, oferece recursos necessários para o desenvolvimento de aplicações móveis, tais como: emuladores, que simulam um dispositivo móvel real e possui todos os recursos oferecidos pelo mesmo, além de facilitar os testes durante o desenvolvimento. 9 Este trabalho tem como objetivo, estudar as facilidades oferecidas pela plataforma .NET no desenvolvimento de aplicações para dispositivos móveis, em especial SmartPhones. Para exemplificar estas facilidades será desenvolvida uma aplicação responsável por apresentar o resultado do vestibular do CEULP/ULBRA, localizado em um banco de dados remoto, o qual será acessado por meio de métodos de um Web Service. Desta forma, será realizada a implementação de uma aplicação de armazenamento, busca e acesso a base de dados. Este trabalho está estruturado em capítulos, divididos da seguinte forma: o capítulo 2 apresenta uma visão geral sobre os dispositivos móveis, a programação para estes dispositivos, a ferramenta utilizada para o desenvolvimento da aplicação para os dispositivos móveis, a utilização da plataforma .NET e seus componentes, assim como uma breve descrição de Web Services. O capítulo 3 apresenta os materiais e métodos utilizados para o desenvolvimento do trabalho. Já o capítulo 4 apresenta os detalhes do banco de dados, da implementação do Web Service, do desenvolvimento da aplicação para dispositivos móveis (SmartPhone) e os passos seguidos para seu desenvolvimento. Em seguida, o capítulo 5 apresenta as considerações finais sobre o trabalho. Por fim, no capítulo 6 são apresentadas as referências bibliográficas utilizadas para o desenvolvimento deste trabalho. 10 2. REVISÃO DA LITERATURA Para o desenvolvimento deste trabalho foram realizadas pesquisas e estudos sobre dispositivos móveis, plataforma .NET e Web Services, a fim de fornecer embasamento teórico sobre os mesmos. Esses estudos estão disponibilizados nas seções seguintes. 2.1 Dispositivos Móveis Os dispositivos móveis são ferramentas que podem ser utilizadas em qualquer lugar que, além das funcionalidades de agenda eletrônica ou assistente pessoal, se caracterizam por serem sistemas computadorizados que facilitam a comunicação, através do acesso à Internet. Têm o objetivo de atender aos usuários em movimento que necessitem de rapidez, facilidade e segurança no acesso a informações, independentemente da sua localização física (PEKUS, 2002). São, por isso, tecnologias para a interligação de dispositivos móveis à grande rede, possibilitando, não só o tráfego de voz, mas também o envio e recebimento de dados, suprindo a necessidade de dispor de dados o tempo todo e em qualquer lugar. Estas operações são viáveis por meio de um dispositivo portátil (móvel) como telefones móveis (celulares), diferentes tipos de PDA´s (Personal Digital Assistants) ou os SmartPhones, que são a junção do telefone celular com diversos atributos de um PDA (TARIFA, 2004). A Figura 1 apresenta alguns exemplos de dispositivos móveis. 11 Figura 1 – Exemplos de dispositivos móveis A Figura 1 apresenta alguns exemplos de dispositivos móveis, sendo dois modelos de Pocket PC e um SmartPhone. 2.1.1 Telefones Celulares Comuns Os telefones celulares evoluíram de simples mecanismos de comunicação por voz para agenda eletrônica, entreterimento em geral, acesso à Internet, ou seja, dispositivos móveis que podem ser operados em qualquer lugar e a qualquer hora. Os aparelhos celulares comuns não possuem a opção de download e software de instalação, além do que foi configurado durante o processo de fabricação. Alguns possuem apenas a opção de navegar pela Internet. A navegação pela Internet, via celular, é realizada através da utilização de um minibrowser, embutido no aparelho, para interpretar o conteúdo das páginas acessadas. Para o acesso à Internet, o telefone celular necessita da tecnologia WAP (Wireless Application Protocol), criada para visualização de páginas da Internet em clientes simplificados, com baixa capacidade de processamento, ou seja, a 12 tecnologia WAP, consiste na transformação, adaptação e criação de conteúdos da Internet para a visualização na tela de um celular (MSDN, 2003d). Esta tecnologia caracteriza-se por ser um protocolo de transmissão de dados. Para que as páginas da Internet sejam acessíveis por aparelhos celulares, é necessário utilizar a linguagem WML (Wireless Makup Language), que é a linguagem usada para montar as páginas acessíveis por esta tecnologia. A Figura 2 mostra como essas páginas são requisitadas a partir do protocolo WAP. CLIENTE CLIENTE GATEWAYWAP WAP GATEWAY 1 Requisição SERVIDOR 2 Requisição Conversor HTTP e TCP/IP WML 3 Resposta 5 Resposta Conteúdo 4 SERVIDOR WEB Figura 2 – Requisição de páginas Web através do protocolo WAP Para oferecer páginas WML acessíveis por celulares, é necessário utilizar um mini-browser, um recurso embutido no aparelho, que é responsável pela visualização das páginas de Internet na tela do aparelho. A requisição da página é feita através dos protocolos TCP/IP e HTTP (Hyper Text Transfer Protocol), que estabelece a comunicação com a Internet. Para demonstrar passo a passo à requisição de páginas Web por celulares, a requisição será dividida em 5 etapas, conforme ilustrado na Figura 2: a etapa 1 representa a solicitação do cliente de uma página da Internet; na etapa 2 o gateway recebe a requisição e converte para o padrão HTTP/TCP/IP e envia para o servidor Web; na etapa 3 o servidor Web recebe a solicitação e gera a página em código WML e envia para o gateway; na etapa 4 o gateway recebe o código WML da página e, então, o encaminha para o cliente; e, por fim, na etapa 5 a página requisitada será visualizada pelo cliente (celular). 13 2.1.2 PDA´s A necessidade de disponibilizar aplicações e informações em qualquer momento e em qualquer lugar fez surgir uma linha de dispositivos móveis conhecidos como PalmTops ou Pocket PCs. Esses dispositivos podem ser considerados uma revolução, pois foram capazes de atingir o cotidiano das pessoas e fazer parte da vida delas, modificando suas rotinas e decisões. Os Pockets possuem grande quantidade de memória, telas com pontos sensíveis a toques, mouse simulado por uma caneta (chamada de stylus), possuem modem, teclado e câmera digital acoplada, tela colorida, rede sem fio embutida, ou seja, são computadores pessoais portáteis que auxiliam nas atividades do dia-a-dia (MIRANDA, 2004). Mas ainda não possuem a mesma capacidade de processamento e memória de um computador de mesa. 2.1.3 SmartPhones (Telefone Inteligente) Para evitar o desconforto pela necessidade de carregar um PDA e um celular, além da necessidade de se obter maiores recursos e formas de aproveitar as novas opções de conectividade e transmissão de dados em alta velocidade, foram criados os SmartPhones. Estes dispositivos correspondem a um telefone celular que possui atributos dos PDAs, com maior capacidade de memória e processamento, recursos de expansibilidades e facilidades de acesso à Internet (MIRANDA, 2004). Os SmartPhones foram planejados para serem usados da mesma maneira que um celular, porém, com os recursos técnicos disponíveis em um PDA, reunindo a mobilidade do primeiro e a capacidade de processamento do segundo. A Microsoft criou um conjunto de setas para facilitar a manipulação da navegação, discagem e acesso a dados no SmartPhone (TARIFA, 2004). Apesar das semelhanças, os SmartPhones possuem uma tela pequena, não sensível ao toque e não suportam caneta (stylus) para simular o mouse (MIRANDA, 2004). 14 Alguns dos recursos que acompanham os SmartPhones são: o sistema operacional Windows, Internet Explorer, Media Player e MSN Messenger. É possível, ainda, a instalação de diversos aplicativos, além de trazer o .NET Compact Framework já instalado. Segundo Guimarães (2004), o SmartPhone realiza tarefas básicas que um computador é capaz de fazer, gerencia e-mails, arquivos de texto, áudio e vídeo, tira fotos, navega em alta velocidade pela Internet, transfere dados para outros equipamentos e possui o tamanho de um celular comum. É um dispositivo móvel pequeno, que auxilia na realização de tarefas enquanto seus usuários estão em movimento, proporcionando ganho de tempo. Porém, existem limitações computacionais devido ao tamanho destes dispositivos, juntamente com os poucos recursos de hardware, uma vez que a capacidade de processamento, armazenamento, memória, entre outros, são inferiores ao de um computador convencional, ou seja, possuem arquiteturas e tecnologias limitadas. Por isso, os mesmos não são capazes de realizar tarefas com o mesmo desempenho de um computador, além de não ser tão prático para atividades como: montar documentos grandes, digitar e trabalhar com recursos visuais. A necessidade de um sistema operacional para ser utilizado nesses dispositivos fez surgir sistemas operacionais como: Palm OS, que oferece segurança para o armazenamento de informações e facilita a integração de equipamentos com o ambiente de rede (PALM OS, 2005); Symbian OS, desenvolvido exclusivamente para dispositivos móveis (SYMBIAN, 2005); Windows CE, versão simplificada do Windows, criada pela Microsoft, que facilmente pode ser embutido em hardware de pequena capacidade de memória e processamento (MICROSOFT, 2005). A Microsoft lançou uma versão especial do Windows CE, adaptando a interface para o uso de SmartPhones, o sistema operacional Windows Mobile (MICROSOFT, 2005). 15 2.2 Programação para Dispositivos Móveis As aplicações desenvolvidas com a plataforma .NET, para serem executadas em dispositivos móveis, necessitam de alguns recursos que os aparelhos celulares comuns não possuem. Isso ocorre devido a vários fatores como, por exemplo, os diferentes tipos de aparelhos que usam processadores e hardware diferentes. Além de possuírem arquiteturas e tecnologias diferentes, outro fator limitante refere-se a pouca quantidade de memória para armazenamento de dados e programas, o que dificulta a instalação de qualquer versão do .NET em celulares comuns (MIRANDA, 2004). Inicialmente, para o desenvolvimento de aplicações para dispositivos móveis, existiam apenas as linguagens derivadas do C++ e Visual Basic, conhecidas como eVC e eVB (MIRANDA, 2004). A partir destas, surgiram outras tecnologias para o desenvolvimento de aplicações para dispositivos móveis, como o J2ME, que não define um novo tipo de Java, mas adapta sua plataforma para que seja possível executar programas em dispositivos móveis (SUN, 2005); a QuickFrame, projeto que visa padronizar uma plataforma para dispositivos móveis (UNICAMP, 2005); e o .NET, plataforma que possui sua versão para dispositivos móveis chamada de .NET Compact Framework (MSDN, 2003a). As seções seguintes resumem cada uma destas tecnologias. 2.2.1 J2ME O Java 2 Micro Edition (J2ME) é a versão do Java desenvolvida para dispositivos móveis, projetada para dispositivos com memória, vídeo e poder de processamento limitado (MUCHOW, 2004). A plataforma J2ME é dividida em três camadas: configurações, perfis e máquina virtual (SUN, 2005). São camadas trabalhadas especialmente para serem utilizadas na programação para dispositivos móveis. 2.2.2 QuickFrame 16 Com o objetivo de diminuir as barreiras no desenvolvimento de soluções de mobilidade e maximizar o poder criativo do maior número possível de empresas brasileiras de desenvolvimento de softwares, a Universidade Estadual de Campinas (Unicamp), em parceria com a Intel, a Compera e a Universidade Federal de Mato Grosso do Sul (UFMS), encaminharam à Financiadora de Estudos e Projetos (Finep) um projeto para a criação de uma nova plataforma de desenvolvimento de software para dispositivos móveis: o QuickFrame (UNICAMP, 2005). O projeto tem como principal objetivo desenvolver uma plataforma padrão para dispositivos móveis, e está previsto para ser concluído em 2006. O objetivo do projeto é desenvolver uma plataforma básica e estrutural de código aberto para a criação de aplicações genéricas (FUOCO, 2005), ou seja, permitir que os programadores escrevam apenas uma vez o software para celulares, que rode em qualquer modelo de aparelho, independentemente da tecnologia e de características, tal como o tamanho da tela, por exemplo. 2.2.3 .NET para Programação de Dispositivos Móveis Para a programação de dispositivos móveis, o .NET oferece várias ferramentas como o ASP .NET e .NET Compact Framework. Uma aplicação criada através do ASP .NET para dispositivos móveis é semelhante à de uma aplicação ASP .NET para páginas comuns, inclusive possuindo a mesma extensão de arquivo: ‘.aspx’ (AVELINO, 2004). O seu diferencial são os controles de servidor especializados para dispositivos móveis, responsáveis por possibilitar que uma página ASP .NET seja adaptada automaticamente de acordo com o dispositivo utilizado. Assim, pode-se acessar páginas ASP .NET em dispositivos móveis (um celular, por exemplo), ou mesmo acessá-las normalmente através do navegador Web de um microcomputador. Os controles de servidor, tanto para páginas ASP.NET comuns quanto para dispositivos móveis, são praticamente os mesmos. Por exemplo, um controle de servidor Label de uma página ASP. NET comum produz o mesmo efeito de uma que será executada para um dispositivo móvel. Porém, internamente possuem características diferentes, pois o controle para páginas comuns precisa apenas mostrar saída HTML. Já o controle para dispositivos móveis precisa 17 primeiro preocupar-se com o dispositivo utilizado antes de exibir o texto solicitado, utilizando uma linguagem também de marcação, a WML (Wireless Modeling Language), projetada para especificar interfaces para dispositivos móveis, levando em consideração o tamanho da tela e o mecanismo de paginação do dispositivo (AVELINO, 2004). Com o .NET Compact Framework (.NET CF) é possível o desenvolvimento de aplicações para dispositivos móveis, como Pockets e SmartPhones, usando linguagens como VB.NET, C# ou J# (NETTO, 2005), além da utilização de Web Services. O conceito do .NET Compact Framework será apresentado nas subseções seguintes. 2.3 Plataforma .NET Segundo Deitel, Deitel e Nieto (2004), a plataforma .NET permite uma independência de linguagem, plataforma e de dispositivo na implementação de software, possibilitando ao desenvolvedor, por exemplo, a escolha da linguagem de programação no momento da criação do aplicativo, bastando que a linguagem seja suportada pelo .NET. Para saber se a linguagem é compatível com o .NET existe uma especificação, conhecida como CLS (Common Language Specidication) (MSDN, 2003b), que define um conjunto de regras que as linguagens que implementam a .NET devem seguir. A plataforma .NET é executada sobre uma Commom Language Runtime (CLR), responsável pela execução do programa, que é capaz de executar mais de vinte linguagens diferentes de programação (Pascal, C++, Haskell, Java, Scheme, C#, VB, J#, etc.), interagindo entre si, possibilitando o desenvolvimento em multilinguagens (MSDN, 2003c). Por isso, em um mesmo projeto pode-se desenvolver cada módulo em uma linguagem diferente. Um dos principais elementos da plataforma .NET é o .NET Framework, que provê os serviços e componentes necessários para o desenvolvimento e execução de aplicações baseadas em .NET. A arquitetura do .NET Framework consiste de alguns componentes como: CLR e .NET Framework Class Library, como mostra a Figura 3 (MSDN, 2003b). 18 Figura 3 – Estrutura do .NET Framework Na Figura 3, são definidos os componentes do .NET Framework. Entre eles estão a CLR, que é um ambiente de execução, o qual dá suporte às linguagens habilitadas. Para que uma linguagem esteja habilitada ao .NET, seu compilador deve gerar o chamado código Microsoft Intermediate Language (MSIL), abreviado como Intermediate Language (IL) (MSDN, 2003c). Este é o código que será executado pela CLR, ou seja, as linguagens são compiladas para um código intermediário denominado IL que define as instruções para o CLR, depois disso o código IL será compilado para código de máquina, criando, assim, um aplicativo único. O motivo da compilação para um código intermediário deve-se a necessidade de portabilidade entre sistemas operacionais, a interoperabilidade entre as linguagens e os recursos de gerenciamento de execução, tornando os programas desenvolvidos no .NET independentes de plataforma. Assim, o código, uma vez escrito e compilado, pode ser executado em qualquer plataforma de sistema operacional (GALVIN, 2004). “A interoperabilidade de linguagens oferece vários benefícios às empresas de software. Os desenvolvedores de Visual Basic .NET e Visual C++ .NET podem trabalhar lado a lado no mesmo projeto sem ter que aprender uma outra linguagem de programação – todos os seus códigos são compilados em MSIL e ligados para formar um programa” (DEITEL, 2004). 19 Outro componente do .NET Framework é o .NET Class Library, que é uma coleção de classes e tipos integrada com o ambiente de execução (MSDN, 2003b). Para o desenvolvimento de aplicações para dispositivos móveis utilizando o .NET é possível utilizar um simples editor de texto, porém, para um desenvolvimento mais completo é recomendável um ambiente mais sofisticado, como o Visual Studio .NET, tema abordado na próxima seção. 2.3.1 Visual Studio .NET O Visual Studio .NET facilita o desenvolvimento de aplicações para dispositivos móveis, uma vez que permite que uma aplicação seja desenvolvida numa mesma ferramenta, sem a preocupação com o formato do aparelho a ser utilizado, bem como quais os recursos que o mesmo disponibilizará. Assim, a aplicação poderá ser desenvolvida e utilizada tanto por um PDA, como por um SmartPhone. Com o Visual Studio .NET podem-se criar páginas para Web, criar software para Windows, ou seja, programas que serão instalados e utilizados no computador, criar software para dispositivos móveis, utilizando as mesmas linguagens, como VB.NET, C# ou J#, ou o desenvolvimento em multilinguagens. Suporta, também, o desenvolvimento de Web Services, além de facilitar a atividade de testes da aplicação, através dos emuladores disponíveis, que será visto na seção a seguir. 2.3.1.1 Emuladores Para que seja possível a simulação de um dispositivo móvel, é necessário instalar um SDK (Software Development Kit) na ferramenta Visual Studio .NET, permitindo que sejam feitos testes durante o desenvolvimento de uma aplicação para dispositivos móveis. Um emulador de dispositivos móveis representará um dispositivo real com todos os recursos que o mesmo possui, de acordo com o tipo de aplicação que será desenvolvida, possibilitando, caso necessário, os ajustes no aplicativo. Assim, quando for necessário executar uma aplicação na 20 ferramenta de desenvolvimento, pode-se escolher se será executado no emulador, representado na Figura 4, ou em um dispositivo real que possui suporte à plataforma .NET Compact Framework, pois a ferramenta Visual Studio .NET disponibiliza essas opções. Figura 4 – Emulador A Figura 4 representa a tela principal do emulador do SmartPhone, que serve para simular a execução de uma aplicação, não sendo necessário um dispositivo real. 2.3.2 .NET Compact Framework Para suprir a necessidade de uma plataforma específica para dispositivos móveis, a Microsoft desenvolveu o .NET Compact Framework (.NET CF) (MSDN, 2003a). O .NET CF é uma versão simplificada do .NET Framework, com um conjunto específico de ferramentas, desenvolvido especialmente para a implementação de aplicações em dispositivos móveis. Já que o .NET CF é um subconjunto do .NET Framework, os desenvolvedores podem reutilizar grande parte da experiência e conhecimento adquiridos na implementação de aplicações desktop para o desenvolvimento de aplicações para dispositivos móveis. A arquitetura do .NET Compact Framework é demonstrada na Figura 5 (MSDN, 2003b). 21 Figura 5 - Arquitetura do .NET Compact Framework A Figura 5 ilustra os elementos do .NET CF. Por ser uma versão simplificada da .NET Framework, a .NET CF possui uma nova implementação da CLR, modificada para suportar a execução de aplicações em dispositivos móveis, isto é, com memória, processamento e bateria limitados. A biblioteca de classes (Class Library) do .NET CF possui menos da metade das classes da versão completa do . NET Framework. Porém, possui todas as classes básicas do .NET Framework, o que é suficiente para o desenvolvimento da maioria das aplicações (MSDN, 2003b), como, por exemplo, suporte à WinForms (formulários e controles), data binding (ligação de dados), networking (recursos de acesso à rede LAN/WAN e suas derivações Wireless) e acesso a dados. Um dos fatores que levaram a exclusão de algumas classes da biblioteca do .NET Framework na versão simplificada é que as aplicações que são computacionalmente difíceis de programar contradiz os objetivos do .NET CF: minimizar o processo de desenvolvimento de aplicações. Por essa razão, o .NET Compact Framework exclui funcionalidades como XML Path Language (XPath) e Extensible Stylesheet Language Transformations (XSLT) presentes na versão completa do .NET Framework (PEKUS, 2002). 22 O .NET CF possibilita, também, o desenvolvimento de aplicações em multilinguagens, ou seja, em uma mesma aplicação pode-se construir cada módulo em uma linguagem diferente, por exemplo: a classe de acesso a dados em C# e os módulos de interface em VB.NET possibilitando a integração de várias linguagens numa mesma plataforma (NETTO, 2005). As aplicações desenvolvidas com o .NET CF possuem algumas características como: • uma variedade expressiva de componentes visuais que são utilizados no desenvolvimento de aplicações como, por exemplo, botões, imagens, além de ser possível fazer uso de recursos de interface mais sofisticados, por exemplo, animações. • é possível desenvolver aplicações que possuem a opção de trabalhar off-line, ou seja, processam dados localmente sem a necessidade de uma conexão ativa. A plataforma .NET CF permite também o desenvolvimento de aplicações que utilizam à tecnologia de Web Services. A utilização de um Web Service será apresentada na próxima seção. 2.4 Utilização de Web Services Gumz (2005) resume o Web Service como um padrão de computação distribuída, na qual deve existir a criação, publicação, localização e acesso por sistemas remotos. A utilização de Web Services permite a comunicação de diferentes aplicações, podendo ser uma aplicação Web, uma aplicação Windows, ou de um dispositivo móvel, sendo que as informações podem ser compartilhadas e acessadas por essas aplicações, possibilitando consultas em tempo real aos dados. Assim, um Web Service pode ser desenvolvido na plataforma .NET e ser acessado por uma aplicação desenvolvida em outra plataforma, como a plataforma Java, e vice-versa. Assim, como os dispositivos móveis apresentam algumas limitações de recursos computacionais, a utilização do Web Service é um fator importante para o desenvolvimento das aplicações. Isto porque parte do processamento passa a ser função de servidores remotos, uma vez que o Web Service passa a ser o 23 responsável pela conexão entre a aplicação e os dados armazenados no banco de dados, além de proporcionar a consulta de outras aplicações aos dados disponibilizados por meio dos serviços do Web Service, conforme mostra a Figura 6. INTERNET WEB SERVICES XML BANCO DE DADOS CLIENTE Figura 6 – Ciclo de acesso ao Web Service A Figura 6 ilustra o ciclo de acesso ao Web Service, em que vários tipos de clientes conectados à Internet podem ter acesso a diversos tipos de Web Services, adequados para uso ou exibição no cliente que o solicitou, os quais podem estar ligados a um banco de dados. Para que a aplicação possa se comunicar com o Web Service, pode-se usar a WSDL (Web Services Description Language). Esta é uma linguagem baseada em XML (Extensive Markup Language) para a representação das funcionalidades de um Web Service (PEREZ, 2004). Essas funcionalidades podem ser definidas em arquivos do tipo ‘.asmx’ (Active Server Method Extension), que descrevem exatamente como as duas partes, provedor do Web Service e a aplicação que o utilizará, deverão se comunicar. As aplicações para dispositivos móveis funcionam como clientes para Web Service, isto é, consomem os serviços do Web Service, assim quando uma informação for solicitada por um cliente (aplicação), o Web Service retornará os dados apropriados. As funcionalidades de um Web Service são, resumidamente, fundamentadas na troca de dados e informações. Como ele é baseado no protocolo SOAP (Simple Object Access Protocol), utilizado para o transporte de dados e informações (SOAP, 2003), qualquer plataforma que interprete rotinas HTTP (Hyper Text Transfer Protocol) e manipule a linguagem XML pode utilizar 24 os dados dos Web Services sem qualquer problema (PEREZ, 2004). O protocolo SOAP proporciona ao Web Service uma independência de plataforma, linguagem e localização. Não importa a linguagem que a aplicação foi desenvolvida, nem a plataforma usada, assim como não importa onde o cliente está localizado, o Web Service tem a capacidade de estabelecer conexão e compartilhar dados entre sistemas diferentes, sem estarem ligados entre si. A seguir será apresentado um protótipo que servirá para exemplificar algumas das características apresentadas anteriormente, a fim de analisar o ambiente de desenvolvimento e o modelo de programação sugerido para este trabalho. Como ambiente de desenvolvimento do protótipo foi utilizado o Visual Studio .NET 2005, o .NET Compact Framework, Web Service e, para a visualização e realização dos testes, foi utilizado um emulador (SDK SmartPhone 2003), já instalado no Visual Studio. 2.5 Exemplificação da Integração das Tecnologias Como base para o desenvolvimento de uma aplicação para dispositivos móveis, foi usada a aplicação de nome “ContaFacil” de Tarifa (2004). A aplicação desenvolvida é responsável por realizar uma consulta dos valores do cardápio (menu) de um restaurante, o qual será apresentado na tela do emulador SmartPhone, utilizando Web Service. A Figura 7 mostra a tela da aplicação sendo desenvolvida. 25 Figura 7 – Tela de desenvolvimento do protótipo O protótipo foi criado a partir de um arquivo chamado ContaFacil.vb, que possui o código na linguagem VB.NET. No Visual Studio .NET, quando se inicia uma aplicação para dispositivos móveis, um menu já está acoplado ao formulário, como mostra a Figura 7, é necessário, apenas, definir as suas opções e implementar seus métodos. Para esta aplicação foi criada, no menu, a opção “Valores” que, quando selecionada, irá abrir outro formulário, onde serão apresentados os valores que contém no menu do restaurante, conforme parte dos códigos mostrados na Figura 8. Private Sub menuSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuSair.Click Me.Close() End Sub Private Sub menuValores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuValores.Click 'Instancia um objeto do tipo frmValor Dim frmNovo As New frmValor 'Chama o formulário instanciado frmNovo.ShowDialog() End Sub Figura 8 – Trecho do código do protótipo ContaFacil.vb 26 Na Figura 8, o método menuValores_Click é responsável por chamar um novo formulário, “frmValor”, que é o formulário final da aplicação. O método menuSair_Click é responsável pelo encerramento da execução. A seguir, após a seleção da opção “1 Valores” do menu na tela do emulador, conforme mostrado na Figura 7, o código existente no evento Load do formulário “frmValor” instancia a função de retorno dos dados requisitados, presente na aplicação do Web Service, conforme indicado na Figura 9. l Public Class frmValor Inherits System.Windows.Forms.Form Friend WithEvents lstProdutos As System.Windows.Forms.ListView Friend WithEvents colProdutos As System.Windows.Forms.ColumnHeader Friend WithEvents colValor As System.Windows.Forms.ColumnHeader Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu Private Sub lstProdutos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles lstProdutos.SelectedIndexChanged End Sub Private Sub frmValor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer 'Instancia WS como um objeto do tipo Produtos (do WebService) Dim WS As New Produtos.Produtos 'Declara um novo DataSet Dim ds As New DataSet 'Carrega o DataSet com o retorno da função ds = WS.RetornaProdutos lstProdutos.Items.Clear() For i = 1 To ds.Tables(0).Rows.Count - 1 Dim Item As New ListViewItem(ds.Tables(0).Rows(i).Item(1).ToString) Item.SubItems.Add(ds.Tables(0).Rows(i).Item(2).ToString) lstProdutos.Items.Add(Item) Next End Sub Figura 9 – Código de ligação entre a aplicação e o Web Service A partir da execução do evento Load, o resultado da função “RetornaProdutos” do Web Service, que será apresentado mais a frente, é apresentado no emulador, conforme mostra a Figura 10. 27 Figura 10 – Tela da execução da aplicação no emulador SmartPhone A Figura 10 mostra os valores que são retornados quando requisitados pela aplicação e que são a fonte de dados do Web Service, o código responsável pelo retorno dos dados do Web Service será apresentado na Figura 11. Imports System.Web Imports System.Data Imports System.Web.Services Imports System.Web.Services.Protocols <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class Produtos 'Declara a classe que implementa o Web Service e seus métodos Inherits System.Web.Services.WebService 'O método é acessado via Web devido à declaração do <WebMethod()> <WebMethod(Description:="Consumindo WS no SmartPhone")> _ Public Function RetornaProdutos() As DataSet 'Declara um objeto DataSet Dim ds As New DataSet 'Lê o arquivo XML criado ds.ReadXml(Server.MapPath("Produtos.xml")) 'Retorna o ds Return ds End Function End Class Figura 11 – Código do método de retorno dos dados do Web Service 28 A Figura 11 apresenta o arquivo “Produtos.asmx”, que contém o código do método que retorna os dados vindos do Web Service, “RetornaProdutos”, quando requisitados pela aplicação. A linguagem utilizada para o desenvolvimento do Web Service foi a XML (Extensive Markup Language). A fonte de dados do Web Service é um arquivo XML, chamado de Produtos.xml. O formato do arquivo XML utilizado será apresentado na Figura 12. <?xml version="1.0" encoding="utf-8" ?> <Produtos> <Produto> <Codigo>1</Codigo> <Nome>Lasanha</Nome> <Valor>20,00</Valor> </Produto> <Produto> <Codigo>2</Codigo> <Nome>Pizza</Nome> <Valor>15,00</Valor> </Produto> <Produto> <Codigo>3</Codigo> <Nome>Rodízio</Nome> <Valor>11,00</Valor> </Produto> <Produto> <Codigo>4</Codigo> <Nome>Sobremesa</Nome> <Valor>5,00</Valor> </Produto> </Produtos> Figura 12 – Arquivo XML A Figura 12 mostra o arquivo XML contendo os dados que serão apresentados quando requisitados pelo método do Web Service. A visualização do Web Service pode ser feita através do navegador da Internet (browser). A visualização do arquivo que representa as funcionalidades do Web Service é um arquivo do tipo “.asmx”, representado na Figura 13. 29 Figura 13 - Visualização do arquivo Produtos.asmx em um browser Na Figura 13 é possível notar a classe criada Produtos, que possui o método RetornaProdutos. A execução do método será visto na Figura 14. 30 Figura 14 – Resultado da execução do método RetornaProdutos A Figura 14 apresenta a execução do método que retorna os valores requisitados, obtidos a partir dos dados de um arquivo XML. 31 3. MATERIAIS E MÉTODOS Neste capítulo serão apresentados os detalhes referentes aos materiais e metodologia utilizados no processo de desenvolvimento deste trabalho. 3.1 Local e período O trabalho foi desenvolvido como requisito parcial da disciplina de Prática em Sistemas de Informação I, do curso de Sistemas de Informação do Centro Universitário Luterano de Palmas, no primeiro semestre de 2006 e foi desenvolvido no laboratório do Programa Gerador de Novos Referenciais Tecnológicos para a Região Norte - GENORTE. As atividades relacionadas a este trabalho tiveram início no mês de janeiro de 2006 e término em julho de 2006. 3.2 Material Os materiais utilizados podem ser divididos em três categorias: hardware, software e fontes bibliográficas. A primeira é constituída por um notebook com processador Intel inside Celeron M, com clock de 1.4 Ghz, 512 Mb de memória RAM e HD com 60 Gb, responsável pelo armazenamento dos dados, criação e execução da aplicação. Os softwares utilizados foram os seguintes: • Microsoft Wod 2003; • Microsoft SQL Server; • Microsoft .NET Framework 1.1; 32 • Microsoft .NET Framework SDK v2.0; • Microsoft Visual Studio 2005 Beta 2, para construção da aplicação para dispositivos móveis, para a criação do Web Service, além da execução de testes utilizando-se o emulador por ele provido; • Microsoft ActiveSync 4.0; • Adobe Acrobat Reader, para a leitura de referências bibliográficas. Todo material bibliográfico utilizado pode ser observado no capítulo 6 Referências Bibliográficas. 3.3 Metodologia A metodologia utilizada para o desenvolvimento da aplicação para dispositivos móveis iniciou-se com um estudo teórico sobre programação para dispositivos móveis, a plataforma .NET Compact Framework e a utilização de Web Services. Três etapas foram utilizadas para a finalização desse trabalho: a criação do banco de dados, a criação do Web Service e o desenvolvimento da aplicação para dispositivos móveis. O banco de dados para o armazenamento das informações foi criado no Microsoft SQL Server. Em seguida, foi criado o Web Service para o acesso aos dados armazenados no banco de dados. No Web Service foram criados métodos de consultas para verificar o resultado do vestibular do CEULP/ULBRA. Por fim, foi desenvolvida a aplicação para dispositivos móveis (SmartPhone), responsável por fazer o acesso ao Web Service que buscará os dados e os retornará para a aplicação, que, posteriormente, irá gerar o código resultante para ser visualizado no SmartPhone. 33 4. RESULTADOS E DISCUSSÕES O objetivo deste capítulo é apresentar alguns dos resultados obtidos com a prática da criação da aplicação .NET Compact Framework para dispositivos móveis a partir dos estudos realizados anteriormente. Dentre eles, a criação de Web Service, a criação da aplicação para SmartPhone, utilizando a ferramenta Visual Studio .NET, seus elementos e sua implementação, com o objetivo de demonstrar a integração destas tecnologias. A aplicação desenvolvida para este trabalho poderá enviar ou buscar informações utilizando os serviços de um Web Service, implementado utilizando a ferramenta Visual Studio.NET e a linguagem C#, o qual é o responsável por realizar a conexão entre o banco de dados e a aplicação, promovendo uma distribuição do processamento. Esta aplicação visa oferecer uma forma alternativa para que os alunos que tenham participado do vestibular do CEULP-ULBRA possam acessar o resultado através de um dispositivo móvel (SmartPhone). A arquitetura desta aplicação pode ser visualizada resumidamente na Figura 15. Figura 15 – Arquitetura da aplicação 34 Para o armazenamento dos dados será utilizado o SGBD SQL Server que se integra ao .NET Compact Framework (MICROSOFT, 2005). Para o acesso a esses dados será usado um Web Service, que será o centralizador da regra de consulta da aplicação. Para a interface com o usuário será criada uma aplicação que roda no próprio celular. Para isso, será usado um emulador do dispositivo móvel do tipo SmartPhone. 4.1 Banco de dados Para a organização dos dados referentes ao candidato, curso e o resultado foram utilizados quatro tabelas, com os campos necessários para a realização da consulta ao resultado do vestibular, armazenadas em um banco de dados SQL Server. O modelo de entidade relacionamento deste trabalho é apresentado na Figura 16. Figura 16 – Modelo entidade relacionamento A tabela tblCandidato é responsável pelo armazenamento das informações principais do candidato. A tabela tblCurso armazena as informações sobre os cursos representados pelos campos idCurso, 35 nomeCurso e periodo. Já a tabela tblResultado armazena informações referentes ao resultado do vestibular, através dos campos idResultado, idCandidato, nota, situacao. E, para o relacionamento entre as tabelas e tblCandidato tblCurso, foi criada a tabela auxiliar tblCandidato_Curso que utiliza-se como chaves estrangeiras os campos idCurso e idCandidato. O acesso a este banco de dados será realizado por um Web Service, o qual será apresentado na seção a seguir. 4.2 Criação do Web Service Para o desenvolvimento do Web Service foi criada uma aplicação ASP.NET Web Service, utilizando a linguagem C#, na qual foram criados os métodos da consulta da classe Service, conforme ilustrado no diagrama da Figura 17. Figura 17 – Classe e métodos do Web Service O cliente que irá consumir os serviços do Web Service, deverá acessá-lo através do caminho “http://localhost/WSSeguro/Service.asmx”, instalado na máquina de origem do desenvolvimento. O Web Service criado possui dois métodos de consulta: • consultarCursos: método que retorna todos os cursos cadastrados no banco de dados, informando apenas o idCurso. 36 • consultarPorNome: método que retorna os nomes dos candidatos aprovados ou suplentes do vestibular, onde a consulta é realizada através do nome passado como parâmetro. Os resultados apresentados retornam os valores do campo nomeCandidato da tabela tblCandidato em forma de uma lista, onde será detalhada e apresentará a situação (aprovado/suplente), retornando os valores do campo situacao da tabela tblResultado. • consultarPorNumero: método que retorna a nota, a situação (aprovado/reprovado) e a classificação dos candidatos, em que a consulta é realizada por meio do número de inscrição passado como parâmetro. A consulta retorna os valores dos campos nota e situacao da tabela tblResultado, além da sua classificação. O método consultarPorNome é apresentado na Figura 18. O outro método de consulta, consultarPorNumero, segue estrutura semelhante, alterando-se somente a string para a consulta, pois o objetivo desse método é que apenas os usuários que possuam o número de inscrição no vestibular possam fazer uso desta funcionalidade. Já o método consultarCursos, é responsável por preencher uma lista dos cursos presentes no formulário de consulta por nome. 37 1. [WebMethod(Description=”Retorna uma lista com os nomes dos candidatos, o curso e a sua situação (ap/sup))] 2. public DataSet consultarPorNome(string nomeCandidato, int idCurso){ 3. SqlConnection conn = new SqlConnection(STRING_DE_CONEXAO); 4. try 5. { 6. conn.Open(); 7. } 8. catch (SqlException ex) 9. { 10. throw new Exception("Ocorreu um erro ao abrir o banco de dados, a descrição do erro é" + ex.Message); 11. } 12. SqlCommand command = new SqlCommand("SELECT * from vwNome where nomeCandidato like '" + nomeCandidato + "%' and idCurso= " + idCurso, conn); 13. SqlDataAdapter adap = new SqlDataAdapter(command); 14. DataSet dataset = new DataSet(); 15. adap.Fill(dataset, "Candidato"); 16. return dataset; 17. } Figura 18 – WebMethod consultarPorNome A linha 1 especifica que o método trata-se de um WebMethod, cuja descrição está explicitada. A linha 3 cria o objeto do tipo SqlConnection para conexão com o banco de dados. A linha 6 abre a conexão com o banco. A linha 10 dispara uma exceção para a aplicação que está consumindo o Web Service. A linha 12 cria o objeto do tipo SqlCommand configurando a SELECT que será usada para retornar os dados do banco de dados criados por uma view. A linha 13 cria o objeto do tipo SqlDataAdapter que fará o preenchimento do DataSet. A linha 14 cria o DataSet para retorno dos dados. A linha 15 preenche o DataSet com os dados do candidato. E, por fim, a linha 16 retorna os dados para a aplicação consumidora. A execução do Web Service é feita através do navegador de Internet, a partir do arquivo Service.asmx, que representa as funcionalidades do Web Service. O resultado é demonstrado na Figura 19. 38 Figura 19 – Visualização do arquivo Service.asmx Na Figura 19, nota-se os métodos de consulta que foram criados, chamados consultarCursos, consultarPorNome e consultarPorNumero. É possível acessá-los clicando sobre o link do método. Após isso, uma nova janela é aberta onde irá requerer os valores passados como parâmetro para a execução do método. A Figura 20 irá demonstrar esta janela para inserção do valor para execução do método consultarPorNome. 39 Figura 20 – Janela para inserção do parâmetro do método consultarPorNome Após a inserção dos valores, pode-se invocar o método clicando no botão Invoke. O resultado da execução do método é retornado em XML, conforme apresentado na Figura 21. 40 Figura 21 – Resultado da execução do método consultarPorNome A Figura 21 consultarPorNome mostra para o a resultado qual da foram execução do método retornados os dados: nomeCandidato e situacao, do curso especificado através do código de identificação. Todos os métodos estão centralizados na classe Service.asmx, cujo código completo está disponível na seção de anexos. Visto o correto funcionamento do Web Service através do navegador de Internet, a próxima seção apresentará a criação da aplicação que irá ser executada no SmartPhone, assim como a sua conexão com o Web Service. 4.3 Desenvolvimento da aplicação para SmartPhone A aplicação desenvolvida para rodar no SmartPhone consiste em três formulários: o primeiro é o formulário inicial, frmInicial, ou seja, é a página principal que é responsável pela escolha da consulta. O formulário frmNome, é responsável por exibir os nomes dos candidatos aprovados e/ou suplentes e o nome do curso; e o 41 formulário frmNumero exibe a colocação do candidato, sua nota e sua situação (aprovado, reprovado ou suplente), dado seu número de inscrição. O frmInicial dispõe de um menu com as opções para a escolha do tipo de consulta que o usuário deseja realizar e outro que encerra a execução, conforme ilustrado na Figura 22. Figura 22 – Tela da página inicial da aplicação O menu “Opções” apresenta dois tipos de consulta (Nome ou Número) e, após a escolha de uma das opções pelo usuário, outro formulário é apresentado. A outra opção do menu refere-se a opção “Sair”, que tem a função de encerrar a execução. Assim, o código desse formulário é formado basicamente pela implementação das funções do menu. Após o usuário definir o tipo de consulta, é invocado o método do Web Service correspondente à solicitação, onde as informações são recuperadas do banco de dados. Por exemplo, se a consulta for pelo nome, o método executado será o consultarPorNome do Web Service, sendo que os dados retornados 42 são carregados no ListView, disposto no formulário frmNome. O método que implementa essa consulta é apresentado na Figura 23. 1. public frmNome() 2. { 3. InitializeComponent(); 4. objVestibular = new Vestibular.Service(); 5. DataSet ds = objVestibular.consultarCursos(); 6. cmbCurso.Items.Clear(); ... 8. private void menuConsultar_Click_1(object sender, EventArgs e) 9. { 10. DataSet ds = objVestibular.consultarPorNome(txtNome.Text, Convert.ToInt32(cmbCurso.SelectedValue)); 11. listView1.Items.Clear(); 12. for (int i = 0; (i <= (ds.Tables[0].Rows.Count - 1)); i++) 13. { 14. ListViewItem Item = new ListViewItem(ds.Tables[0].Rows[i].ItemArray[1].ToString()); 15. Item.SubItems.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString()); 16. listView1.Items.Add(Item); 17. } 18. } 19.} Figura 23 – Método de consulta por nome A linha 4 mostra a criação do objeto que irá receber o Web Service. Na linha 5, é executado o método do Web Service, consultarCursos. Na linha 10, é apresentado consultarPorNome, a execução passando do como método parâmetro do o Web valor do Service, campo nomeCandidato e a opção selecionada do curso, o resultado da execução é armazenado em um objeto. Entre as linhas 12 e 17, o método do Web Service é invocado e se o objeto contendo o resultado não for nulo, seus itens são adicionados no ListView com os dados correspondentes as colunas. Para o acesso ao Web Service foi criada uma variável chamada “Url”, na classe “Reference.cs”, que recebe o caminho do Web Service, conforme mostra a Figura 24. O código completo está disponível na seção de anexos, public Service() { this.Url = "http://localhost/WSSeguro/Service.asmx"; } Figura 24 – Código do caminho do Web Service 43 O resultado da consulta por nome é apresentado na tela do emulador, conforme mostra a Figura 25. Figura 25 – Tela do resultado da consulta por nome Após o desenvolvimento deste trabalho, incluindo a criação do banco de dados, a criação do Web Service e a própria aplicação para SmartPhone, bem como o embasamento teórico para o seu desenvolvimento, serão apresentadas no próximo capítulo as considerações finais obtidas a partir deste trabalho. 44 5. CONSIDERAÇÕES FINAIS A plataforma .NET oferece toda a tecnologia e as ferramentas necessárias para a construção, implementação e manutenção de aplicações para dispositivos móveis. A integração com o Visual Studio .NET garante aos desenvolvedores o uso de recursos de expansibilidade para se iniciar o desenvolvimento dessas aplicações, tais como templates, emuladores, controles, unificando todo o ambiente de desenvolvimento em uma única ferramenta. O Web Service surge como uma nova solução para a implementação de aplicações acessadas via Internet, possibilitando que aplicativos de qualquer tipo, que tenha acesso à Internet se conectem e interoperem entre si. A computação móvel torna-se viável não somente para o segmento empresarial, mas também para as pessoas de uma forma geral, permitindo acesso aos dados e informações a qualquer hora e em qualquer lugar. Isso facilita as tarefas particulares e é também uma oportunidade de melhora na gestão de negócios, além de se promover uma forma alternativa para o atendimento ao cliente, estabelecendo muitas opções de interatividade com o mesmo. A partir deste estudo, verificou-se a viabilidade de desenvolver uma aplicação para dispositivos móveis, em especial celulares (SmartPhones), os quais são bastante semelhante ao desenvolvimento de aplicações tradicionais para desktop, a partir de uma aplicação de armazenamento, busca e acesso a base de dados. Deve-se levar em consideração, no desenvolvimento da aplicação, a facilidade que o usuário deverá ter em utilizar essa aplicação, prevendo as ações tomadas pelo usuário, sempre criando formas de navegações simples e diretas, levando em consideração os espaços reduzidos da tela. 45 REFERÊNCIAS BIBLIOGRÁFICAS (AVELINO, 2004) AVELINO, Jones. Consumindo um WebService através de uma Aplicação ASP.NET para Dispositivos Móveis. 2004. Disponível em: <http://www.linhadecodigo.com.br> (BASIURA et al., 2003) BASIURA, Russ et al. Profissional ASP .NET Web Service. São Paulo: Pearson Education, 2003. (DEITEL E NIETO, 2004) DEITEL, H. M.; DEITEL, P. J.; NIETO, T. R.. Visual Basic .NET: como programar. Tradução Célia Yumi Okano Taniwaki. São Paulo: Pearson Education do Brasil, 2004. 1088 p. (FUOCO, 2005) FUOCO, Taís. Padrão para dispositivos móveis. UNICAMP, fevereiro de 2005. Disponível em: <http://www.cgi.unicamp.br>. (GALVIN, 2004), GALVIN, Deleon. Protótipo de sistema CRM para dispositivos móveis utilizando a tecnologia .NET. Trabalho de Conclusão de Curso (Bacharelado em Ciências da Computação), Universidade Regional de Blumenal, Blumenal, 2004. (GUIMARÃES, 2004) GUIMARÃES, Camila. As empresas detectam vantagens no celular que é também <http://www.netmarkt.com.br> computador. 2004. Disponível em: 46 (GUMZ, 2005) GUMZ, Rafael Araújo. Protótipo de um sistema gerador de interfaces gráficas para testes de Java Web Services. 2005. 98 f. Monografia de Pós-Graduação (Pós-Graduação em Desenvolvimento de Aplicações para WEB) - Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau, Blumenau. (MICROSOFT, 2005) Microsoft SQL Server. Outubro de 2005. Disponível em: <http://www.microsoft.com.br> (MIRANDA, 2004) MIRANDA, Luiz Henrique. Introdução ao mundo móvel. Maio de 2004. Disponível em: <http://www.devgoiania.NET> (MSDN, 2003) MSDN – Tecnologias: Mobilidade. Fevereiro, 2003a. ___________. .NET Framework. Fevereiro, 2003b. ___________. Microsoft .NET, apresentando C#. Novembro, 2003c. ___________. WAP: Arquitetura. Dezembro, 2003d. Disponível em: <http://www.msdn.com.br> (MUCHOW, 2004) MUCHOW, John W. Core J2ME: Tecnologia & MIDP. Tradução: João Eduardo N. Tortello. São Paulo: Pearson Makron Books, 2004. (NETTO, 2004) NETTO, Max Mosimann. Mobilidade e Dispositivos Móveis. 2004. Disponível em: <http://www.linhadecodigo.com.br> (NETTO, 2005) NETTO, Max Mosimann. Microsoft .NET Compact Framework Conheça a plataforma para dispositivos móveis criada pela Microsoft. Março de 2005. Disponível em: < http://www.imasters.com.br/ > 47 (PALM OS, 2005) Palm Software and Palm OS. Outubro de 2005. Disponível em: <http://www.palmsource.com> (PEKUS, 2002) PEKUS, Cons. e Desenvolvimento LTDA. Dispositivos Móveis. 2002. Disponível em: <http://www.pekus.com.br> (PEREZ, 2004) PEREZ, Rogério L. G.. Visão geral sobre WebServices. 2004. Disponível em: < http://www.imasters.com.br/ > (SYMBIAN, 2005) Symbian OS – the mobile operating system. Outubro de 2005. Disponível em: <http://www.symbian.com> (SOAP, 2003) SOAP Version 1.2 Part 0: Primer. Novembro de 2005. Disponível em: <http://www.w3.org/TR/SOAP> (SUN, 2005) Sun Microsystems. Outubro de 2005. Disponível em: <http://br.sun.com> (TARIFA, aplicações 2004) para TARIFA, Alexandre SmartPhones. Fernandes Novembro de Chaud. 2004. Desenvolvendo Disponível em: <http://www.codificando.net> (UNICAMP, 2005) Portal Unicamp. Outubro de 2005. Disponível em: <http://www.unicamp.br> 48 ANEXO A Código do Web Service criado – Service.asmx 49 <%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %> using using using using using using System; System.Web; System.Web.Services; System.Web.Services.Protocols; System.Data.SqlClient; System.Data; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { public const string STRING_DE_CONEXAO = "Server=KATIA;Database=smartphone;User ID=sa;Password=1234;Trusted_Connection=False"; public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public DataSet consultarPorNome(string nomeCandidato, int idCurso) { //cria o objeto do tipo SqlConnection para conexão com o banco de dados SqlConnection conn = new SqlConnection(STRING_DE_CONEXAO); try { //abre a conexão com o banco conn.Open(); } catch (SqlException ex) { //dispara uma exceção para a aplicação que está //consumindo o Web Service throw new Exception("Ocorreu um erro ao abrir o banco de dados, a descrição do erro é" + ex.Message); } //cria o objeto do tipo SqlCommand configurando a SELECT que será usada //para retornar os dados do banco de dados criados por uma view SqlCommand command = new SqlCommand("SELECT * from vwNome where nomeCandidato like '" + nomeCandidato + "%' and idCurso= " + idCurso, conn); //cria o objeto do tipo SqlDataAdapter que fará o preenchimento do DataSet SqlDataAdapter adap = new SqlDataAdapter(command); //cria o DataSet para retorno dos dados 50 DataSet dataset = new DataSet(); //preenche o DataSet com os dados do candidato adap.Fill(dataset, "Candidato"); //retorna os dados para a aplicação consumidora return dataset; } [WebMethod] public DataSet consultarPorNumero(string idCandidato) { //cria o objeto do tipo SqlConnection para conexão com o banco de dados SqlConnection conn = new SqlConnection(STRING_DE_CONEXAO); try { //abre a conexão com o banco conn.Open(); } catch (SqlException ex) { //dispara uma exceção para a aplicação que está //consumindo o Web Service throw new Exception("Ocorreu um erro ao abrir o banco de dados, a descrição do erro é" + ex.Message); } //cria o objeto do tipo SqlCommand configurando a SELECT que será usada //para retornar os dados do banco de dados SqlCommand command = new SqlCommand("SELECT * FROM [smartphone].[dbo].[fn_GetPosicao]("+idCandidato+") where idCandidato='" + idCandidato + "'", conn); //cria o objeto do tipo SqlDataAdapter que fará o preenchimento do DataSet SqlDataAdapter adap = new SqlDataAdapter(command); //cria o DataSet para retorno dos dados DataSet dataset = new DataSet(); //preenche o DataSet com os dados do candidato adap.Fill(dataset, "Candidato"); //retorna os dados para a aplicação consumidora return dataset; } [WebMethod] public DataSet consultarCursos() { //cria o objeto do tipo SqlConnection para conexão com o banco de dados SqlConnection conn = new SqlConnection(STRING_DE_CONEXAO); try { //abre a conexão com o banco 51 conn.Open(); } catch (SqlException ex) { //dispara uma exceção para a aplicação que está //consumindo o Web Service throw new Exception("Ocorreu um erro ao abrir o banco de dados, a descrição do erro é" + ex.Message); } //cria o objeto do tipo SqlCommand configurando a SELECT que será usada //para retornar os dados do banco de dados criados por uma view SqlCommand command = new SqlCommand("SELECT * from tblCurso order by nomeCurso", conn); //cria o objeto do tipo SqlDataAdapter que fará o preenchimento do DataSet SqlDataAdapter adap = new SqlDataAdapter(command); //cria o DataSet para retorno dos dados DataSet dataset = new DataSet(); //preenche o DataSet com os dados do candidato adap.Fill(dataset, "Curso"); //retorna os dados para a aplicação consumidora return dataset; } } 52 ANEXO B Código da aplicação SmartPhone com a plataforma .NET Compact Framework frmInicial, frmNome e frmNumero 53 frmInicial.cs: #region Using directives using using using using using System; System.Drawing; System.Collections; System.Windows.Forms; System.Data; #endregion namespace sPhone { /// <summary> /// Summary description for form. /// </summary> public class frmInicial : System.Windows.Forms.Form { private PictureBox pictureBox1; protected internal PictureBox pictureBox2; private MenuItem menuSair; private MenuItem menuItem2; private MenuItem menuNome; private MenuItem menuNumero; /// <summary> /// Main menu for the form. /// </summary> private System.Windows.Forms.MainMenu mainMenu1; public frmInicial() { InitializeComponent(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmInicial)); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.menuSair = new System.Windows.Forms.MenuItem(); this.menuItem2 = new System.Windows.Forms.MenuItem(); this.menuNome = new System.Windows.Forms.MenuItem(); this.menuNumero = new System.Windows.Forms.MenuItem(); 54 this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.pictureBox2 = new System.Windows.Forms.PictureBox(); // // mainMenu1 // this.mainMenu1.MenuItems.Add(this.menuSair); this.mainMenu1.MenuItems.Add(this.menuItem2); // // menuSair // this.menuSair.Text = "Sair"; this.menuSair.Click += new System.EventHandler(this.menuSair_Click); // // menuItem2 // this.menuItem2.MenuItems.Add(this.menuNome); this.menuItem2.MenuItems.Add(this.menuNumero); this.menuItem2.Text = "Opções"; // // menuNome // this.menuNome.Text = "Consulta Nome"; this.menuNome.Click += new System.EventHandler(this.menuNome_Click_1); // // menuNumero // this.menuNumero.Text = "Consulta Número"; this.menuNumero.Click += new System.EventHandler(this.menuNumero_Click_1); // // pictureBox1 // this.pictureBox1.Location = new System.Drawing.Point(0, 0); this.pictureBox1.Size = new System.Drawing.Size(100, 100); // // pictureBox2 // this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); this.pictureBox2.Location = new System.Drawing.Point(49, 42); this.pictureBox2.Size = new System.Drawing.Size(76, 78); // // frmInicial // this.ClientSize = new System.Drawing.Size(176, 180); this.Controls.Add(this.pictureBox2); this.Menu = this.mainMenu1; this.Text = "Resultado Vestibular"; } #endregion /// <summary> /// The main entry point for the application. /// </summary> static void Main() { 55 Application.Run(new frmInicial()); } private void menuSair_Click(object sender, EventArgs e) { this.Close(); } private void menuNome_Click_1(object sender, EventArgs e) { // Instancia um objeto do tipo frmNome frmNome frmNovo = new frmNome(); // Chama o formulário instanciado frmNovo.ShowDialog(); } private void menuNumero_Click_1(object sender, EventArgs e) { // Instancia um objeto do tipo frmNumero frmNumero frmNovo = new frmNumero(); // Chama o formulário instanciado frmNovo.ShowDialog(); } } } 56 frmNome.cs: #region Using directives using using using using using System; System.Drawing; System.Collections; System.Windows.Forms; System.Data; #endregion namespace sPhone { /// <summary> /// Summary description for Nome. /// </summary> public class frmNome : System.Windows.Forms.Form { private Label label1; private TextBox txtNome; private MenuItem menuVoltar; private MenuItem menuConsultar; private Vestibular.Service objVestibular; private Label label2; private ComboBox cmbCurso; private ListView listView1; /// <summary> /// Main menu for the form. /// </summary> private System.Windows.Forms.MainMenu mainMenu1; public frmNome() { InitializeComponent(); objVestibular = new Vestibular.Service(); DataSet ds = objVestibular.consultarCursos(); cmbCurso.Items.Clear(); for (int i = 0; (i <= (ds.Tables[0].Rows.Count - 1)); i++) { ListViewItem Item = new ListViewItem(ds.Tables[0].Rows[i].ItemArray[1].ToString()); Item.SubItems.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString()); cmbCurso.Items.Add(Item); } } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { base.Dispose(disposing); 57 } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.listView1 = new System.Windows.Forms.ListView(); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.menuVoltar = new System.Windows.Forms.MenuItem(); this.menuConsultar = new System.Windows.Forms.MenuItem(); this.label1 = new System.Windows.Forms.Label(); this.txtNome = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); this.cmbCurso = new System.Windows.Forms.ComboBox(); // // listView1 // this.listView1.Location = new System.Drawing.Point(0, 100); this.listView1.Size = new System.Drawing.Size(173, 79); // // mainMenu1 // this.mainMenu1.MenuItems.Add(this.menuVoltar); this.mainMenu1.MenuItems.Add(this.menuConsultar); // // menuVoltar // this.menuVoltar.Text = "Voltar"; this.menuVoltar.Click += new System.EventHandler(this.menuVoltar_Click_1); // // menuConsultar // this.menuConsultar.Text = "Consultar"; this.menuConsultar.Click += new System.EventHandler(this.menuConsultar_Click_1); // // label1 // this.label1.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); this.label1.Location = new System.Drawing.Point(0, 0); this.label1.Size = new System.Drawing.Size(54, 16); this.label1.Text = "Nome:"; // // txtNome // this.txtNome.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Regular); this.txtNome.Location = new System.Drawing.Point(0, 19); this.txtNome.Size = new System.Drawing.Size(173, 23); // // label2 // this.label2.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); 58 this.label2.Location = new System.Drawing.Point(0, 47); this.label2.Size = new System.Drawing.Size(173, 21); this.label2.Text = "Selecione o Curso:"; this.label2.ParentChanged += new System.EventHandler(this.label2_ParentChanged); // // cmbCurso // this.cmbCurso.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Regular); this.cmbCurso.Location = new System.Drawing.Point(0, 71); this.cmbCurso.Size = new System.Drawing.Size(173, 23); this.cmbCurso.SelectedIndexChanged += new System.EventHandler(this.cmbCurso_SelectedIndexChanged); // // frmNome // this.ClientSize = new System.Drawing.Size(176, 180); this.Controls.Add(this.label1); this.Controls.Add(this.txtNome); this.Controls.Add(this.label2); this.Controls.Add(this.cmbCurso); this.Controls.Add(this.listView1); this.Menu = this.mainMenu1; this.Text = "Consulta Nome"; } #endregion private void menuConsultar_Click_1(object sender, EventArgs e) { DataSet ds = objVestibular.consultarPorNome(txtNome.Text, Convert.ToInt32(cmbCurso.SelectedValue)); listView1.Items.Clear(); for (int i = 0; (i <= (ds.Tables[0].Rows.Count - 1)); i++) { ListViewItem Item = new ListViewItem(ds.Tables[0].Rows[i].ItemArray[1].ToString()); Item.SubItems.Add(ds.Tables[0].Rows[i].ItemArray[2].ToString()); listView1.Items.Add(Item); } } private void menuVoltar_Click_1(object sender, EventArgs e) { // Instancia um objeto do tipo frmInicial frmInicial frmNovo = new frmInicial(); // Chama o formulário instanciado frmNovo.ShowDialog(); } } } 59 frmNumero.cs: #region Using directives using using using using using System; System.Drawing; System.Collections; System.Windows.Forms; System.Data; #endregion namespace sPhone { /// <summary> /// Summary description for frmNumero. /// </summary> public class frmNumero : System.Windows.Forms.Form { private MenuItem menuVoltar; private MenuItem menuConsultar; private TextBox txtNumero; private Label label1; private Label label2; private TextBox txtSituacao; private Label label3; private Label label4; private TextBox txtNota; private TextBox txtClassificacao; private Vestibular.Service objVestibular; /// <summary> /// Main menu for the form. /// </summary> private System.Windows.Forms.MainMenu mainMenu1; public frmNumero() { InitializeComponent(); objVestibular = new Vestibular.Service(); } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.mainMenu1 = new System.Windows.Forms.MainMenu(); 60 this.menuVoltar = new System.Windows.Forms.MenuItem(); this.menuConsultar = new System.Windows.Forms.MenuItem(); this.txtNumero = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.txtSituacao = new System.Windows.Forms.TextBox(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.txtNota = new System.Windows.Forms.TextBox(); this.txtClassificacao = new System.Windows.Forms.TextBox(); // // mainMenu1 // this.mainMenu1.MenuItems.Add(this.menuVoltar); this.mainMenu1.MenuItems.Add(this.menuConsultar); // // menuVoltar // this.menuVoltar.Text = "Voltar"; this.menuVoltar.Click += new System.EventHandler(this.menuVoltar_Click); // // menuConsultar // this.menuConsultar.Text = "Consultar"; this.menuConsultar.Click += new System.EventHandler(this.menuConsultar_Click); // // txtNumero // this.txtNumero.Location = new System.Drawing.Point(3, 25); this.txtNumero.Size = new System.Drawing.Size(170, 24); // // label1 // this.label1.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); this.label1.Location = new System.Drawing.Point(3, 0); this.label1.Size = new System.Drawing.Size(73, 22); this.label1.Text = "Número:"; // // label2 // this.label2.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); this.label2.Location = new System.Drawing.Point(4, 56); this.label2.Size = new System.Drawing.Size(62, 22); this.label2.Text = "Situação:"; // // txtSituacao // this.txtSituacao.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Regular); this.txtSituacao.Location = new System.Drawing.Point(107, 53); this.txtSituacao.Size = new System.Drawing.Size(66, 23); // // label3 // 61 this.label3.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); this.label3.Location = new System.Drawing.Point(3, 85); this.label3.Size = new System.Drawing.Size(63, 17); this.label3.Text = "Nota:"; // // label4 // this.label4.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Bold); this.label4.Location = new System.Drawing.Point(3, 115); this.label4.Size = new System.Drawing.Size(87, 17); this.label4.Text = "Classificação:"; // // txtNota // this.txtNota.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Regular); this.txtNota.Location = new System.Drawing.Point(107, 85); this.txtNota.Size = new System.Drawing.Size(66, 23); // // txtClassificacao // this.txtClassificacao.Font = new System.Drawing.Font("Nina", 10F, System.Drawing.FontStyle.Regular); this.txtClassificacao.Location = new System.Drawing.Point(107, 116); this.txtClassificacao.Size = new System.Drawing.Size(66, 23); // // frmNumero // this.ClientSize = new System.Drawing.Size(176, 180); this.Controls.Add(this.label1); this.Controls.Add(this.txtNumero); this.Controls.Add(this.label2); this.Controls.Add(this.txtSituacao); this.Controls.Add(this.label3); this.Controls.Add(this.label4); this.Controls.Add(this.txtNota); this.Controls.Add(this.txtClassificacao); this.Menu = this.mainMenu1; this.Text = "Consulta Número"; } #endregion private void menuVoltar_Click(object sender, EventArgs e) { // Instancia um objeto do tipo frmInicial frmInicial frmNovo = new frmInicial(); // Chama o formulário instanciado frmNovo.ShowDialog(); } private void menuConsultar_Click(object sender, EventArgs e) { DataSet ds = objVestibular.consultarPorNumero(txtNumero.Text); 62 for (int i = 0; (i <= (ds.Tables[0].Rows.Count - 1)); i++) { txtNota.Text = ds.Tables[0].Rows[i].ItemArray[1]; txtSituacao.Text=ds.Tables[0].Rows[i].ItemArray[2]; txtClassificacao.Text = ds.Tables[0].Rows[i].ItemArray[3]; } } } } 63 ANEXO C Classe gerada para referenciar o Web Service com a aplicação Reference.cs 64 Reference.cs: //----------------------------------------------------------------------------// <auto-generated> // This code was generated by a tool. // Runtime Version:2.0.50727.42 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //----------------------------------------------------------------------------// // This source code was auto-generated by Microsoft.CompactFramework.Design.Data, Version 2.0.50727.42. // namespace sPhone.Vestibular { using System.Diagnostics; using System.Web.Services; using System.ComponentModel; using System.Web.Services.Protocols; using System; using System.Xml.Serialization; using System.Data; /// <remarks/> [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="ServiceSoap", Namespace="http://tempuri.org/")] public class Service : System.Web.Services.Protocols.SoapHttpClientProtocol { /// <remarks/> public Service() { this.Url = "http://localhost/WSSeguro/Service.asmx"; } /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempur i.org/consultarPorNome", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public System.Data.DataSet consultarPorNome(string nomeCandidato, int idCurso) { object[] results = this.Invoke("consultarPorNome", new object[] { nomeCandidato, idCurso}); return ((System.Data.DataSet)(results[0])); } 65 /// <remarks/> public System.IAsyncResult BeginconsultarPorNome(string nomeCandidato, int idCurso, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("consultarPorNome", new object[] { nomeCandidato, idCurso}, callback, asyncState); } /// <remarks/> public System.Data.DataSet EndconsultarPorNome(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((System.Data.DataSet)(results[0])); } /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempur i.org/consultarPorNumero", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public System.Data.DataSet consultarPorNumero(string idCandidato) { object[] results = this.Invoke("consultarPorNumero", new object[] { idCandidato}); return ((System.Data.DataSet)(results[0])); } /// <remarks/> public System.IAsyncResult BeginconsultarPorNumero(string idCandidato, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("consultarPorNumero", new object[] { idCandidato}, callback, asyncState); } /// <remarks/> public System.Data.DataSet EndconsultarPorNumero(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((System.Data.DataSet)(results[0])); } /// <remarks/> [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempur i.org/consultarCursos", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public System.Data.DataSet consultarCursos() { object[] results = this.Invoke("consultarCursos", new object[0]); return ((System.Data.DataSet)(results[0])); } /// <remarks/> 66 public System.IAsyncResult BeginconsultarCursos(System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("consultarCursos", new object[0], callback, asyncState); } /// <remarks/> public System.Data.DataSet EndconsultarCursos(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult); return ((System.Data.DataSet)(results[0])); } } }