Foros del Web » Programando para Internet » PHP »

nusoap

Estas en el tema de nusoap en el foro de PHP en Foros del Web. hacia mucho tiempo que no andaba por estos rumbos vamos al grano, tengo el siguiente problema, estoy trabajando con nusoap y php tengo mi server ...
  #1 (permalink)  
Antiguo 10/02/2009, 06:28
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
nusoap

hacia mucho tiempo que no andaba por estos rumbos
vamos al grano, tengo el siguiente problema, estoy trabajando con nusoap y php tengo mi server y mi client.

consumo mi web service, pero el cliente me retorna un error, me dice que no devuelvo un xml....

el server devuelvo un array o datalist
Código PHP:
<?php
// Pull in the NuSOAP code
require_once('lib/nusoap.php');
// Create the server instance
$server = new soap_server();
// Initialize WSDL support
$server->configureWSDL('pruebaWSDL''urn:pruebaWSDL');
// Register the data structures used by the service
$server->wsdl->addComplexType (
    
'Provincia',
    
'complexType',
    
'struct',
    
'all',
    
'',
    array (
        
'account' => array('name' => 'account''type' => 'xsd:string')
    )
);
$server->wsdl->addComplextype (
    
'Provincias',
    
'complexType',
    
'array',
    
'',
    
'SOAP-ENC:Array',
    array(),
    array(
        array(
'ref' => 'SOAP-ENC:arrayType'
            
'wsdl:arrayType' => 'tns:Provincia[]')
    ),
    
'tns:Provincias'
);
// Register the method to expose
$server->register('obtenerListaProvincias',        // method name
    
array(),                                    // input parameters
    
array('return' => 'tns:Provincias'),        // output parameters
    
'urn:pruebaWSDL',                            // namespace
    
'urn:pruebaWSDL#obtenerListaProvincias',    // soapaction
    
'rpc',                                        // style
    
'encoded',                                    // use
    
'Greet a person entering the sweepstakes'    // documentation
);

function 
obtenerListaProvincias() {
    
connectdb("lin2db_db""127.0.0.1""sa""");
   
    
$sql 'SELECT TOP 10 email FROM user_email;';
    
$result mssql_query($sql);
    
$numrows mssql_num_rows($result);
    if (!
$result) {
        return new 
soapfault('SOAP-ENV: Server''''Se ha producido un error en la consulta. Por favor, inténtelo más tarde');
    }
    if (
$numrows 1) {
        return new 
soapfault('SOAP-ENV: Server''''No se han encontrado provincias con dicho identificador');
    }
    
$array = array();
    
//$row = mysql_fetch_assoc($result);
    
while ($row mysql_fetch_assoc($result)) {
        
$array[] = array('name' => $row['email']);
    }
    return new 
soapval ('return''tns:Provincias'$array); 
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA '';
$server->setDebugLevel(1);
$server->service($HTTP_RAW_POST_DATA);

function 
connectdb($db$dbaddress$dbuser$dbpass) {
    
$dbconnect mssql_connect($dbaddress$dbuser$dbpass);
    if(
$dbconnect === false){
        return 
false;
    }else{
        
mssql_select_db ($db$dbconnect) or die (mysql_error());
    }
}

?>
no se si tengo algo mal en el servidor o tengo algun otro error

ojala puedan ayudarme

saludos

P.D el cliente es un soap client normal.
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
  #2 (permalink)  
Antiguo 10/02/2009, 09:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: nusoap

Pues deberías de ver que datos te imprime si llamas al service, es probable que tengas algún error y por eso no te retorna el XML.

Saludos
  #3 (permalink)  
Antiguo 10/02/2009, 11:12
Avatar de maralbust  
Fecha de Ingreso: febrero-2004
Ubicación: Santiago
Mensajes: 578
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: nusoap

ya lo arregl:/
tenia un problema en el cliente, hice uno sencillo y paso sin problemas.

para aquellos que deseen devolver un arreglo a través de soap, les dejo el código (para mssql, solo deben reemplazar el tipo de conexión y las funciones de query)

servidor.php
Código PHP:
<?php
require_once('lib/nusoap.php');
$server = new soap_server;
$server->register(
    
'GetTopPK'            // method name
);

function 
GetTopPK() {
    
connectdb("BD""SERVER""USUARIO""PASSWORD");
    
    
$sql 'SELECT TOP 10 char_name, PK FROM user_data WHERE builder = 0 ORDER BY PK DESC ;';
    
$result mssql_query($sql);
    
$numrows mssql_num_rows($result);

    if (!
$result) {
        return new 
soapfault('SOAP-ENV: Server''''Se ha producido un error en la consulta. Por favor, inténtelo más tarde');
    }
    if (
$numrows 1) {
        return new 
soapfault('SOAP-ENV: Server''''No se han encontrado provincias con dicho identificador');
    }

    
$i 0;
    while (
$row mssql_fetch_assoc($result)) {
        
$retval[$i] = array('USER'=>$row['char_name'], 'PK'=>$row['PK']);
        
$i++;
    }
    
    return 
$retval;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA '';
$server->service($HTTP_RAW_POST_DATA);

function 
connectdb($db$dbaddress$dbuser$dbpass) {
    
$dbconnect mssql_connect($dbaddress$dbuser$dbpass);
    if(
$dbconnect === false){
        return 
false;
    }else{
        
mssql_select_db ($db$dbconnect) or die (mysql_error());
    }
}
?>
cliente.php
Código PHP:
<?php
require_once('lib/nusoap.php');
$client = new soapclient('http://localhost/service/server.php');

$err $client->getError();
if (
$err) {
    echo 
'<p><b>Constructor error: ' $err '</b></p>';
}

$names = array('Scott''Albert''Robert''Phyllis');
$result $client->call(
    
'GetTopPK',            // method name
    
array()    // input parameters
);

if (
$client->fault) {
    echo 
'<p><b>Fault: ';
    
print_r($result);
    echo 
'</b></p>';
} else {
    
$err $client->getError();
    if (
$err) {
        echo 
'<p><b>Error: ' $err '</b></p>';
    } else {
        
print_r($result);
    }
}
?>
saludos a todos
__________________
..:: NADA SE PIERDE SOLO SE TRANSFORMA ::..
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 15:34.