Foros del Web » Programando para Internet » PHP »

Empezar con nusoap

Estas en el tema de Empezar con nusoap en el foro de PHP en Foros del Web. Hola, Estoy empezando con nusoap, y he estado mirando ejemplo. Hasta ahora he construido una prueba, el cliente: cliente.php Código: <?php require_once('../libs/nusoap/nusoap.php'); $oSoap = new ...
  #1 (permalink)  
Antiguo 08/03/2010, 10:15
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Empezar con nusoap

Hola,

Estoy empezando con nusoap, y he estado mirando ejemplo.
Hasta ahora he construido una prueba, el cliente:

cliente.php
Código:
<?php

require_once('../libs/nusoap/nusoap.php');


$oSoap = new soapclient('server.php');

$err = $oSoap->getError();
if ($err)
{
	echo '<p><b>Error: ' . $err . '</b></p>';
}

$dato = $oSoap->call('HolaMundo',array('nombre' => 'Hollman'),'http://localhost/NuSOAP/HolaMundo');

if ($oSoap->fault)
{
	echo "Error al llamar el metodo<br/>".$oSoap->getError();
}
else 
{
	echo $dato;
}
?>
server.php
Código:
<?php
require_once('../libs/nusoap/nusoap.php');

function HolaMundo ($nombre)
{
	return "Hola ".$nombre;
}

$server = new soap_server();
$ns="http://localhost/Project/WS";
$server->configurewsdl('',$ns);
$server->wsdl->schematargetnamespace=$ns;
$server->register('HolaMundo',array('nombre' => 'xsd:string'),array('return' => 'xsd:string'),$ns);

if (isset($HTTP_RAW_POST_DATA))
{
	$input = $HTTP_RAW_POST_DATA;
}
else
{
	$input = implode("\r\n", file('php://input'));
}
$server->service($input);
exit;
?>
Se que esta es la estructura pero me falta el wdsl, pero no se como construirlo

Es un servicio a una funcion creada por mi

Agradeceria cualquier ayuda

Un saludo
__________________
La ficción es y será mi única realidad
  #2 (permalink)  
Antiguo 08/03/2010, 19:44
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Empezar con nusoap

Cita:
Iniciado por jspcat Ver Mensaje
Se que esta es la estructura pero me falta el wdsl, pero no se como construirlo
Precisamente lo que te hace NuSOAP es construirte el WSDL dependiendo de los datos que pasas al registrar un método.

Primero, quita la línea del exit, no tiene sentido. Segundo no veo la razón de recibir información de la entrada estándar si se supone es un servicio web ... pero eso es irrelevante ahora.


Pides ayuda pero no mencionas cuál es tu problema. Primero accede a tu servidor desde el navegador (el archivo server.php), deberías de ver una página que te construye NuSOAP describiendo los servicios disponibles; en tu caso, solo una función.

Si logras visualizarla, no tienes problema. Si quieres ver el WSDL solo agrégale el parámetro ?wsdl a la URL. Esto es, deberías navegar a algo como:
http://localhost/ruta/al/archivo/server.php >> muestra página de NuSOAP
http://localhost/ruta/al/archivo/server.php?wsdl >> muestra WSDL

En tu cliente, deberías pasar la URL del WSDL como parámetro. Algo así:
Código PHP:
Ver original
  1. $oSoap = new soapclient('http://localhost/ruta/al/archivo/server.php?wsdl', true);


Por otra parte, PHP tiene su propia extensión para SOAP, aunque no tiene cosas bonitas como la generación de la página como NuSOAP lo hace, debería ser más eficiente y estándar. Yo sugeriría igual darle una revisada.
www.php.net/soap
__________________
I ♥ The Music!
  #3 (permalink)  
Antiguo 09/03/2010, 10:56
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Empezar con nusoap

Hola,

Primero de todo muchas gracias ya lo solucione.
Server.php
Código PHP:
<?php
require_once('../libs/nusoap/nusoap.php');

function 
HolaMundo ($nombre)
{
    return 
"Hola ".$nombre;
}

$server = new soap_server();
$ns="http://localhost/Project/WS";
$server->configurewsdl('server');
$server->wsdl->schematargetnamespace=$ns;
$server->register('HolaMundo',array('nombre' => 'xsd:string'),array('return' => 'xsd:string'),$ns);

if (isset(
$HTTP_RAW_POST_DATA))
{
    
$input $HTTP_RAW_POST_DATA;
}
else
{
    
$input implode("\r\n"file('php://input'));
}
$server->service($input);
?>
client.php

Código PHP:
<<?php

require_once('../libs/nusoap/nusoap.php');


$oSoap = new soapclient('http://localhost/Project/WS/server.php');

$err $oSoap->getError();
if (
$err)
{
    echo 
'<p><b>Error: ' $err '</b></p>';
}

$dato $oSoap->call('HolaMundo',array('nombre' => 'Hollman'),'http://localhost/Project/WS/HolaMundo');

if (
$oSoap->fault)
{
    echo 
"Error al llamar el metodo<br/>".$oSoap->getError();
}
else 
{
    echo 
$dato;
}
?>
Ahora si accedo http://localhost/Project/WS/server.php tengo mi pantalla de server y mediante http://localhost/Project/WS/server.php?wsdl accedo al wsdl que es un xml.

Sin embargo cuando accedo al cliente así: http://localhost/Project/WS/client.php

Tengo error que no comprendo. Concretamente esto:
Cita:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/Project/WS/server.php' : Premature end of data in tag html line 2 in /var/www/Project/WS/client.php:6 Stack trace: #0 /var/www/Project/WS/client.php(6): SoapClient->SoapClient('http://localhos...') #1 {main} thrown in /var/www/Project/WS/client.php on line 6
Por lo que tengo entendido aquí deberia dar el resultado que en este caso sería Hola Hollman

Alguna idea??

Gracias

Un saludo
__________________
La ficción es y será mi única realidad
  #4 (permalink)  
Antiguo 09/03/2010, 12:10
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Empezar con nusoap

El error te está diciendo que el cliente no pudo leer el WSDL y es porque no es lo que le estás pasando. Lo mencioné en mi mensaje anterior:
Cita:
Iniciado por maturano Ver Mensaje
En tu cliente, deberías pasar la URL del WSDL como parámetro.
... y mencioné como hacerlo.

Quizá deberías mencionar cuál fué el problema, que ahora colocas código pero quizá no quede clara la diferencia con lo que tenías anteriormente. Esto para que quede claro a los compañeros que lleguen a consultar este tema . Esto es un foro público, ténlo siempre en mente.
__________________
I ♥ The Music!
  #5 (permalink)  
Antiguo 09/03/2010, 12:24
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Empezar con nusoap

Tienes toda la razon, he avanzado algo pero me surge un problema que intentare detallar mejor
Client.php

Código PHP:
<?php

require_once('../libs/nusoap/nusoap.php');


$oSoap = new soapclient('http://localhost/Project/WS/server.php?wsdl');

/*$err = $oSoap->getError();
if ($err)
{
    echo '<p><b>Error: ' . $err . '</b></p>';
}
*/
//$dato = $oSoap->call('HolaMundo',array('nombre' => 'Hollman'),'http://localhost/Project/WS/HolaMundo');
$dato=$oSoap->HolaMundo('Hollman');
$dato2=$oSoap->Buscar('Barcelona');

if (
$oSoap->fault)
{
    echo 
"Error al llamar el metodo<br/>".$oSoap->getError();
}
else 
{
    echo 
$dato;
    echo 
$dato2;
}
?>
server.php

Código PHP:
<?php
require_once('../libs/nusoap/nusoap.php');


function 
HolaMundo ($nombre)
{
    return 
"Hola ".$nombre;
}

function 
Buscar($query){
    
    return 
$query;
}


$server = new soap_server();
$ns="http://localhost/Project/WS";
$server->configurewsdl('server');
$server->wsdl->schematargetnamespace=$ns;
$server->register('HolaMundo',array('nombre' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
$server->register('Buscar',array('query' => 'xsd:string'),array('return' => 'xsd:string'),$ns);

if (isset(
$HTTP_RAW_POST_DATA))
{
    
$input $HTTP_RAW_POST_DATA;
}
else
{
    
$input implode("\r\n"file('php://input'));
}
$server->service($input);
?>
Esto me da el siguiente error
Cita:
Fatal error: Uncaught SoapFault exception: [Client] Function ("Buscar") is not a valid method for this service in /var/www/Project/WS/client.php:16 Stack trace: #0 [internal function]: SoapClient->__call('Buscar', Array) #1 /var/www/Project/WS/client.php(16): SoapClient->Buscar('Barcelona') #2 {main} thrown in /var/www/Project/WS/client.php on line 16
Dice que Buscar no esta definida, pero no lo entiendo porque si que esta, es mas si en el cliente no llamo a

Código:
$dato2=$oSoap->Buscar('Barcelona');
y por supuesto no llamo a echo $dato2;
Me escribe bien el resultado de la primera funcion es decir
Cita:
Hola Hollman
Alguna idea de a que se puede deber esto??

Gracias

Saludos!
__________________
La ficción es y será mi única realidad
  #6 (permalink)  
Antiguo 11/03/2010, 15:36
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Empezar con nusoap

Hola gente,

Tengo un problema que no consigo entender con el nusoap:

En el cliente hago

Código PHP:
require_once('/var/www/Project/libs/nusoap/nusoap.php');
$oSoap = new soapclient('http://webService.serverApp.com:446d?wsdl');
$name="Mundo"
$dato=$oSoap->HolaMundo($name);

echo 
$dato 
mientras en el server tengo

Código PHP:
require_once('/var/www/Project/libs/nusoap/nusoap.php');
function 
HolaMundo ($nombre)
{
    return 
"Hola ".$nombre;
}


$server = new soap_server();
$ns="http://webService.serverApp.com:446";
$server->configurewsdl('Web Service',$ns);
$server->wsdl->schematargetnamespace=$ns;
$server->register('HolaMundo',array('nombre' => 'xsd:string'),array('return' => 'xsd:string'),$ns);
$server->register('Buscar',array('query' => 'xsd:string'),array('return' => 'xsd:array'),$ns);

if (isset(
$HTTP_RAW_POST_DATA))
{
    
$input $HTTP_RAW_POST_DATA;
}
else
{
    
$input implode("\r\n"file('php://input'));

Y todo funciona bien es decir me escribe
Cita:
Hola Mundo
Sin embargo si al cliente le añado
Código PHP:
$err $oSoap->getError(); 
Me dice que no reconoce la funcion getError()

Asi como si lo llamo con la funcion

Código PHP:
$dato=$oSoap->call('HolaMundo',array('nombre' => $name),'http://webService.serverApp.com:446'); 
No reconoce el call

Sin embargo si creo

Código PHP:
$oSoap = new nusoap_client('http://webService.serverApp.com:446d?wsdl'); 
No me peta con ni el getError ni el call, sin embargo no obtengo resultados.

Mi pregunta es cual es correcto????

Porque quiza el call no haze falta pero el getError() diria yo que si no??

Gracias

Un saludo
__________________
La ficción es y será mi única realidad

Etiquetas: empezar, nusoap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.