Página 1 de 2

PIC WebService

MensagemEnviado: 09 Out 2008 09:29
por Jorge_Francisco
Alguém aqui sabe se é possível consumir um WebService com um PIC? Supondo que use a pilha TCP/IP da microchip.

Acho que o caminho seria fazer parser do XML, mas um PIC aguentaria o tranco?

MensagemEnviado: 09 Out 2008 09:53
por fabim
PIC24 a 40 mips.
ou DsPIC a 40 mips..

ou PIC32 a 122mips ?

depende do que exatamente você esta falando ?

Fabim

MensagemEnviado: 09 Out 2008 10:05
por Jorge_Francisco
Andei relendo algumas coisas sobre WebService e até hoje só tinha "consumido"(calma que é poucas gramas,hehehe) através do PHP. Só que com classes SOAP e nuSOAP você nem vê o que está acontecendo.

Agora queria que um PIC "consumisse" um WebService, a questão é que poderia usar a pilha TCP/IP da microchip e conectar a um servidor( na verdade não estou bem certo se ele pode conectar-se ao servidor ou somente o contrário), feito a conexão gostaria de usar o WebService para fazer diversas funções, como acessar o banco de dados feito em MySQL.

O WebService acessando o bando de dados funciona, como disse acima, uso com PHP. Queria saber se era possível com o PIC.

As minhas dúvidas seriam : Posso mudar a pilha para fazer conexão a um WebService?Um servidor pode conectar-se ao PIC usando esta pilha?

MensagemEnviado: 28 Out 2008 23:14
por Jorge_Francisco
Já que ninguem aqui perguntou o que era um WebService irei tentar explicar.


Um “WebService” é um conjunto de funções chamáveis através da Internet, utilizando o protocolo SOAP. Estas funções recebem o nome de WebMethods.

Existe um modelo que descreve como o serviço será realizado, garantindo assim, que a comunicação seja bem sucedida, o nome deste modelo é o WSDL.

Você pode criar um WebService em qualquer linguagem, e qualquer linguagem pode acessar o WebService. Não precisa saber quais as funções que são providas, ele informa isso antes da comunicação.

Como um WebService pode ser util:

Imagina que precisa resolver calculos pesados, imagina que precisa visualizar o resultado em um celular, não daria para um celular processar muitos dados e tão pouco com muita velocidade. É aí que o WebService entra, o celular só precisa enviar a requisição e esperar.

WebServices são utilizados em grande escala, um exemplo é o CEP dos correios, outro exemplo é a cotação do dolar,etc,etc.

RSS(Sistema de noticias) possui um sistema de WebService, o Asm51 ,por exemplo, poderia ter um RSS avisando sobre postagens novas.

Imagina então um PIC comandando um letreiro(painel) com noticias atualizadas de diversos sites(UOL, Yahoo,Times,etc). Imagina que tudo isso pode ser feito por WebService, o PIC envia uma requisição e recebe em um formato pré determinado notícias de vários sites e mostra para quem está no trânsito, ou para quem está no trêm, ônibus,barca,etc.

Sobre o PIC ler um WebService estou trabalhando nisto, assim que tiver um resultado satisfatório coloco aqui.

Um exemplo:

http://info.abril.com.br/corporate/apli ... vice.shtml


Vlw

MensagemEnviado: 29 Out 2008 07:58
por leo_alves_br
Oi.

Estou trabalhando com estes modulos aqui:
http://www.siteplayer.com/main_content.htm

Mas em breve pretendo utilizar o PIC como o WebServer conectando ele através do ENC28J60

Aqui tem informações...

http://www.microchip.com/stellent/idcpl ... s=ethernet

Você esteve no Master Microchip 2008?

Até mais

MensagemEnviado: 29 Out 2008 09:23
por Jorge_Francisco
Olá Leo,

Bem vindo ao fórum. Então, nem fui ao Master Microchip, mas gostaria muito de ir no próximo.

Sobre a plaquinha, ela é muito legal. Mas apesar do nome parecido, há diferenças no que eu estou falando. Web Server é uma coisa, Web Service é outra. Web Server é um servidor e WebService é um serviço de dados.

E estou usando GPRS(com a ajuda do Sergio daqui do fórum), mas petendo brincar com etehrnet tb.

Vlw

MensagemEnviado: 29 Out 2008 11:17
por ivan
Francisco,

Dá uma olhada no lnk a seguir:
http://gsoap2.sourceforge.net/

Pode ser um pontapé inicial... posta ae o q achou!

MensagemEnviado: 29 Out 2008 16:11
por Jorge_Francisco
ivan escreveu:Francisco,

Dá uma olhada no lnk a seguir:
http://gsoap2.sourceforge.net/

Pode ser um pontapé inicial... posta ae o q achou!


Olá Ivan,

Já tinha dado uma olhada por alto neste site, irei reler tudo de novo, mas pelo pouco que li tem que ter um SO para usar esta biblioteca e a minha intenção era usar apenas um PIC conectado via socket mesmo.

Mas vou dar uma olhada, quem sabe não tiro algo de lá. Muito obrigado pela sugestão.

Jorge

MensagemEnviado: 29 Out 2008 22:05
por ivan
Talvez este link seja + enxuto...

http://www.soapclient.com/SourceCode.html

MensagemEnviado: 29 Out 2008 23:58
por Jorge_Francisco
Então. Esse site aí tb emprega SOAP, mas com dll, o que inviaviliza a graça de ser fazer para um simples PIC, utilizo SOAP em PHP, e o meu WebService já funciona por SOAP(no caso nuSOAP).

A verdade é que independente do tipo, o PIC vai ter que fazer um XML Parsing. Mas tem solução, se você quiser atualizar um banco de dados por exemplo pode usar um simples POST ou GET usando QUERY STRING, mas se você quer receber, pode usar HTTP Blinding. Não entrarei em detalhes agora, estou com sono, depois explico melhor.

Por enquanto vamos ao básico. Supondo que a pilha TCP/IP que a Microchip disponibiliza possa ser usada, então bastaria conectar por socket e enviar requisições por HTTP Request(POST,GET,PUT,DELETE).

Por exemplo, para enviar um requisição a um Web Service faria da seguinte forma:

Código: Selecionar todos

POST /a2b/EventService HTTP/1.1
Host: a2b.example.questra.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: /a2b/EventService#SubmitEvent

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header>A2B Header</SOAP-ENV:Header> <SOAP-ENV:Body> <SubmitEventRequest> <Source>Copier54321</Source> <Description>MotorFailure</Description> </SubmitEventRequest> </SOAP-ENV:Body> </SOAP-ENV:Envelope>



Não tem mistério, é só escrever isso usando socket.

O servidor enviaria isto ao PIC como resposta:

Código: Selecionar todos

HTTP/1.0 200 OK
Content-Type: text/xml
Content-Length: 316
<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header>A2B Header</SOAP-ENV:Header>

<SOAP-ENV:Body> <SubmitEventResponse> <Status>OK</Status> </SubmitEventResponse> </SOAP-Env:Body>

</SOAP-ENV:Envelope>



Ou seja, tem que pecorrer a resposta e achar a tag de interesse(no exemplo acima é o <Status>), isto é chamado de Parsing. Depois entro em mais detalhes.

Vlw

MensagemEnviado: 30 Out 2008 05:25
por ivan
Conheço bem o processo de parsing.
Já usei em extrações de dados de BD Oracle em XML usando o XSLT para HTML direto - Na aplicação desktop o usuário alterava dados da pagina HTML dentro de uma GUI pré formatada(figuras, headers, links,etc...), gravava no BD Oracle e o site extraía estes dados gerando uma pág. HTML. QQ um atualizava o site sem saber nada de HTML-, etc...
Toda e qq solitação de pag. a servidor Web é feita em socket TCP-IP usando o protocolo HTTP(GET, POST...).
No caso, como vc disse, retorna um XML. Se não me engano, a versão mais atual de HTML 4.0 segue(guirá) os padrões XML.

Seguindo o link de SOAP for RPC, da página que te passei antes. No final da página tem um download dos fontes(Não abri pra ver se é msm).
http://www.whitemesa.com/wmsoapsvc_down.htm

MensagemEnviado: 30 Out 2008 20:19
por Jorge_Francisco
Olá Ivan,

Outro modo de se fazer é o seguinte:

Primeiro pegar o WSDL de um WebService assim:

localhost/server?wsdl

Então ele retorna o WSDL(dãaaa,rssrsr). Depois de uma lida e só enviar via POST a requisição(RPC). Como no SOAP(nuSOAP) está implementada BINDING, ele aceita POST e GET. Daí ele retorna o que se quer.


OBS:Só testei localmente!!!!!

Em primeiro lugar a conexão:

Menu Iniciar->Executar->cmd:

Digitar: Telnet 127.0.0.1 80

Depois de conectado vem a requisição:

Código: Selecionar todos

POST /wsdemo/nusoap/server.php HTTP/1.0
Host: localhost
User-Agent: NuSOAP/0.7.2 (1.94)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 524

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns9817:hello xmlns:ns9817="http://tempuri.org"><__numeric_0 xsi:type="xsd:string">Jorge Francisco</__numeric_0></ns9817:hello></SOAP-ENV:Body></SOAP-ENV:Envelope>



Daí veio a resposta:

Código: Selecionar todos

HTTP/1.1 200 OK
Date: Thu, 30 Oct 2008 23:13:58 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
X-SOAP-Server: NuSOAP/0.7.2 (1.94)
Content-Length: 537
Connection: close
Content-Type: text/xml; charset=ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:helloResponse xmlns:ns1="http://tempuri.org"><return xsi:type="xsd:string">Ol&amp;aacute Jorge Francisco</return></ns1:helloResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>



Em PHP:

Server.php

Código: Selecionar todos

<?php

// inclusão do arquivo de classes NuSOAP
require_once('nusoap.php');

// criação de uma instância do servidor
$server = new soap_server;

// registro do método
$server->register('hello');

// definição do método como uma função do PHP
   function hello($name) {
      return 'Ol&aacute '.$name;
   }

// requisição para uso do serviço
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?
$HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);
?>



Como estou testando muitas coisas, depois eu coloco tudo organizado aqui.


Proximo passo, fazer um parsing com um PIC.

Vlw

MensagemEnviado: 30 Out 2008 20:48
por Jorge_Francisco
Outra alternativa seria fazer uma página em PHP ou qualquer outra linguagem que "consuma" o WebService do site que se queira e retorne apenas a informação, assim o PIC não irá fazer nem PARSING.

Depois de fazer a página para consumir é só requisita-la assim:


Código: Selecionar todos
GET /wsdemo/nusoap/cliente.php
host: localhost


O Resultado é isso:

Código: Selecionar todos
Ol&aacute; Jorge Francisco


Porque apareceu essa palavar estranha : Ol&aacute;

Regras do W3C (World Wide Web Consortium), não se pode usar simplesmente "Olá", letras acentuadas devem ser escritas no formato do W3C, então o "a agudo" se tornou &aacute;.

MensagemEnviado: 31 Out 2008 17:16
por ivan
Se fizer um GET em pag, pode passar parâmetros e retornar varias infos diferentes num trem de "campos".
Do lado do servidor, se aplicar um XSLT já te devolve "Olá Jorge Francisco" limpinho tb e o PIC fica só nos pedidos e exibição dos dados, imagens, etc... Nem sua... É, gdes possibilidades...
Agora, pra Web Services msm, acho o PIC com pouca RAM e sem "poder de fogo". Talvez um PIC32... um ARM... sei lá!
Web Services é meio pesadão por causa dos "envelopes". Analisa qtos bytes são necessários serem trocados para retornar "Ol&aacute; Jorge Francisco"...

MensagemEnviado: 01 Nov 2008 18:49
por Jorge_Francisco
Verdade Ivan, quando diz "parâmetros " quer dizer por QUERY STRING? Assim: server.php?nome=Jorge Francisco ?

Então, sei que o meu exemplo foi simples, fiquei preocupado com o retorno de WebServices de "verdade", acho que um PIC não daria conta, mas como não testei, não sei como seria o comportamento.

Em todo caso, irei usar o mais simples. Agora tenho que me preocupar com a segurança do WebService. Imagina alguém injetando dados falsos, ou acesando sem autorização. No mundo de Computadores velozes isso tudo é fácil, o próprio nuSoap implementa criptografia+usuário+senha, mas como PIC acho que não daria,hehehe.