Evilnapsis

Programming, Hacking and More

Desktop DevelopmentWeb Development

[WebService] Conectar un Sistema en PHP+MySQL con una aplicación en C# .NET

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.


<?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"))
}
?>

view raw

contacts.php

hosted with ❤ by GitHub

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);

[/code]

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] [/sociallocker]

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.

Agustin Ramos

Desarrollador de Software

Leave a Reply