Desenvolvimento - Web Services

Desenvolvendo Aplicações Chrome com integração via WebServices usando Apache AXIS ou Webservices .NET

Este é o terceiro da série de quatro artigos que são resultado de um trabalho de faculdade realizado no ano passado, nossa abordagem neste artigo será a criação de um cliente .NET escrito usando a linguagem Chrome que pode consumir webservices escritos em Apache Axis ou .NET.

por Rogério Pereira Araújo



Este é o último da série de 4 artigos que são resultado de um trabalho de faculdade realizado no ano passado, nossa abordagem neste artigo será a criação de um cliente .NET escrito usando a linguagem Chrome que pode consumir webservices escritos em Apache Axis ou .NET.

Aqui estaremos abordando a codificação, o empacotamento e o instalação do cliente em .NET. Usaremos o webservice criado segundo artigo da série.

Prerequisitos:

  • Notepad

Instalando o RemObjects Chrome:

Execute o arquivo .exe que você baixou e instale em uma pasta de sua escolha.

Dentro do arquivo machine.config adicione a seguinte linha dentro da tag <compiler><compilers> </compilers></compiler>:

<compiler language="chrome" extension=".pas" warningLevel="1" compilerOptions="" type="RemObjects.Chrome.CodeDom.ChromeCodeProvider, RemObjects.Chrome.CodeModel, Version=1.5.0.213, Culture=neutral, PublicKeyToken=3df3cad1b7aa5098" />

Gerando as classes de conexão com o WebService:

Usando a ferramenta de linha de comando wsdl.exe digite:

wsdl.exe -language:"RemObjects.Chrome.CodeDom.ChromeCodeProvider, RemObjects.Chrome.CodeModel, Version=1.5.1.241, Culture=neutral, PublicKeyToken=3df3cad1b7aa5098" http://localhost:8080/doacao/services/DoarService?wsdl

Será gerado o arquivo DoacaoService.pas que será utilizado posteriormente para acessar o webservice em Apache AXIS ou .NET no servidor a partir da aplicação que vamos criar.

Desenvolvendo a aplicação Windows Forms:

Vamos agora criar a classe principal da aplicação escrita em Chrome, ela será herdada de Form, que é a classe responsável por criar janelas no .NET, vamos chamar esta classe de DoacaoPrincipal, veja o código abaixo:

namespace Doacao;

interface

uses
  System, System.Collections, System.Drawing, System.Globalization, System.IO,
  System.Windows.Forms;

type
  DoacaoPrincipal = public class(Form)
    public
      constructor;
      class method Main;
    private
      btnDoar        : Button;
      lblLogin       : Label;
      lblSenha       : Label;
      lblProduto     : Label;
      lblQuantidade  : Label;
      txtLogin       : TextBox;
      txtSenha       : TextBox;
      txtProduto     : TextBox;
      txtQuantidade  : TextBox;
      method btnDoar_Click(sender: System.Object; e: System.EventArgs);
      method InitializeComponent;
  end;

implementation

  [STAThread]
  class method DoacaoPrincipal.Main;
  begin
      Application.Run(new DoacaoPrincipal());
  end;

  constructor DoacaoPrincipal;
  begin
    InitializeComponent();
  end;

  method DoacaoPrincipal.InitializeComponent;
  begin
    BackColor := Color.LightGray;
    Width     := 300;
    Height    := 200;
    Text      := "doacao";

    lblLogin              := new Label();
    lblLogin.Top          := 10;
    lblLogin.BackColor    := Color.LightGray;
    lblLogin.ForeColor    := Color.Black;
    lblLogin.Left         := 5;
    lblLogin.Text         := "Login";
    lblLogin.Height       := 15;
    lblLogin.Width        := 43;
    lblLogin.Font         := new Font(FontFamily.GenericMonospace, 10);
    Controls.Add(lblLogin);

    txtLogin              := new TextBox();
    txtLogin.Top          := 10;
    txtLogin.BorderStyle  := BorderStyle.Fixed3D;
    txtLogin.ForeColor    := Color.Black;
    txtLogin.BackColor    := Color.White;
    txtLogin.Left         := 85;
    txtLogin.Text         := "";
    txtLogin.Height       := 5;
    txtLogin.Width        := 125;
    txtLogin.Font         := new Font(FontFamily.GenericMonospace, 11);
    Controls.Add(txtLogin);

    lblSenha              := new Label();
    lblSenha.Top          := 40;
    lblSenha.BackColor    := Color.LightGray;
    lblSenha.ForeColor    := Color.Black;
    lblSenha.Left         := 5;
    lblSenha.Text         := "Senha";
    lblSenha.Height       := 15;
    lblSenha.Width        := 43;
    lblSenha.Font         := new Font(FontFamily.GenericMonospace, 10);
    Controls.Add(lblSenha);

    txtSenha              := new TextBox();
    txtSenha.Top          := 40;
    txtSenha.BorderStyle  := BorderStyle.Fixed3D;
    txtSenha.ForeColor    := Color.Black;
    txtSenha.BackColor    := Color.White;
    txtSenha.Left         := 85;
    txtSenha.Text         := "";
    txtSenha.Height       := 5;
    txtSenha.Font         := new Font(FontFamily.GenericMonospace, 11);
    Controls.Add(txtSenha);

    lblProduto            := new Label();
    lblProduto.Top        := 70;
    lblProduto.BackColor  := Color.LightGray;
    lblProduto.ForeColor  := Color.Black;
    lblProduto.Left       := 5;
    lblProduto.Text       := "Produto";
    lblProduto.Height     := 15;
    lblProduto.Width      := 63;
    lblProduto.Font       := new Font(FontFamily.GenericMonospace, 10);
    Controls.Add(lblProduto);

    txtProduto            := new TextBox();
    txtProduto.Top        := 70;
    txtProduto.BorderStyle:= BorderStyle.Fixed3D;
    txtProduto.ForeColor  := Color.Black;
    txtProduto.BackColor  := Color.White;
    txtProduto.Left       := 85;
    txtProduto.Text       := "";
    txtProduto.Height     := 5;
    txtProduto.Width      := 200;
    txtProduto.Font       := new Font(FontFamily.GenericMonospace, 11);
    Controls.Add(txtProduto);

    lblQuantidade             := new Label();
    lblQuantidade.Top         := 100;
    lblQuantidade.BackColor   := Color.LightGray;
    lblQuantidade.ForeColor   := Color.Black;
    lblQuantidade.Left        := 5;
    lblQuantidade.Text        := "Quantidade";
    lblQuantidade.Height      := 15;
    lblQuantidade.Width       := 76;
    lblQuantidade.Font        := new Font(FontFamily.GenericMonospace, 10);
    Controls.Add(lblQuantidade);

    txtQuantidade             := new TextBox();
    txtQuantidade.Top         := 100;
    txtQuantidade.BorderStyle := BorderStyle.Fixed3D;
    txtQuantidade.ForeColor   := Color.Black;
    txtQuantidade.BackColor   := Color.White;
    txtQuantidade.Left        := 85;
    txtQuantidade.Text        := "";
    txtQuantidade.Height      := 5;
    txtQuantidade.Width       := 50;
    txtQuantidade.Font        := new Font(FontFamily.GenericMonospace, 11);
    Controls.Add(txtQuantidade);

    btnDoar               := new Button();
    btnDoar.Top           := 170;
    btnDoar.Left          := Width - (btnDoar.Width + 6);
    btnDoar.Text          := "Doar";
    btnDoar.ForeColor     := Color.Black;
    btnDoar.Font          := new Font(FontFamily.GenericMonospace, 10);
    btnDoar.Click         += new EventHandler(@self.btnDoar_Click);
    Controls.Add(btnDoar);

    //Center the form
    self.StartPosition := FormStartPosition.CenterScreen;
  end;

  method DoacaoPrincipal.btnDoar_Click(sender: System.Object; e: System.EventArgs);
  var
    doacao: Doacao;
  begin
    doacao            := new Doacao;
    doacao.login      := txtLogin.Text;
    doacao.senha      := txtSenha.Text;
    doacao.produto    := txtProduto.Text;
    doacao.quantidade := Convert.ToInt32(txtQuantidade.Text);
    new DoarServiceService().doar(doacao);
  end;
end. 

Compilando a aplicação

Para compilar digite:

Chome.exe doacao.pas DoarServiceService.pas /ref:/usr/lib/mono/1.0/System.Windows.Forms.dll
/ref:/usr/lib/mono/1.0/System.Drawing.dll /ref:/usr/lib/mono/1.0/System.dll
/ref:/usr/lib/mono/1.0/System.Web.Services.dll /ref:/usr/lib/mono/1.0/System.Xml.dll

Distribuindo a aplicação

Para distribuir a aplicação basta pegar o arquivo doacao.exe e colocar na pasta desejada no seu desktop ou computador portátil com o .NET Compact Framework instalado, neste segundo caso você tem que compilar os fontes usando as assemblies próprias para Windows CE.

Conclusão

Com o Chrome você pode escrever aplicações .NET para rodar no desktop ou no seu dispositivo móvel que também podem acessar webservices .NET tornado-se em uma verdadeira opção para programação usando o Object Pascal.

Rogério Pereira Araújo

Rogério Pereira Araújo - Consultor de Informática da Druid Internet Systems, desenvolvedor de soluções em busca corporativa, mobilidade e gestão de negócios, possui experiência em diversas tecnologias como Python, Bash, SQL, Perl, Java (JSF, J2ME, EJB), .NET (ASP.NET, Compact Framework), PHP, XML (SOAP e XQuery) e Delphi. Colaborador da revista webmobile e de vídeo-aulas para a JavaMagazine.
http://faces.eti.br