Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] aplicando web service

Estas en el tema de aplicando web service en el foro de PHP en Foros del Web. Hola: Nunca antes habia usado WebService, inicié basandome en estos: ejemplo basico , concepto , ejecuto el cliente.php y efectivamente me trae los libros del ...
  #1 (permalink)  
Antiguo 19/11/2014, 16:42
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
aplicando web service

Hola:

Nunca antes habia usado WebService, inicié basandome en estos: ejemplo basico, concepto, ejecuto el cliente.php y efectivamente me trae los libros del ejemplo, pero también menciona que es posible crear el WSDL por separado que en dicho caso a mi me sale este error:
Código HTML:
Ver original
  1. no operations defined in the WSDL document!
El caso es que requiero traer N registros con N Campos de mi base de datos el cual lo tengo en un array en el servidor. considerando que estos datos podrían ser enormes, como los entregaría al cliente sabiendo que posteriormente estos serán guardados en otra base de datos.

gracias por su cooperación
  #2 (permalink)  
Antiguo 19/11/2014, 17:16
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: aplicando web service

puedes proporcionar lo que ya tienes para asi poder ayudarlo mejor
  #3 (permalink)  
Antiguo 20/11/2014, 09:28
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: aplicando web service

Este es el servidor "producto.php"
Código PHP:
Ver original
  1. require_once "lib/nusoap.php";
  2.  
  3.     function getProd($categoria) {
  4.         $link = mssql_connect('192.168.1.86', 'servidor', 'contrasena');
  5.          
  6.         if (!$link)
  7.             die('Unable to connect!');
  8.          
  9.         if (!mssql_select_db('pro_mujer', $link))
  10.             die('Unable to select database!');
  11.          
  12.         $result = mssql_query("SELECT a.codigo,a.codigo2,a.codigo3,p.nombre, p.otro, SUM( mont ) as 'prima' FROM ArchivoPS p join ArchivoSe a on (a.codigo2 = p.codigo2 and a.codigo2 = p.codigo2)  WHERE F_Efect between (SELECT DATEADD(mm, DATEDIFF(mm,0,'2014-06-30'), 0)) and '2014-06-30' and a.Prima > 0 group by p.codigo, p.codigo2 ,a.codigo3");
  13.  
  14.         if ($categoria == "libros") {
  15.             $datos = array();
  16.             $c = 0;
  17.             while ($row = mssql_fetch_array($result)) {
  18.                 for($i = 0; $i < 6; $i++) {
  19.                     $datos[$c][$i] = $row[$i];
  20.                 }
  21.                 $c++;
  22.             }
  23.             return $datos[0][0];
  24.         } else {
  25.             return "No hay productos de esta categoria";
  26.         }
  27.         mssql_free_result($result);
  28.     }
  29.    
  30.     $server = new soap_server();
  31.  
  32.     $server->configureWSDL("producto", "urn:producto");
  33.      
  34.     $server->register("getProd",
  35.         array("categoria" => "xsd:string"),
  36.         array("return" => "xsd:string"),
  37.         "urn:producto",
  38.         "urn:producto#getProd",
  39.         "rpc",
  40.         "encoded",
  41.         "Nos da una lista de productos de cada categoría");
  42.  
  43.     $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA :;
  44.     $server->service($HTTP_RAW_POST_DATA);

El cliente "cliente.php":
Código PHP:
Ver original
  1. require_once "lib/nusoap.php";
  2.     // $cliente = new nusoap_client("http://localhost/webservices/producto.php");
  3.     $cliente = new nusoap_client("libros.wsdl", true);
  4.      
  5.     $error = $cliente->getError();
  6.     if ($error) {
  7.         echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
  8.     }
  9.      
  10.     $result = $cliente->call("getProd", array("categoria" => "libros"));
  11.      
  12.     if ($cliente->fault) {
  13.         echo "<h2>Fault</h2><pre>";
  14.         print_r($result);
  15.         echo "</pre>";
  16.     }
  17.     else {
  18.         $error = $cliente->getError();
  19.         if ($error) {
  20.             echo "<h2>Error</h2><pre>" . $error . "</pre>";
  21.         }
  22.         else {
  23.             echo "<h2>Librossss</h2><pre>";
  24.             echo $result;
  25.             echo "</pre>";
  26.         }
  27.     }

y el WSDL generado por el servidor "libros.wsdl"
Código XML:
Ver original
  1. <definitions targetNamespace="urn:producto">
  2.     <types>
  3.         <xsd:schema targetNamespace="urn:producto">
  4.             <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  5.             <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
  6.         </xsd:schema>
  7.     </types>
  8.     <message name="getProdRequest">
  9.         <part name="categoria" type="xsd:string"/>
  10.     </message>
  11.     <message name="getProdResponse">
  12.         <part name="return" type="xsd:string"/>
  13.     </message>
  14.     <portType name="productoPortType">
  15.         <operation name="getProd">
  16.             <documentation>Nos da una lista de productos de cada categorÃ*a</documentation>
  17.             <input message="tns:getProdRequest"/>
  18.             <output message="tns:getProdResponse"/>
  19.         </operation>
  20.     </portType>
  21.     <binding name="productoBinding" type="tns:productoPortType">
  22.         <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  23.         <operation name="getProd">
  24.             <soap:operation soapAction="urn:producto#getProd" style="rpc"/>
  25.             <input>
  26.                 <soap:body use="encoded" namespace="urn:producto" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  27.             </input>
  28.             <output>
  29.                 <soap:body use="encoded" namespace="urn:producto" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  30.             </output>
  31.         </operation>
  32.     </binding>
  33.     <service name="producto">
  34.         <port name="productoPort" binding="tns:productoBinding">
  35.             <soap:address location="http://localhost/webservices/producto.php"/>
  36.         </port>
  37.     </service>
  38. </definitions>

Gracias
  #4 (permalink)  
Antiguo 03/12/2014, 15:52
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: aplicando web service

Comprobado nusoap no funciona en versiones php > 5.3. lo probé en linux incialmente funciona pero a medias, no le doy mas vueltas usen soap nativa de php que es igual de facil.

Saludos

Etiquetas: registro, service
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:59.