Preview only show first 10 pages with watermark. For full document please download

Visual Foxpro - Produzindo Xml Web Services

Manipulando XML via VFP.

   EMBED


Share

Transcript

iMasters - Por uma Internet mais criativa e dinâmica Página 1 Nilton Paulino Segunda-feira, 05 de janeiro de 2004 Produzindo XML Web Services Oi Pessoal! Estamos de volta com mais uma edição dessa coluna! Espero que todos estejam gostando. Estivemos afastados neste final de ano por causa das comemorações mas estamos de volta! Foram muitas festas, confraternização entre os amigos e familiares. Quero desejar a todos um ótimo 2004. Que seja um ano cheio de realizações em todas as áreas. Festas à parte, vamos ao que realmente interessa... como prometi na coluna passada, estaremos mostrando como produzir XML Web Services a partir do Visual FoxPro. Produzindo XML Web Services Se você já trabalha com programação orientada a objetos (OOP) não terá dificuldades em assimilar os conceitos utilizados na criação de classes de componentes para Web Services. Se você já programou componentes para serem executados no COM+ ou MTS terá então tudo nas mãos. Um XML Web Service é um componente de uma classe pública (OLEPUBLIC) do Visual FoxPro rodando sob o SOAP Server (para maiores detalhes consulte http:// msdn.microsoft.com/soap/) e naturalmente também poderá (e até recomenda-se que seja) ser adicionada ao COM+ para melhor gerenciamento das Threads do componente pelo sistema operacional. A produção de um XML Web Service se dá em duas etapas: 1) a construção do componente COM; b) publicação do componente COM como XML Web Service. Criando o Componente COM Como a primeira etapa da criação do XML Web Service consiste em criar o componente, é isso que vamos fazer. O componente COM deverá ser compilado como uma MTDLL (Multi-threaded DLL). Logo mais adiante veremos como compilar o componente com esta opção. Para início, vamos criar um novo projeto e chamá-lo de consulta_ws. A este novo projeto vamos adicionar um novo PRG e chamá-lo de main.prg (poderia ser qualquer outro nome). Veja como ficará o projeto na figura 1 logo a seguir. Figura 1 - Janela do Projetct Manager O conteúdo do nosso programa main.prg será o exibido na listagem a seguir. Logo abaixo da listagem, estaremos comentando os pontos importantes. Listagem 1 - Código da Classe CPF, utilizada para consulta à situação cadastral de pessoa física do nosso exemplo. http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ Página 2 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ Página 3 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 4 O código acima é todo o código necessário para o funcionamento do nosso Web Service conforme visto na coluna anterior. Para o funcionamento do código acima precisamos criar um banco de dados com duas tabelas, conforme figura a seguir. http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 5 Figura 2 - Estrutura de dados do projeto O banco de dados deve se chamar db.dbc. As tabelas são cliente e ocorrência e suas estruturas são exibidas a seguir. Tabela: Cliente Campo Tipo Tamanho id_cliente Character 4 nome Character 40 cpf Character 14 Tabela: Ocorrencias Campo Tipo Tamanho id_ocorrencia Character 6 id_cliente Character 4 fornecedor Character 40 tipodoc Character 10 dataocorrencia Date 8 valor Numeric 7,2 numdoc Character 10 Conforme pôde ser visto na figura 2, há também uma Stored Procedure no banco de dados. Para não nos prolongarmos muito quanto ao banco de dados e nos centrarmos nos procedimentos da produção e publicação do Web Service, o código do projeto estará disponível no final da coluna para download. Detalhes da Classe COM O código da Listagem 1 inicia-se com o comando http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 6 DEFINE CLASS cpf AS Session OLEPUBLIC e termina com ENDDEFINE Essa é a definição da classe CPF. Nesse exemplo preferi por utilizar uma classe base do tipo Session uma vez que é uma classe bem leve e não apresentará outros métodos ou propriedades no IntelliSense. A inclusão de OLEPUBLIC transforma nossa classe em um servidor COM, primeira exigência para o publicação de um XML Web Service. A partir das observações acima todo o restante do código concentra-se na manipulação dos dados e na geração do XML para transferir para o cliente. Lembre-se de alterar as configurações do evento Init para a estrutura de pastas que você utilizar no seu computador, caso contrário mensagens de erro aparecerão quando da tentativa de instanciar o Web Service. Os métodos codificados em nosso componente COM são: . . . . . Consulta IncluiOcorrencia NegativaOcorrencia IncluiCliente ListarClientes Estes métodos possuem parâmetros tipados e também o tipo de dado tipado. Para seguir as especificações do SOAP, você deve sempre definir os tipos dos parâmetros e do retorno para facilitar a integração com outras ferramentas de desenvolvimento. Muito bem, agora que já temos o banco de dados pronto, o código escrito o que nos falta é apenas compilar nosso componente como uma MTDLL (Multi-threaded DLL). Compilando o componente COM Para compilar o projeto como uma MTDLL é simples, uma vez que o mesmo já possui uma declaração de classe OLEPUBLIC. Basta clicar no botão Build conforme figura 3 e em seguida escolher o tipo de DLL Multi-threaded COM Server (dll) de acordo com a figura 4. Figura 3 - Acionando a compilação do projeto Figura 4 - selecionando o tipo de aplicativo a ser criado Ao clicar em OK, escolha o local para gravar a DLL que será gerada. Nota: Na máquina do desenvolvedor a DLL é registrada automaticamente após a compilação, o que não ocorre na máquina que for executar o Web Service em tempo de produção. Nesta última há a necessidade de registro da DLL com regsvr32 ou através do COM+ (mais recomendado). http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 7 Pronto! DLL criada e fase de codificação da classe COM terminada. Como a DLL criada é um servidor COM, ela já está registrada na máquina do desenvolvedor com o ProdID Consulta_ws.cpf (o nome do ProgID é sempre formado pelo nome do projeto mais o nome da classe OLEPUBLIC principal do projeto) e já pode ser instanciada com este nome. Caso você deseje testar a funcionalidade da classe antes de publicá-la como XML Web Service faça como na figura 5 para instanciar o objeto. Testando o Componente COM antes de publicá-lo Figura 5 - Instanciando a classe gerada para testá-la É sempre bom fazer o maior número de testes possíveis antes da publicação do Web Service, sendo assim, caso seja necessário recompilar a DLL não haverá problema algum. Quando você publica o Componente (DLL) como Web Service e faz qualquer alteração na estrutura da classe como por exemplo a inclusão, remoção ou alteração de um método ou de seus parâmetros, você precisa fazer uma nova publicação do componente. Não há nada de errado em publicá-lo novamente, mas você poupará um bocado de trabalho de fizer os testes antes de publicá-lo. Publicando o Componente COM como WSDL Após finalizados os testes e tudo estiver OK, então é hora de partirmos para a publicação do nosso componente COM como XML Web Service gerando então o WSDL que descreverá sua estrutura e tipo de dados. A geração do WSDL pode ser realizada por no mínimo duas formas diferentes, no entanto, vamos fazê-la através do WSDL Generator que vem junto com o SOAP Toolkit 3. Por que não fazer com o XML Web Service Builder do VFP? Poderíamos fazê-lo sem problemas, mas temos que lembrar que na máquina do cliente onde o nosso Web Service irá executar na prática não existirá o VFP instalado. Nota: Se você ainda não possui o SOAP Toolkit 3 instalado, deverá fazê-lo antes de prosseguir. Você poderá baixá-lo a partir de http://msdn.microsoft.com/soap/. Vamos então à publicação do nosso componente como Web Service nas seguintes etapas: Procure o grupo de programas Microsoft SOAP Toolkit Version 3 e clique no icone do WSDL Generator. Aparecerá a janela exibida na figura 6: Figura 6 Clique no botão Next e na etapa seguinte você também poderá clicar em Next, uma vez que você não publicou seu componente nenhuma vez e ainda não possui nenhum arquivo de configuração gravado. Caso contrário, poderia especificar o arquivo de configuração e os dados das etapas seguintes já estariam preenchidos automaticamente. Passadas essas etapas, virá a etapa que você deverá informar o nome do XML Web Service e qual o componente COM será utilizado conforme figura 7: http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 8 Figura 7 Nota: Em se tratando da máquina do cliente, não se esqueça de registrar o componente primeiramente com regsvr32 ou no COM+, caso contrário uma mensagem de erro será retornada informando que o componente não possui métodos. Após preenchidas as informações, clique em Next. Na etapa seguinte você deve selecionar quais são os métodos do Web Service estarão disponíveis para acesso. Em nosso caso, todos estarão. Confira: Figura 8 Clique em Next. A próxima etapa é muito importante e você deve tomar o cuidado de preencher corretamente o endereço do Listener URI. Caso este endereço fique errado o funcionamento remoto do Web Service estará comprometido. É importante também que uma pasta virtual seja criada no IIS (no meu caso criei uma chamada CPF, dentro do site http://foxweb.foxtotal.com.br/) apontando para o local onde os arquivos .wsdl/wsml serão criados. Essa pasta necessariamente não precisa ser a pasta onde o componente COM está, mas nada o impede que seja também. Figura 9 http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM iMasters - Por uma Internet mais criativa e dinâmica Página 9 Outra coisa importante a se observar é que o Listener type pode ser ASP ou ISAPI. Mas fica uma dica: no Windows XP se você escolher ISAPI não irá funcionar. Não há nenhuma explicação plausível, mas não funciona. Clique em Next. Na etapa seguinte não precisa fazer nada. Apenas clique mais uma vez em Next. Nesta etapa você escolhe o tipo de codificação para o arquivo WSDL e também o local onde os WSDL/WSML serão gravados. Deve ser o path físico no disco da pasta virtual informada na figura 9. Figura 10 Preenchidas as informações do diálogo acima clique em Next. Pronto! Chegamos ao final da publicação do nosso XML Web Service. Agora é só correr pro abraço, comemorar e usar! Clique em Finish. Conclusão Como você deve ter percebido, é relativamente simples a produção e publicação de XML Web Services. O que você tem a fazer agora é aproveitar todo o potencial desta maravilhosa tecnologia e sair na frente expandindo os horizontes para suas aplicações. Até a próxima semana! Faça download do projeto clicando aqui. http://imasters.uol.com.br/artigo/1654/xml/produzindo_xml_web_services/imprimir/ 9/28/2010 8:39:12 AM