Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/11/2007, 04:40
Avatar de Helenha
Helenha
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Error en el servidor web

Muchas gracias por contestarme ALVLIN, es un error nuevo, pero ya se cual es el problema, el servidor no me devuelve los datos complejos bien, no se de ke puede ser, por mucho ke lo miro no encuentro el error.
Dejo aki el trozo de codigo ke causa el error:

Código PHP:
    //ESTA FUNCION ES PARA DEPURAR ERRORES
    
function dep($str){
      
$arc fopen("c:\\log.txt","a+");
      
fwrite($arc,$str."\n\r");
      
fclose($arc);
    }
    
    
    
dep("Inicio");
    
    
// Incluimos las clases de SOAP:
    
require("lib/nusoap.php");
    
// Creamos el objeto del servidor:
    
$servidor = new soap_server();
    
    
    
    
$namespace="http://localhost/services/servicioweb.php";
    
    
// Generación del WSDL
    
$servidor->debug_flag=false;
    
$servidor->configureWSDL('ApplicationServices',$namespace);
    
$servidor->wsdl->schemaTargetNamespace $namespace;

    
// Agregamos un tipo de dato complejo
    
$servidor->wsdl->addComplexType(
        
"datosArticulos",
        
"complexType",
        
"struct",
        
"all",
        
"",
        array(
            
"id" => array("name"=>"id""type"=>"xsd:int"),
            
"descripcion" => array("name"=>"descripcion""type"=>"xsd:string"),
            
"precio" => array("name"=>"precio""type"=>"xsd:double"),
            
"seccion" => array("name"=>"seccion""type"=>"xsd:int"),
            
"tipoarticulo" => array("name"=>"tipoarticulo""type"=>"xsd:int"))
    );
    
//Lista de Articulos
    
$servidor->wsdl->addComplexType(
        
"listaArticulos",
        
"complexType",
        
"array",
        
"",
        
"SOAP-ENC:Array",
        array(),
            array(
                array(
"ref" => "SOAP-ENC:arrayType",
                      
"wsdl:arrayType" => "tns:datosArticulos[]")),
                
"tns:datosArticulos");

    
// Registramos la función que queremos exponer como servicio web
    
dep("Registramos funciones...");
    
$servidor->register("ObtenerArticulos", array("seccion" => "xsd:int","tarticulo" => "xsd:int","tienda" => "xsd:int","inicial" => "xsd:int","cantidad" => "xsd:int","ordenar" => "xsd:string"), array("return" => "tns:listaArticulos"), $namespace);
    
$servidor->register("NumArticulosTotales", array("seccion" => "xsd:int","tarticulo" => "xsd:int","tienda" => "xsd:int"), array("return" => "xsd:int"), $namespace);
    
//LA FUNCION NUMARTICULOS ME VA BIEN LA KE ME FALLA ES LA DE OBTENER ARTICULOS
    
    
function ObtenerArticulos($seccion$tarticulo$tienda$inicial$cantidad$ordenar){
        
dep("Obteniendo articulos...");
        
dep("Tipo articulo:... ".$ordenar);
        if (
is_int($seccion) && is_int($tarticulo)){   
            
$DBlink = @mysql_connect("localhost""root""");
            if(
$tienda==-1){
                 
$sql="SELECT a.articuloID as id, a.descripcion as descripcion, a.precio as precio,
                   s.descripcion as seccion, t.descripcion as  tipoarticulo
                   FROM articulo a, seccion s, tipoarticulo t
                   WHERE a.tipoArticuloID = t.tipoArticuloID
                   AND s.seccionID = a.seccionID
                   AND a.seccionID ="
$seccion."
                   AND a.tipoArticuloID = "
.$tarticulo." ORDER BY precio ".$ordenar." LIMIT ".$inicial.",".$cantidad;
            }else{
                
$sql="SELECT a.articuloID as id, a.descripcion as descripcion, a.precio as precio,
                    s.descripcion as seccion, t.descripcion as  tipoarticulo
                    FROM articulo a, seccion s, tipoarticulo t
                    WHERE a.tipoArticuloID = t.tipoArticuloID
                    AND s.seccionID = a.seccionID
                    AND a.seccionID ="
.$seccion."
                    AND a.tipoArticuloID ="
.$tarticulo."
                    AND a.tiendaID = "
.$tienda." ORDER BY precio ".$ordenar." LIMIT ".$inicial.",".$cantidad
            }
            
$DBresult = @mysql_db_query('proyecto_s',$sql);
          
            
/*// comprobación simple de error 
            if (!$DBresult) {
                return new soap_fault('Server', '', 'Error Interno del Servidor.');
            }*/
      
            
mysql_close($DBlink);
            
// Imprimiendo los resultados
            
$i =0;
            
dep("Recorremos tiendas...");
            while(
$array mysql_fetch_array($DBresultMYSQL_ASSOC)) {

                 
dep("Procesando tienda...".$array['descripcion']);

                 
$resultado[$i]= array(
                                    
'id'  => $array['id'],
                                    
'descripcion' => $array['descripcion'],
                                    
'precio'  => $array['precio'],
                                    
'seccion' => $array['seccion'],
                                    
'tipoarticulo'  => $array['tipoarticulo']
                                ); 
                 
$i++;
             }
            
// retornamos los datos
            //return mysql_fetch_array($DBresult, MYSQL_ASSOC);  
            
dep("Resultado...".$resultado[0]['descripcion']);
            
//NO ME DEVUELVE LOS DATOS ANTERIORES
            //return new soapval('return','tns:ListaArticulos',$resultado);
            
return $resultado;
        } 
        
// aceptamos solo enterpos
        
else {
          return new 
soap_fault('Client''''Los parametro a pasar solo deben ser enteros.');
        }  
     }

........
// Enviar el resultado como una respuesta SOAP por HTTP
    
if (isset($HTTP_RAW_POST_DATA)) {
       
$input $HTTP_RAW_POST_DATA;
    }
    else {
       
$input implode("\r\n"file('php://input'));
    }

    
$servidor->service($input);
    exit();