Los Webservice son servicios de funciones o clases remotas consumidas por un programa local de forma que se puede utilizar para transferir información entre programas mediante protocolos ya establecidos.
Los WebService pueden entregarnos aplicaciones ligeras, los recursos de un teléfono Iphone o Android son limitados y mientras más procesan más rápido agotan su batería. Si una aplicación consume un webservice, toda la lógica de negocios, todo el procesamiento detrás de ese webservice es ejecutado por el servidor que lo provee.
Básicamente un WEBSERVICE provee clases remotas que pueden ser instanciadas en una aplicación o programa local sin importar el lenguaje remoto.
Cualquier lenguaje que soporte WEBSERVICE para consumir o para exportarlos puede recibir o enviar información sin importar en que lenguaje se exporta o se consume el webservice.
Un ejemplo seria un webservice corriendo en cluster de cientos de procesadores y computadoras, haciendo cálculos en segundos que a una PC tradicional le tomaría horas y ni decir de un simple iphone o android que agotarían sus baterías antes de concluir el cálculo
Con un webservice una aplicación de de Iphone o Android podría iniciar ese cálculo en el cluster y esperar el resultado ya procesado. A la vista del usuario la aplicación ha resuelto su problema y no le importa si los cálculos fueron hechos en su teléfono o si fueron enviados a un cluster remoto
Como el lenguaje más común de la red es PHP, aquí mostrare el código más básico para tener un WebService que puede ser consumido remotamente por una aplicación en C#
En PHP existe una librería llamada NuSoap, se descarga y descomprime en el directorio donde está la aplicación Webservice que deseas exportar
En este ejemplo hare el código sencillo del hola mundo o saludo.
Código en PHP
<?php
require_once “lib/nusoap.php”;
// La funcion que se va a exportar
function saludo($nombre)
{
return “Hola “.$nombre;
}// Se crea el objeto para el webservice
$servicio = new soap_server();
// Se inicializa el webservice
$servicio->configureWSDL(“webserv”, “urn:webserv”);
// Se registra la funcion que se va a exportar, con el tipo de datos de
entrada y el tipo de dato de salida
$servicio->register(“saludo”,array(“nombre” =>
“xsd:string”),array(“return” => “xsd:string”));
// Como el servicio es proveedo por un servidor WEB la informacion del
webservice sera recibida en METHOD POST
$servicio->service($HTTP_RAW_POST_DATA);
Con este código ya tenemos un webservice escrito en PHP, para consumirlo en C# hay que escribir un proxy se enlace al webservice y convertirlo a una clase local, esto son muchas líneas de código. Afortunadamente la mayoría de los IDE de .NET como Visual Studio o SharpDevelop crean este proxy e importan el WebService con solo agregar una REFERENCIA WEB en la que se le pasa el URL del archivo PHP o cualquier otro lenguaje donde radica el WEB Service.
Un paréntesis para quienes usan .NET con Mono en GNU/Linux
Si no tienes un IDE y estas programando en consola por ejemplo en C# pero con Mono, se usa el comando wsdl para generar el proxy
wsdl https://www.lastdragon.net/webserv/serv.php?wsdl
Writing file ‘webserv.cs’
El archivo resultante con el proxy es webserv.cs que debe ser compilado a una DLL
mcs /target:library webserv.cs -r:System.Web.Services
El resultado sería webserv.dll, que ya puede ser agregada a la compilación del programa mono
mcs /r:webserv.dll consumo.cs
De regreso a SharpDevelop o Visual Studio.
https://www.lastdragon.net/webserv/serv.php
Una vez importado el webservice se usa como si se tratara de una librería mas de C# y de la misma forma se aprovechan sus clases.
Código en C#
using System;
using System.Web.Services;
using webservclient;class Program
{
public static void Main(string[] args)
{
webserv
x = new webserv();
Console.WriteLine(x.saludo(“Last Dragon”));
Console.ReadKey(true);
}
}
El resultado de la ejecusion es:
Entonces todo el proceso se llevaria acabo en PHP y cada que se llame a saludo() se realizaria la comunicacion entre .NET y el script en PHP?
Exacto. así es.
Como puedo consumir ese webservice desde un cliente programado en el mismo php?
Este es el cliente en php jeje:
call(‘saludo’, array(‘nombre’ => ‘SERGINHO’));
// Display the result
print_r($result);
?>
call(‘saludo’, array(‘nombre’ => ‘SERGINHO’));
// Display the result
print_r($result);
?>
que almaceno en $HTTP_RAW_POST_DATA? porque no me funciona cuando importo como referencia web…