Foros del Web » Programando para Internet » PHP »

WSDL no se despliega

Estas en el tema de WSDL no se despliega en el foro de PHP en Foros del Web. Que tal, Estoy en el desarrollo de un Servicio Web pero tengo un problema: Si trato de entrar a la URL dónde se ubica mi ...
  #1 (permalink)  
Antiguo 29/12/2009, 17:40
Avatar de solinem  
Fecha de Ingreso: diciembre-2007
Mensajes: 61
Antigüedad: 16 años, 4 meses
Puntos: 0
WSDL no se despliega

Que tal,
Estoy en el desarrollo de un Servicio Web pero tengo un problema:
Si trato de entrar a la URL dónde se ubica mi archivo WSDL, en lugar de mostrarlo, aparece un cuadro de diálogo para guardarlo.
Alquien en otro foro me respondió que probablemente mi servidor no "quiere" servir el WSDL.
¿Alguien sabe que está sucediendo y/o cómo resolverlo?
__________________
Agradezco de antemano su valiosísima ayuda.
Marco Ríos
Ciudad de México
  #2 (permalink)  
Antiguo 29/12/2009, 18:08
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: WSDL no se despliega

Cita:
Iniciado por solinem Ver Mensaje
¿Alguien sabe que está sucediendo y/o cómo resolverlo?
¿Tenemos que adivinar qué y cómo lo estás haciendo?; sin información, saber nada, a lo más, suponer...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 29/12/2009, 18:25
Avatar de solinem  
Fecha de Ingreso: diciembre-2007
Mensajes: 61
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: WSDL no se despliega

Perdón por la omisión
El archivo WSDL es solo una parte de todo el servicio web, a continuación pongo el código del archivo "catalog.wsdl"
Código:
<?xml version ='1.0' encoding ='UTF-8'?>
<definitions name='Catalog' 
  targetNamespace='http://example.org/catalog'  
  xmlns:tns=' http://example.org/catalog '  
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'  
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'  
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' 
  xmlns='http://schemas.xmlsoap.org/wsdl/'> 
   <message name='getCatalogRequest'> 
     <part name='catalogId' type='xsd:string'/> 
   </message> 
   <message name='getCatalogResponse'> 
     <part name='Result' type='xsd:string'/> 
   </message> 
   <portType name='CatalogPortType'> 
     <operation name='getCatalogEntry'> 
      <input message='tns:getCatalogRequest'/> 
      <output message='tns:getCatalogResponse'/> 
     </operation> 
   </portType> 
   <binding name='CatalogBinding' type='tns:CatalogPortType'> 
     <soap:binding style='rpc' 
      transport='http://schemas.xmlsoap.org/soap/http'/> 
     <operation name='getCatalogEntry'> 
      <soap:operation soapAction='urn:localhost-catalog#getCatalogEntry'/> 
      <input> 
        <soap:body use='encoded' namespace='urn:localhost-catalog'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
      </input> 
      <output> 
        <soap:body use='encoded' namespace='urn:localhost-catalog' 
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
      </output> 
     </operation> 
   </binding> 
   <service name='CatalogService'> 
     <port name='CatalogPort' binding='CatalogBinding'> 
      <soap:address location='http://localhost/ws/soap-server.php'/>
     </port> 
   </service>
</definitions>
El código del servidor "soap-server.php"
Código:
<?php 
function getCatalogEntry($catalogId) { 
  if($catalogId=='catalog1')
return '<?xml version="1.0"?>
<reservation_response><order><code>GDLA4E-37</code><date>2009-12-06</date><package>100% TEQUILA Y AVENTURA&gt; EL AGUACATILLO</package><total>3366</total></order></reservation_response>';
elseif ($catalogId='catalog2')
return '<?xml version="1.0"?>
<reservation_response><order><code>GDLA4E-37</code><date>2009-12-06</date><package>100% TEQUILA Y AVENTURA&gt; EL AGUACATILLO</package><total>3366</total></order></reservation_response>';
} 
ini_set("soap.wsdl_cache_enabled", "0"); 
$server = new SoapServer("catalog.wsdl"); 
$server->addFunction("getCatalogEntry"); 
$server->handle();
?>
Y el del cliente "soap-client.php"
Código:
<?php  
  $client = new SoapClient("http://10.132.44.205/catalog.wsdl");
  $catalogId='catalog2';
  $response = $client->getCatalogEntry($catalogId);
  echo $response;
?>
Si ubico los 3 archivos en el mismo servidor y directorio todo funciona bien, pero si el cliente lo ubico en otro servidor, aparece un mensaje de error:
Código:
Fatal error:  Uncaught SoapFault exception: [Client] DTD are 
not supported by SOAP in C:\xampp\htdocs\soap-client.php:5 
Stack trace: #0 [internal function]: SoapClient->__call('getCatalogEntry', 
Array) #1 C:\xampp\htdocs\soap-client.php(5): 
SoapClient->getCatalogEntry('catalog2') #2 {main}   thrown in 
C:\xampp\htdocs\soap-client.php on line 5
 
Este mismo problema lo subí a un foro en meetup.com (The Los Angeles PHP Developers Meetup Group) y la respuesta final parece ser "El servidor, de alguna manera, no quiere servir el WSDL"
Es por eso que estoy tratando de aislar el problema, esperando que si se resuelve esto, todo lo demás funcione (o de plano se descarte)
__________________
Agradezco de antemano su valiosísima ayuda.
Marco Ríos
Ciudad de México

Última edición por solinem; 29/12/2009 a las 18:55
  #4 (permalink)  
Antiguo 29/12/2009, 20:06
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: WSDL no se despliega

Cita:
Iniciado por solinem Ver Mensaje
Si ubico los 3 archivos en el mismo servidor y directorio todo funciona bien, pero si el cliente lo ubico en otro servidor, aparece un mensaje de error:
¿Exactamente el mismo código en el cliente?, osea, ¿haciendo referencia a su propia IP? ...

Primero, dices que si intentas abrir directamente el archivo wsdl desde el navegador se intenta descargar, eso no es correcto. Mira en la configuración de apache, debería tener como DefaultType el valor text/plain.

Segundo, en tu WSDL como punto final prueba colocar la URL con la IP de tu servicio, esto es, cambiar esto:
Código XML:
Ver original
  1. <soap:address location='http://localhost/ws/soap-server.php'/>
por esto:
Código XML:
Ver original
  1. <soap:address location='http://10.132.44.205/ws/soap-server.php'/>
... o donde se encuentre el archivo PHP. Ahí hay una inconsistencia, en el cliente dices el WSDL está la carpeta raíz del servidor, pero el archivo PHP está dentro de ws/ ... corrígelo según tus valores.

Por último, en tu cliente pasa como opciones esa misma URL y el namespace que declaras en tu WSDL. Esto es, algo como:

Código PHP:
Ver original
  1. <?php  
  2.   $client = new SoapClient("http://10.132.44.205/catalog.wsdl",
  3.                            array('location' => 'http://10.132.44.205/ws/soap-server.php',
  4.                                  'uri' => 'urn:localhost-catalog'));
  5.   $catalogId='catalog2';
  6.   $response = $client->getCatalogEntry($catalogId);
  7.   echo $response;

Ah, y un detalle: en tu servidor no utilices las llaves de cierre de PHP (?>), evita espacios que puedan ser enviados sin querer, y en tu cliente asegúrate no tengas nada antes de <?php que según el mensaje de error se produce en la línea 5, cuando según tu código en esa línea se hace el echo ... el error debería producirse en la llamada a la función. Si en efecto no tienes nada antes de <?php, quizá tu editor esté agregando el BOM ... ¿qué editor estás usando? ...

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 29/12/2009, 20:21
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Respuesta: WSDL no se despliega

Cita:
Iniciado por jam1138 Ver Mensaje
Si en efecto no tienes nada antes de <?php, quizá tu editor esté agregando el BOM ... ¿qué editor estás usando? ...
Amplio un poco, aunque es ya un tanto fuera de tema.

BOM se refiere al Byte Order Mark: http://en.wikipedia.org/wiki/Byte_order_mark

Eclipse, al menos hace unas versiones atrás, lo añadía (no sé ahora). Algunos editores --creo Notepad++-- igual lo añaden, pero al guardar te dan la opción de no hacerlo. Busca en tu editor si tiene esta opción. En una FAQ se menciona la utilización de un editor hexadecimal para comprobarlo:

http://www.forosdelweb.com/wiki/PHP:...lready_sent%3F

Como sea, esto solo lo digo porque el mensaje de error no coindice con la línea donde debería producirse. Aquí se aprecia porque hay poco código ...

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 10:19.