PIC WebService

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIC WebService

Mensagempor Jorge_Francisco » 09 Out 2008 09:29

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?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor fabim » 09 Out 2008 09:53

PIC24 a 40 mips.
ou DsPIC a 40 mips..

ou PIC32 a 122mips ?

depende do que exatamente você esta falando ?

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Jorge_Francisco » 09 Out 2008 10:05

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?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 28 Out 2008 23:14

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor leo_alves_br » 29 Out 2008 07:58

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
leo_alves_br
Bit
 
Mensagens: 27
Registrado em: 01 Mai 2008 09:32

Mensagempor Jorge_Francisco » 29 Out 2008 09:23

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ivan » 29 Out 2008 11:17

Francisco,

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

Pode ser um pontapé inicial... posta ae o q achou!
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor Jorge_Francisco » 29 Out 2008 16:11

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ivan » 29 Out 2008 22:05

Talvez este link seja + enxuto...

http://www.soapclient.com/SourceCode.html
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor Jorge_Francisco » 29 Out 2008 23:58

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ivan » 30 Out 2008 05:25

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
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor Jorge_Francisco » 30 Out 2008 20:19

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
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Jorge_Francisco » 30 Out 2008 20:48

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;.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor ivan » 31 Out 2008 17:16

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"...
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor Jorge_Francisco » 01 Nov 2008 18:49

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.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x