Imaginen que tenemos una aplicación en un servidor web en internet y queremos acceder a esos datos con una aplicación de escritorio en C# .NET, pues eso lograremos en este articulo.
Vamos a usar lo mas cercano a WebServices, pero que es un WebService? Un WebService o servicio web, es una tecnologia que permite intercambiar datos entre aplicaciones. Y lo mejo que permite establecer comunicación con diferentes lenguajes de programación y en diferentes plataformas (Linux, Windows, Mac).
Lo que vamos a lograr con este ejemplo es:
- Obtener una lista de contactos de un servidor
- Enviar datos para agregar un nuevo contacto
Introducción
Vamos a tener 2 aplicaciones o sistemas, una en PHP y otra con C# .NET 4.5
La aplicación en PHP estara en un servidor en linea y se conectara con la base de datos mysql tambien en linea. La aplicacion en C# .NET se conectara a este sistema mediante peticiones HTTP y la aplicación con PHP le enviara datos y procesara las peticiones de la aplicacion en C#.
Aplicación en PHP
Podemos hacer una aplicación en PHP completa con sus crus y todo, pero ahora nos enfocaremos en una aplicacion que envie y procese los datos. Esta aplicacion sera nuestro WebService o servicio web.
Base de datos
La base de datos debe contar con la siguiente estructura.
[code language=”sql”] create database contactapp;use contactapp;
create table contact(
id int not null auto_increment primary key,
name varchar(255),
lastname varchar(255),
address varchar(255),
phone varchar(255),
email varchar(255)
);
[/code]
Servicio Web
La aplicación o servicio web lo muestro en un gist.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
@author evilnapsis | |
*/ | |
$con = new mysqli("localhost","root","","contactapp"); | |
if(isset($_GET["opt"]) && $_GET["opt"]=="all"){ | |
$sql = "select * from contact"; | |
$query = $con->query($sql); | |
$data = array(); | |
while($r = $query->fetch_assoc()){ | |
$data[] = $r; | |
} | |
echo json_encode($data); | |
} | |
else if(isset($_GET["opt"]) && $_GET["opt"]=="add"){ | |
$sql = "insert into contact (name,lastname,address,phone,email) values (\"$_POST[name]\",\"$_POST[lastname]\",\"$_POST[address]\",\"$_POST[phone]\",\"$_POST[email]\" )"; | |
$con->query($sql); | |
echo json_encode(array("status"=>"success")) | |
} | |
?> |
Es un ejemplo sencillo, pero funcional.
La primera parte de las lineas 7 a la 15 se encarga de generar una lista con los contactos y servirlos en un JSON.
La segunda parte de las lineas 16 a la 20, reciben los datos vía POST y lo guardan en la base de datos.
Seguridad
De momento esto es un poco inseguro, ya que cualquiera que tenga la URL del sistema puede hacer peticiones al sistema, en otro articulo lo resolveremos usando credenciales.
Instalacion
Puedes instalar el sistema en localhost o en un servidor, si lo instalar en localhost en una carpeta, para hacer peticiones deberias escribir: http://localhost/tucarpeta/contactapp/contacts.php?opt=all
Por el momento tengo el sistema en linea y lo puedes probar en http://evilnapsis.com/demo/contactapp/contacts.php?opt=all
Aplicacion C# .NET 4.5
Ya tenemos preparado el web service ahora tenemos que conectarnos.
Es necesario que la aplicación en C# este con .NET 4.5 por que usaremos la clase HttpClient que esta disponible apartir de esta version.
[code language=”csharp”]private static readonly HttpClient client = new HttpClient();
[/code]También usaremos la librería Newtonsoft.Json para descifrar el resultado JSON de la lista de contactos, se debe agregar el .DLL como referencia.
Pagina de NewtonSoft: https://www.newtonsoft.com/json
Clase Contact
La clase contact sirve para tener en cuenta los campos y datos de la tabla que usaremos para distribuir los datos JSON.
Debemos tener en cuenta que los campos deben coincidir con los campos resultados del JSON.
[code language=”csharp”]class Contact
{
public string id { get; set; }
public string name { get; set; }
public string lastname { get; set; }
public string address { get; set; }
public string phone { get; set; }
public string email { get; set; }
}
[/code]Obtener lista de contactos
[code language=”csharp”]var response = client.GetStringAsync("http://evilnapsis.com/demo/contactapp/contacts.php?opt=all");
var responseString = response.Result;
List<Contact> results = JsonConvert.DeserializeObject<List<Contact>>(responseString);
Leemos el resultado JSON con una Peticion GET y lo guardamos en una lista, previamente deserializamos el resultado de la peticion GET.
Recuerden cambiar esta URL http://evilnapsis.com/demo/contactapp/contacts.php?opt=all por la de ustedes.
Enviar datos de un nuevo contacto
Para enviar los datos de un nuevo contacto usaremos POST.
[code language=”csharp”]var values = new Dictionary<string, string>
{
{ "name","Evilnapsis" },
{ "lastname", "Software" },
{ "address", "Mexico" },
{ "phone", "+529371331142" },
{ "email", "evilnapsis@gmail.com" }
};
var content = new FormUrlEncodedContent(values);
var response = client.PostAsync("http://evilnapsis.com/demo/contactapp/contacts.php?opt=add", content);
[/code]Usamos un diccionario para generar una especie de array que enviaremos como datos del post.
Recuerden cambiar esta URL http://evilnapsis.com/demo/contactapp/contacts.php?opt=add por la de ustedes.
Proyecto C# .NET 4.5
Este es el resultado del proyecto C# .NET que realice y se los incluyo en el paquete de descarga.
Descarga
A continuación 2 proyectos.
[sociallocker]- Proyecto en C# .NET 4.5: https://drive.google.com/file/d/1-PArfBIJYAzZr_O5vmNchRIzabbIBLf_/view?usp=sharing
- Proyecto en PHP: https://drive.google.com/file/d/1F8oazuA6DvkzGGdrAmEnC9IwCD8__-Hh/view?usp=sharing
Pueden encontrar el ejecutable y la libreria Newtonsoft.json en GetProductsIL2\GetProductsIL2\bin\Debug\
Posibilidades
Con esta técnica podemos realizar cualquier cosa.
Ademas el Webservice en PHP sirve para hacer peticiones con cualquier lenguaje de programación como Python o java.