Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/02/2007, 11:52
ray_rockus
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 20 años, 6 meses
Puntos: 0
Webservices con PHP

Antes que nada un saludo.

No sé si alguien del foro haya trabajado más fondo con nuSOAP como herramienta para generar webservices con php. Desafortunadamente existe muy poca información sobre este rubro.

Yo me encuentro con la problemática de querer utilizar ciertas clases que ya tengo modeladas porque forman parte de un sistema de consulta. En base a ello me di a la tarea de generar una clase que abstrayera toda la funcionalidad que deseo posea el webservice. Posteriormente cree el archivo que sería en si el webservice, aquel donde se utilizan los objetos de nuSOAP y pensaba únicamente instanciar la clase que había yo creado.

Sin embargo, el resultado fue un error que acontinuacion muestro:

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/htdocs/proceda/clas/cConexion.php:57) in /usr/www/htdocs/proceda/ws/lib/nusoap.php on line 3281

Este es mi código:

Código PHP:
<?php
    
require_once("lib/nusoap.php");
    require_once(
"../clas/cWsGuardadoPedimento.php");
    
$ns="http://unixdev.reco/proceda/ws/";
    
$server = new Soap_Server();
    
$server->configureWSDL('wsGuardadoPedimento',$ns);
    
$server->wsdl->schemaTargetNamespace=$ns;

              
    
$server->register('procesarArchivo',
              array(
'sArch' => 'xsd:string','sFecha' =>'xsd:string'),
              array(
'return' => 'xsd:string'),
              
$ns);
    
    function 
procesarArchivo($sArch,$sFecha){
        
$oGuardPed = new cWsGuardadoPedimento($sArch,$sFecha);
        
$sRes=$oGuardPed->procesar();
        return new 
soapval('return','xsd:string',$sRes); 
    }

   
$server->service($HTTP_RAW_POST_DATA);
?>
Revisé varias veces asimismo intenté otras alternativas, y en el archivo donde se desa crear el webservice no permite requerir otro archivo aparte del nusoap.php.

La unica forma en la que logré darle la vuelta fue a través de un programa que corre en linea de comando cuya salida es capturada en el script donde se realiza el webservice.

Algo asi como:

wsMiWebService.php -> scMiWebService.php -> cWsMiWebService.php

Donde :

wsMiWebService.php : Contiene el llamado a la libreria nuSOAP y el llamado al resultado de la ejecucion del programa en linea de comando.

Su código es:

Código PHP:
<?php
    
require_once("lib/nusoap.php");
    
$ns="http://dominio.com/directorio/ws/";
    
$server = new Soap_Server();
    
$server->configureWSDL('wsMiWebService',$ns);
    
$server->wsdl->schemaTargetNamespace=$ns;

    
$server->register('procesarArchivo',
              array(
'sArch' => 'xsd:string','sFecha' =>'xsd:string'),
              array(
'return' => 'xsd:string'),
              
$ns);
    
    function 
procesarArchivo($sArch,$sFecha){
        
$sRes=shell_exec("php -f  /ruta/al/archivo/directorio/ws/scMiWebService.php $sArch '$sFecha'");
        return new 
soapval('return','xsd:string',$sRes); 
    }

   
$server->service($HTTP_RAW_POST_DATA);
?>
scMiWebService.php: Contiene en si la lógica que deseaba implementar en el archivo anterior.

cWsMiWebService.php : Contiene la descripción de la clasze con toda la funcionalidad del webservice

Como verán esto es darle muchas vueltas al punto, me gustaría saber si alguno de ustedes ya ha conseguido algo asi sin utilizar un archivo intermediario.

Espero comentarios de la comunidad y me gustaría lanzar de antemano la propuesta de poder eealizar en conjunto un tutorial en español para realizar webservices en PHP 5.

Saludos