Archivo del sitio

Cliente SOAP en C# consume a Servidor SOAP en PHP


Bien este post esta dedicado a mi compadre ya que el lo queria autografiado, ahora mucho más fácil de ver la siguiente entrega de WS esta vez consumiremos el ws de aquí, pero con C# le echaremos un pequeño ojo al código:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace wsCliente
{
public partial class Form1 : Form
{
private string imagen { get; set; }
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
cbImagen.Items.Add(new ComboItem("Selecciona un Item", -1));
cbImagen.Items.Add(new ComboItem("Item 1", 0));
cbImagen.Items.Add(new ComboItem("Item 2", 1));
cbImagen.Items.Add(new ComboItem("Item 3", 2));
cbImagen.SelectedItem = cbImagen.Items[0];
Cargar_ListaItems();
}

private void Cargar_ListaItems()
{
wsEjemplo.wsEjemploPortTypeClient ws = new wsEjemplo.wsEjemploPortTypeClient();
try
{
wsEjemplo.Producto[] productos = ws.ObtenerItems();
dgInfo.DataSource = productos;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void cbImagen_DrawItem(object sender, DrawItemEventArgs e)
{
ComboItem item = cbImagen.Items[e.Index] as ComboItem;
e.DrawBackground();
if (item.ImageIndex >= 0 && item.ImageIndex < imageList1.Images.Count)
e.Graphics.DrawImage(imageList1.Images[item.ImageIndex], new PointF(e.Bounds.Left, e.Bounds.Top));
e.Graphics.DrawString(item.Etiqueta, e.Font, new SolidBrush(e.ForeColor), new PointF(e.Bounds.Left + imageList1.ImageSize.Width + 1, e.Bounds.Top));
}

private void btAgregar_Click(object sender, EventArgs e)
{
wsEjemplo.wsEjemploPortTypeClient ws = new wsEjemplo.wsEjemploPortTypeClient();
wsEjemplo.Producto prod = new wsEjemplo.Producto();
prod.Codigo = tbCodigo.Text;
prod.Nombre = tbNombre.Text;
prod.Descripcion = tbDescripcion.Text;
prod.Imagen = imagen;
prod.Precio = Convert.ToDouble(tbPrecio.Text);
prod.Existencia = Convert.ToInt32(tbExistencia.Text);
prod.ExistenciaMin = Convert.ToInt32(tbExistenciaMin.Text);
try
{
wsEjemplo.Respuesta resp = ws.InsertarItem(prod);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Cargar_ListaItems();
}

private void cbImagen_SelectedIndexChanged(object sender, EventArgs e)
{
switch (((ComboItem)cbImagen.SelectedItem).ImageIndex)
{
case 0:
imagen = "Item1.jpg";
break;
case 1:
imagen = "Item2.jpg";
break;
case 3:
imagen = "Item3.jpg";
break;
default:
imagen = "";
break;
}
}
}
}

Este es nuestro código principal como podemos ver no existe una real complicación, los códigos principales  wsEjemplo.wsEjemploPortTypeClient ws = new wsEjemplo.wsEjemploPortTypeClient(); en la cual creamos una instancia del ws la cual podemos reutilizar despues.

Y el wsEjemplo.Producto prod = new wsEjemplo.Producto();  crea un objeto de tipo producto.

Los invito a descargar el ejemplo para que se diviertan un rato 🙂

Descargar Ejemplo

Anuncios

Reparar el error Deprecated: Function ereg() is deprecated con php5 en NuSOAP


Para poder arreglar este embrollo que al principio nos puede generar demasiados conflictos solo tenemos que ir al php.ini y en la sección Error handling and logging podemos agregar la linea:

error_reporting  =  E_ALL & ~E_NOTICE & ~E_DEPRECATED

En el caso de Server2Go podemos encontrar el archivo en \server2go\server\config_tpl y en el caso de los Linux basados en Debian esta en /etc/php5/apache/php.ini en cuanto al windows lo podemos encontrar en la ruta donde lo hallamos instalado \PHP\php.ini-dist no tengo nada más por el momento si tienen preguntas dejen las en los comentarios para poder ir las contestando.

Consumiendo SOAP con NuSOAP desde PHP


Bien este post esta dedicado a mi compadre ya que el lo queria autografiado, por otro lado debo aceptar que he estado algo atareado aun que en realidad he estado sumido en unas investigaciones comenzaremos escribiendo un codigo muy simple en PHP, el cual va a consumir el WS que ha sido posteado aquí

El codigo de nuestro index será el siguiente:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo Cliente WS</title>
</head>
<?
require_once("lib/nusoap.php");
?>
<body>
<fieldset><legend>Agregar Item</legend>
<form action="modulos/AgregaItem.php" method="post" enctype="multipart/form-data" name="AgregaItem" id="AgregaItem">
Codigo:
<input name="Codigo" type="text" id="Codigo" />
<br />
Nombre:
<input name="Nombre" type="text" id="Nombre" />
<br />
Descripcion:
<input name="Descripcion" type="text" id="Descripcion" />
<br />
Imagen:
<select name="Imagen" id="Imagen">
<option value="Item1.jpg">Item 1</option>
<option value="Item2.jpg">Item 2</option>
<option value="Item3.jpg">Item 3</option>
</select>
<br />
Precio:
<input name="Precio" type="text" id="Precio" />
<br />
Existencia:
<input name="Existencia" type="text" id="Existencia" />
<br />
ExistenciaMin:
<input name="ExistenciaMin" type="text" id="ExistenciaMin" />
<br />
<input name="Agregar" type="submit" id="Agregar" value="Agregar" />
</form>
</fieldset>

<fieldset>
<legend>Modificar Items </legend>
<table width="657" border="1">
<tr>
<th scope="col">C&oacute;digo</th>
<th scope="col">Nombre</th>
<th scope="col">Descripci&oacute;n</th>
<th scope="col">Imagen</th>
<th scope="col">Precio</th>
<th scope="col">Existencia</th>
<th scope="col">Exist Min</th>
<th scope="col">Modificar</th>
<th scope="col">Borrar</th>
</tr>
<?
$soapclient = new soapclient( 'http://localhost:4001/wsEjemplo/index.php');
$resp = $soapclient->call('ObtenerItems');
$i = 0;
while (!empty($resp[$i]["Id"])) {
?>
<tr>
<td><?= $resp[$i]["Codigo"] ?></td>
<td><?= $resp[$i]["Nombre"] ?></td>
<td><?= $resp[$i]["Descripcion"] ?></td>
<td><? if (!empty($resp[$i]["Imagen"])) { echo "<img src=\"img/".$resp[$i]["Imagen"]."\" />"; } ?></td>
<td><?= $resp[$i]["Precio"] ?></td>
<td><?= $resp[$i]["Existencia"] ?></td>
<td><?= $resp[$i]["ExistenciaMin"] ?></td>
<td><form id="form1" name="form1" method="post" action="">
<label>
<input type="submit" name="Submit" value="Modificar" />
</label>
</form>    </td>
<td><form id="MCod" name="MCod" method="post" action="">
<label>
<input name="BCod" type="submit" id="BCod" value="Borrar" />
</label>
</form>    </td>
</tr>
<?
$i++;
}
?>
</table>
</fieldset>
</body>
</html>

Ahora veremos el archivo AgregaItem.php


href="../index.php">Regresar
<?php
require_once("../lib/nusoap.php");

$producto["Id"] = 0;
$producto["Codigo"] = $_POST["Codigo"];
$producto["Nombre"] = $_POST["Nombre"];
$producto["Descripcion"] = $_POST["Descripcion"];
$producto["Imagen"] = $_POST["Imagen"];
$producto["Precio"] = (float)$_POST["Precio"];
$producto["Existencia"] = (int)$_POST["Existencia"];
$producto["ExistenciaMin"] = (int)$_POST["ExistenciaMin"];

$soapclient = new soapclient('http://localhost:4001/wsEjemplo/index.php?wsdl',true);
$resp = $soapclient->call('InsertarItem',array('producto' => $producto));
if ($soapclient->fault) {
echo 'No se pudo completar la operación';
echo $soapclient->getError();
die();
}
echo "Ok: ".$resp["Ok"]."
";
echo "Mensaje: ".$resp["Mensaje"];
var_dump($producto);
?>

Este ultimo archivo tiene la unica complicación sobre la construccion del Arreglo, si el arreglo no es bien construido no podrá ser comprendido por el ws :).

Descargar Ejemplo

Creando WebServices con PHPDBC min y NuSOAP


Como ya algunos se han percatado en mi twitter, se ha decidido partir en 2 archivos el phpdbc, para usarlos en 2 tipos de desarrollos especificos, como lo son el Desarrollo de WebServices, y el Desarrollo de Paginas Web, dejando 2 proyectos independientes. PHPDBC min y PHPDBC web estos pueden ser descargados desde el Sabado 20 de Noviembre desde la Siguiente Dirección http://sourceforge.net/projects/phpdbc2/ en el archivo phpdbc-2.0.1.zip el cual traerá los 2 archivos.

Despues de la pequeña introducción comenzaremos por definir este Ejemplo para saber que es lo que vamos a hacer.

  1. Definición del Ejemplo
  2. Creación de Base de Datos.
  3. Desarrollo de WebService.
    1. Creación de Metodo de Inserción.
    2. Creación de Método de Update.
    3. Creación de Método de Borrado.
    4. Creación de Método de Obtención de Registros.
    5. Creación de método de Para Obtener un Registro.
  4. Visualización del WebService y prueba del mismo.

Lee el resto de esta entrada

A %d blogueros les gusta esto: