ahora me toca hacer un servicio web com php. encontre la libreria nusoap y baje la ultima que esta en el source forge el codigo de mi servicio es el siguiente, cuando no regresaba yo una lista de producto y solo regreso un producto al agregar la referencia al servicio en el visual studio 2010 todo funciona perfecto, tal y como otros web services que he usado. pero al querer regresar una lista de objetos osease un array de arrays no lo ve no me genera bien la referencia en otras palabras no recupera bien la informacion dle servicio.
cualquier ayuda es apreciada.
PHP- con Notepad++ y xdebug.
C#- Visual Studio 2010 .net 4.0
servidor de prueba WampServer con php 5.2.6
myql 5.0.1
Nusoap 0.95
Production Server
XAMP PHP 5.2.11
mysql 5.1
en ambos me sucede el mismo error.
Código:
<?php include('lib/nusoap.php'); $server = new soap_server; $server->configureWSDL('obtenerProductos', 'urn:obtenerProductos'); $server->wsdl->addComplexType('RenglonProducto','complexType','struct','all','', array( 'Id_Producto' => array('name' => 'Id_Producto', 'type' => 'xsd:string'), 'Codigo' => array('name' => 'Codigo', 'type' => 'xsd:string'), 'Descripcion' => array('name' => 'Descripcion', 'type' => 'xsd:string' ), 'PrecioBaseVenta' => array('name' => 'PrecioBaseVenta', 'type' => 'xsd:string' ), )); $server->wsdl->addComplexType('ArrayOfRenglonProducto','complexType','array','','SOAP-ENC:Array', array(), array( array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:RenglonProducto[]' ) ), 'tns:RenglonProducto'); $server->xml_encoding = "utf-8"; $server->soap_defencoding = "utf-8"; $server->register('obtenerProductos', array('Id_Producto' => 'xsd:int'), array('return'=>'tns:'ArrayOfRenglonProducto'), 'urn:Servicio', 'urn:Servicio#obtenerProductos', 'rpc', 'literal', 'Este método devuelve la lista de productos.'); function obtenerProductos($id){ $con = new mysqli("localhost","admin","admin","mybase"); $sql = " SELECT Id_Producto, Codigo, Descripcion, PrecioBaseVenta FROM producto"; $stmt = $con->prepare($sql); $stmt->execute(); $stmt->bind_result($col1,$col2,$col3,$col4); //$stmt->fetch(); $i=0; while ($stmt->fetch()) { // printf ("%s (%s)\n", $row[0], $row[1]); $row[0] = $col1; $row[1] = $col2; $row[2] = $col3; $row[3] = $col4; $rows[$i]=$row; echo $rows[1]; $i=$i+1; } return $rows;//array('Id_Producto' => $row[0],'Codigo' => $row[1],'Descripcion' => $row[2],'PrecioBaseVenta' => $row[3]); } // Use the request to (try to) invoke the service $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $server->service($HTTP_RAW_POST_DATA); ?>