Foros del Web » Programando para Internet » PHP »

Problema al intentar consumir muchos registros de una consulta en Web Services

Estas en el tema de Problema al intentar consumir muchos registros de una consulta en Web Services en el foro de PHP en Foros del Web. Buenos días Amigos del Foro, Tengo una inquietud que me gustaría me puedan ayudar a solventar. Tengo un Servicio Web basado en Nusoap en el ...
  #1 (permalink)  
Antiguo 09/09/2011, 12:04
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Problema al intentar consumir muchos registros de una consulta en Web Services

Buenos días Amigos del Foro,

Tengo una inquietud que me gustaría me puedan ayudar a solventar. Tengo un Servicio Web basado en Nusoap en el cual funciona bien al momento de realizar una consulta a una base de datos en Oracle para que me devuelva pocos registros, el problema es cuando el número de registros aumenta a n. Pueden ayudarme con información si es motivos de configuración o algún problema con el Servicio Web??

Muchas Gracias por su ayuda.

Dejo el código del Cliente.

Código PHP:

<?php

require_once('nusoap.php');
$wsdl="http://localhost/ws/SERVER.php?wsdl"//url del webservice que invocaremos
$client=new nusoap_client($wsdl,'wsdl'); //instanciando un nuevo objeto cliente para consumir el webservice  


$estudiante $client->call('ListarEstudiante'); //llamando al metodo y recuperando el array de productos en una variable

//¿ocurrio error al llamar al web service? 
if ($client->fault) { // si
      
echo 'No se pudo completar la operación'
      die(); 
}else{ 
// no
    
$error $client->getError(); 
    if (
$error) { // Hubo algun error 
        
echo 'Error:' $error
    } 

echo 
"<div id='apDiv1' align='left'>

<table border='1'><tr>"
;
    echo
"<td>Id Estudiante</td>
            <td>C&eacute;dula</td>
            <td>Nombre</td>
            <td>Apellido</td>
            <td>Universidad</td>            
            <td>Departamento</td>
            <td>Cod Pais</td>
            <td>Email</td>
            <td>Direccion</td>
            <td>Telefono</td>
            <td>Prefijo</td>
            
    
    </tr>"
;
if(
is_array($estudiante)){ //si hay valores en el array


    
for($i=0;$i<count($estudiante);$i++){    
        
        
$id_estudiante=$estudiante[$i]['Id_Estudiante'];
        
$cedula=$estudiante[$i]['Cedula'];
        
$nombre=$estudiante[$i]['Nombre'];
        
$apellido=$estudiante[$i]['Apellido'];
        
$universidad=$estudiante[$i]['Universidad'];
        
$departamento=$estudiante[$i]['Departamento'];
        
$codpais=$estudiante[$i]['CodPais'];
        
$email=$estudiante[$i]['Email'];
        
$direccion=$estudiante[$i]['Direccion'];
        
$telefono=$estudiante[$i]['Telefono'];
        
$prefijo$estudiante[$i]['Prefijo'];
            
        echo
"<tr >";    
        echo 
'<td>'.$id_estudiante.
        
'</td><td>'.$cedula.
        
'</td><td>'.$nombre.
        
'</td><td>'.$apellido.
        
'</td><td>'.$universidad.
        
'</td><td>'.$departamento.
        
'</td><td>'.$codpais.
        
'</td><td>'.$email.
        
'</td><td>'.$direccion.
        
'</td><td>'.$telefono.
        
'</td><td>'.$prefijo.
        
'</td></tr> ';        
        
        }
}else{
    echo 
'No hay estudiantes';
}

echo
"</table></div>";
?>
y el Servidor.

Código PHP:
require_once('../nusoap/lib/nusoap.php');

$server = new soap_server;

$ns="http://localhost/ws"// espacio de nombres; Sitio donde estara alojado el web service
$server->configurewsdl('WEB SERVICE'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;


$server->wsdl->addComplexType(
    
'ArregloEstudiante',             // Nombre
    
'complexType',                     // Tipo de Clase
    
'array',                         // Tipo de PHP
    
'',                             // definición del tipo secuencia(all|sequence|choice)
    
'SOAP-ENC:Array',                 // Restricted Base
    
array(),
    array(
        array(
'ref' => 'SOAP-ENC:arrayType''wsdl:arrayType' => 'tns:Estudiante[]'// Atributos
    
),
    
'tns:Estudiante'
);

$server->wsdl->addComplexType('Estudiante''complexType''struct''all''',
    array(
        
'Id_Estudiante'=> array('name' => 'Id_Estudiante','type' => 'xsd:string'),
        
'Cedula'    => array('name' => 'Cedula',    'type' => 'xsd:string'),
        
'Nombre'    => array('name' => 'Nombre',    'type' => 'xsd:string'),
        
'Apellido'=> array('name' => 'Apellido','type' => 'xsd:string'),
        
'Universidad'    => array('name' => 'Universidad',    'type' => 'xsd:string'),
        
'Departamento'    => array('name' => 'Departamento',    'type' => 'xsd:string'),
        
'CodPais'=> array('name' => 'CodPais','type' => 'xsd:string'),
        
'Email'    => array('name' => 'Email',    'type' => 'xsd:string'),
        
'Direccion'    => array('name' => 'Direccion',    'type' => 'xsd:string'),
        
'Telefono'=> array('name' => 'Telefono','type' => 'xsd:string'),
        
'Prefijo'=> array('name' => 'Prefijo','type' => 'xsd:string'),
        

        
    )
);

/*METODO DEL WEB SERVICE*/
function ListarEstudiante($estado){
//aqui hago la consulta a la base
            
$i 0;
            
$j=1;
while (
$j <= 5) {
  
  
  
                
$toc[$i]['Id_Estudiante'] = $j;
                
$toc[$i]['Cedula'] = $j;
                
$toc[$i]['Nombre'] = $j;
                
$toc[$i]['Apellido'] = $j;
                
$toc[$i]['Universidad'] = $j;
                
$toc[$i]['Departamento'] = $j;
                
$toc[$i]['CodPais'] = $j;
                
$toc[$i]['Email'] = $j;
                
$toc[$i]['Direccion'] = $j;
                
$toc[$i]['Telefono'] = $j;
                
$toc[$i]['Prefijo'] = $j;

$i++;    
$j++;            
}
            return 
$toc;
    
}
    

/************ REGISTRANDO EL METODO **************/
$server->register(
    
'ListarEstudiante',                           // Nombre del Metodo
    
array('estado' => 'xsd:string' ),           // Parametros de Entrada
    
array('return' => 'tns:ArregloEstudiante')   //Datos de Salida
);


/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA implode("\r\n"file('php://input'));
$server->service($input);
exit; 
  #2 (permalink)  
Antiguo 09/09/2011, 12:15
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 6 años, 3 meses
Puntos: 288
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

y no podes cargar N registros, si necesitas todos tenes que recuperarlos paginados
  #3 (permalink)  
Antiguo 09/09/2011, 12:15
 
Fecha de Ingreso: septiembre-2011
Mensajes: 16
Antigüedad: 5 años, 7 meses
Puntos: 4
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

EH amigo no si si este sea el subforo adecuado a tu pregunta, ya que aqui es para php puro a mi parecer y tu usas un framework
  #4 (permalink)  
Antiguo 09/09/2011, 12:19
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 6 años, 3 meses
Puntos: 288
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Cita:
Iniciado por nocturnoa Ver Mensaje
EH amigo no si si este sea el subforo adecuado a tu pregunta, ya que aqui es para php puro a mi parecer y tu usas un framework
pero tienen que ver con php,
  #5 (permalink)  
Antiguo 09/09/2011, 12:21
 
Fecha de Ingreso: septiembre-2011
Mensajes: 16
Antigüedad: 5 años, 7 meses
Puntos: 4
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

si pero la funciones del framwork alguna persona la desconocen y ahi puede estar el error, cosa q pasa conmigo
  #6 (permalink)  
Antiguo 09/09/2011, 12:22
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Cita:
Iniciado por Patriarka Ver Mensaje
y no podes cargar N registros, si necesitas todos tenes que recuperarlos paginados
Hola gracias por responder me refería a n como una suposición lo siento si tengo como 5 registros los puedo consumir pero si paso digamos de 10 ya no, no creo que necesite la paginación para esto
  #7 (permalink)  
Antiguo 09/09/2011, 12:26
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 6 años, 3 meses
Puntos: 288
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

yo no lo uso pero intenta usar el XDEBUG de php a ver que pasa.
al ser un problema tan particular es dificil ayudarte
  #8 (permalink)  
Antiguo 09/09/2011, 12:26
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Cita:
Iniciado por Patriarka Ver Mensaje
y no podes cargar N registros, si necesitas todos tenes que recuperarlos paginados
Pero sería interesante tener una idea y aprender como paginar una consulta si fuese grande me puedes ayudar con información ? ya que al instante de realizar la consulta la hace, el problema es al momento de consumir con el cliente que no me regresa la consulta
  #9 (permalink)  
Antiguo 09/09/2011, 13:38
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

al revisar el posible error obtengo esto

Error

HTTP Error: socket read of headers timed out

Me podrían indicar en donde puedo configurar si es posible esto para que pueda realizar la consulta??

Gracias
  #10 (permalink)  
Antiguo 09/09/2011, 20:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.549
Antigüedad: 8 años, 8 meses
Puntos: 2073
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Intenta incrementar los valores de timeout y response_timeout en nusoap.php a ver si tienes suerte. Al parecer este es un problema recurrente.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 13/09/2011, 07:51
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Gracias por la ayuda Karma ese era el problema
  #12 (permalink)  
Antiguo 13/09/2011, 08:18
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 6 años, 3 meses
Puntos: 288
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Cita:
Iniciado por PICOROFG Ver Mensaje
Gracias por la ayuda Karma ese era el problema
nos podes mostrar como te quedo configurado ese archivo.
asi nos queda la resolucion para futuros problemas
  #13 (permalink)  
Antiguo 13/09/2011, 14:51
Avatar de PICOROFG  
Fecha de Ingreso: febrero-2008
Ubicación: Quito, Ecuador, Ecuador
Mensajes: 120
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema al intentar consumir muchos registros de una consulta en Web Serv

Cita:
Iniciado por Patriarka Ver Mensaje
nos podes mostrar como te quedo configurado ese archivo.
asi nos queda la resolucion para futuros problemas
Claro en nusoap.php existen estos parámetros:

function connect($timeout=0,$response_timeout=30){.........

modifique $response_timeout=60

Además utilicé set_time_limit() para aumentar el tiempo límite en php, además de revisar el firewall de mi servidor

Última edición por PICOROFG; 13/09/2011 a las 14:58

Etiquetas: consumir, muchos, registro, registros, services, variables
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 23:35.