Ciao a tutti... sto affrontando sto problema da 2 giorni e 2 notti ed ho già un pochino di mal di testa... perchè come sempre non riesco a trovare documentazione fatta per chi non sa
Leggendo un bel PDF di Gaetano Giunta ho più o meno capito le basi, ma su alcune cose rimango veramente a zero.
Mi pare di aver capito che il metodo più facile di realizzazione di un web service è XML-RPC o JSON (consigliato ques'ultimo per la leggerezza)
Essendo a zero non so decidermi bene tra i pro ed i contro, ma guardando i file di esempio del PDF si mostrava come realizzare un sistema multiprotocollo. Il tutto si riferisce a delle librerie che ho preso da qui:
http://sourceforge.net/projects/phpxmlrpc
Facendo un po' di lettura sono arrivato a creare questo codice per il SERVICE che chiamo service.php
Codice PHP:
<?php
include('include/xmlrpc.inc');
include('include/xmlrpcs.inc');
$methods = array(
'USstatename' => array('function' => 'findstate',
'signature' => array(array($xmlrpcString,$xmlrpcInt)),
'docstring' => 'Converts an integer value to its US state name'
)
);
function findstate($msg){
// funzionalità da implementare...
return "ciao - ".$msg;
}
if($_SERVER['REQUEST_METHOD'] != 'POST' || $_SERVER['CONTENT_TYPE'] == 'application/x-www-form-urlencoded'){
include('include/docxmlrpcs.inc');
$server = new documenting_xmlrpc_server($methods);
}else{
if strpos($_SERVER['CONTENT_TYPE'], 'text/xml') === 0){
$server = new xmlrpc_server($methods);
}else{
include('include/jsonrpc.inc');
include('include/jsonrpcs.inc');
$server = new jsonrpc_server($methods);
}
}
?>
e per il CLIENT client.php
Codice PHP:
<?php
include("include/xmlrpc.inc");
$par = new xmlrpcval('system.methodHelp', 'string');
$msg = new xmlrpcmsg('system.methodHelp', array($par));
$c = new xmlrpc_client("/service.php", "http://localhost/sito_cms_akkattp/prova_web_service/server", 80);
$r = $c->send($msg);
if(!$r->faultCode()){
$v = $r->value();
$result = $v->scalarval(); // non funzionerebbe con array!
print "Got: " . htmlspecialchars($result);
}else{
print "Si è verificato un errore:
";
print " Codice: " . htmlspecialchars($r->faultCode())."
";
print " Ragione: " . htmlspecialchars($r->faultString());
}
?>
Ora come sempre qualcosa non mi torna perchè il nome della funzione sul server sul client non la vedo, e quindi mi aspetto un errore, ma come ho detto prima a volte non si arriva a pensare quanto siamo ignoranti noi!
:master:
Ovviamente l'errore c'è... ed eccolo:
codice:
Si è verificato un errore:
Codice: 5
Reragione: Connect error: Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (-881083704)
Continuando la lettura vedo che c'è un debugger in dotazione... lo provo sapendo quindi che isolo il client e testo solo il service (spero che il debugger non abbia bug!
) e dopo avere messo tutti i parametri di connessione (come da esempio) mi ritrovo sto errore:
Guardo bene e l'indirizzo viene formato male... che paxxe allora tolgo il numero della porta (tanto l'80 è di default) e ricevo questo messaggio:
identico...
Per non dilungarmi io vorrei ottenere come risultato il ritorno di un parametro legato al "ciao" della funzione del web service. Qualcuno mi sa dare un aiutino?
GRAZIE