Vamos a crear un web service y lo almacenaremos del lado del cliente, el propósito de ésta aplicación es que resuelva ecuaciones de segundo grado por medio de la fórmula general, para esto usaremos el marco de trabajo de Visual Studio 2010 y el lenguaje de programación C# en ambiente web, es decir, arquitectura cliente-servidor. Esta poderosa herramienta de Microsoft funciona con un Framework sobre el sistema operativo Windows; para este ejercicio, usaré Windows Server 2008 Enterprise y el Service Pack 2. El propósito de este post es mostrar paso a paso el desarrollo de un web service y probar que funcione correctamente.
La fórmula cuadrada devuelve dos valores y recibe tres parámetros. Aquí está la ecuación:
Dicha fórmula soluciona ecuaciones cuadradas:
Cabe mencionar que una ecuación cuadrada es el resultado de la multiplicación de dos binomios:
Donde a, b y c son números reales constantes y x es una variable. Nuestro web service calculará los valores de x1 y de x2 o mejor dicho, la x del primer binomio y la x del segundo binomio.
Construyendo el WebService
Creando la solución
- Abramos nuestro Visual Studio 2010
- Vayamos a Archivo – Nuevo – Sitio Web…
- Aparecerá un cuadro de diálogo, en la parte izquierda vemos una lista de la cual seleccionaremos Plantillas instaladas y dentro seleccionaremos Visual C#
- En el mismo cuadro de diálogo, en la parte central demos un clic en el ítem Sitio web ASP.NET
- Ahora demos una ruta para guardar nuestra solución, yo lo guardaré en el escritorio en una carpeta que llamaré web_service. El nombre de ésta carpeta formará parte de la ruta del enlace del web service, ver figura 1.5
- Demos un clic en el botón Aceptar para crearla
Agregando el archivo web service
- Inmediatamente nos aparecerá nuestro marco de trabajo. Hasta ahorita tenemos un sitio web común y corriente, vamos a convertirlo en Web Service, para esto, vamos al explorador de proyectos y damos clic derecho encima del nombre del servicio
- Aparecerá un menú, demos un clic en Agregar nuevo elemento…
- Aparecerá un cuadro de diálogo, en la parte central deslizamos el scroll para bajar en la lista hasta encontrar el ítem Servicio Web, lo seleccionamos dando un clic y posteriormente pulsamos el botón Agregar
- En el Explorador de Soluciones veremos dos nuevos archivos, uno en la raíz de nombre WebService.asmx y otro en la carpeta App_Code de nombre WebService.cs del cual nos aparece el código en el editor. Con un clic derecho sobre el archivo WebService.asmx vamos a renombrar y lo llamaremos miServicio.asmx, este archivo especifica parámetros iniciale del webservice, tales como el archivo que contiene la clase, la dirección, ruta y el lenguaje de programación. Renombremos también el archivo WebService.cs a elServicio.cs
Creando la funcionalidad del Web Service
- En el explorador de soluciones, demos un clic derecho sobre la carpeta App_Code y del menú que aparece buscamos el ítem Agregar nuevo elemento…
- Aparecerá un cuadro de diálogo, busquemos en la lista el ítem de nombre Clase, lo seleccionamos y en la caja de texto nombre escribimos Respuesta.cs sustituyendo el nombre por default y damos un clic en Agregar, se creará un nuevo archivo en la carpeta indicada, es la clase que entregará nuestros resultados, el código predefinido de ésta es el siguiente:
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <sumary> /// Enviar las dos respuestas /// </sumary> public class Respuesta { public Respuesta() { // // TODO: Agregar aquí la lógica // } }
- Vamos a quitar el constructor ya que no lo usaremos y agregaremos dos atributos privados a la clase y dos propiedades de lectura / escritura. El código quedará así:
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <sumary> /// Enviar las dos respuestas /// </sumary> public class Respuesta { // Atributos de la clase private double _valorX1 = 0; private double _valorX2 = 0;
// Propiedades de la clase public double valorX1 { get { return _valorX1; } set { _valorX1 = value; } } public double valorX2 { get { return _valorX2; } set { _valorX2 = value; } } }
- Demos doble clic sobre el archivo elServicio.cs en el explorador de soluciones
- Se abrirá el código de éste, nótese que hay un método web predefinido por Visual Studio de nombre HelloWorld()
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; /// <summary> /// Método Web y funcionalidad /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. // [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { public WebService () { //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hola a todos"; } }
- Vamos a borrarlo, ya que no nos sirve. Ahora vamos a crear nuestro método web, éste nos realizará todas las operaciones que requerimos para nuestros dos cálculos y llenará la capa de transporte que es la clase que creamos para entregar los resultados. Nuestro código quedará así:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; /// <summary> /// Método Web y funcionalidad /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. // [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { public WebService () { //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados //InitializeComponent(); } // Método que creamos para calcular y regresar resultados [WebMethod] public Respuesta ejecutarEcuacion(double a, double b, double c) { // Instanciamos la clase Respuesta Respuesta calculos = new Respuesta(); // Declaramos nuestras variables y al mismo tiempo hacemos cálculos double primerTermino = -1 * b; double segundoTermino = Math.Sqrt((b * b) - (4 * a * c)); double denominador = 2 * a; // Llenamos la capa de transporte y hacemos los últimos cálculos calculos.valorX1 = (primerTermino + segundoTermino) / denominador; calculos.valorX2 = (primerTermino - segundoTermino) / denominador; // Enviamos las dos respuestas a través de la instancia return calculos; } }
- Ya tenemos nuestro código listo, vamos a probarlo, antes de esto abrimos el archivo Web.config en el Explorador de soluciones y buscamos la etiqueta
<compilation debug="false" targetFramework="4.0" />
- Y cambiamos el valor de false a true
- En el explorador de soluciones, damos un clic con el botón derecho del mouse sobre el archivo miServicio.asmx, del menú que aparezca, demos un clic en el ítem Establecer como página principal, esto es para que la solución se inicie apuntando hacia el archivo de inicialización del web service
Probando nuestra solución
- Pulsemos la tecla F5 para ejecutar la solución y se abrirá nuestro navegador predeterminado, observemos la URL y notemos que dice localhost que es nuestro servidor local, después dos puntos y un número que implica el puerto de salida hacia el servicio virtual que Visual Studio asignó a esta prueba, después de esto, viene la ruta que contiene los archivos de trabajo:
- Ahora analicemos la página que nos muestra el navegador, hay un hipervínculo con el nombre del método web que declaramos:
- Damos un clic en el enlace y aparecerá la siguiente ventana, nos pide tres parámetros que son los que declaramos en nuestro método web, escribamos 4, 9 y 2 respectivamente
- Ahora damos un clic en el botón Invoke y se abrirá la página con los resultados, nótese que es una salida XML con la información de los cálculos, cada respuesta es una propiedad declarada en nuestra clase
Para ver un ejemplo que usará este servicio haz clic en Consumiendo este servicio.
Nota: Cuando declaramos nuestro método web, el tipo de dato de retorno es una instancia de la clase Respuesta, se declaró así para tener la posibilidad de regresar más de un valor, y efectivamente lo hace como podemos ver en la figura 1.8, la clase Respuesta pertenece a la capa de transporte.
Pingback: Web Service | Blog de Página Web Leon
Pingback: Ejemplo WebService parte 2: Consumiendo el servicio | Blog de Página Web Leon
Pingback: Crear una DLL que consuma un WebService en C# | Blog de Página Web Leon
Thanks for another magnificent post. Where else may just anybody get that kind of info in such a perfect manner of writing? I have a presentation next week, and I’m at the look for such information. efgegfdffdec
Touche. Sound arguments. Keep up the amazing spirit.
I’d like to find out more? I’d love to find out more details.
Hello to all, it’s truly a pleasant for me to visit this
web site, it consists of valuable Information.
Excellent site you’ve got here.. It’s hard to find high-quality writing like yours
nowadays. I seriously appreciate people like you!
Take care!!
Excellent blog post. I certainly appreciate this website.
Continue the good work!
Hmm it seems like your blog ate my first comment (it was super long) so I guess I’ll
just sum it up what I submitted and say, I’m thoroughly enjoying your blog.
I too am an aspiring blog writer but I’m still new to everything.
Do you have any points for rookie blog writers? I’d certainly appreciate it.
I’ve been browsing online more than 4 hours today, yet I never found any interesting article like
yours. It is pretty worth enough for me. Personally,
if all website owners and bloggers made good content as
you did, the net will be a lot more useful than ever
before.
I have been exploring for a bit for any high quality articles or weblog posts in this kind of
house . Exploring in Yahoo I finally stumbled upon this site.
Reading this information So i’m glad to show that I’ve a very
good uncanny feeling I discovered exactly what I needed.
I such a lot undoubtedly will make certain to don?t
omit this site and provides it a look regularly.
Do you mind if I quote a couple of your posts as long as
I provide credit and sources back to your webpage?
My blog site is in the exact same niche as yours and my users
would genuinely benefit from a lot of the information you present here.
Please let me know if this alright with you. Regards!
Yesterday, while I was at work, my cousin stole my apple ipad and tested to see if it can survive a 25 foot drop, just
so she can be a youtube sensation. My iPad is now destroyed and she has 83 views.
I know this is totally off topic but I had to share it with someone!
Hi there I am so glad I found your webpage, I really found you by mistake, while
I was browsing on Google for something else, Anyways I am here now and
would just like to say thank you for a remarkable post and a
all round thrilling blog (I also love the theme/design), I don’t have time
to browse it all at the minute but I have book-marked it
and also added your RSS feeds, so when I have time I will be back
to read much more, Please do keep up the fantastic job.
Hey! I know this is kinda off topic but I was wondering which blog platform are you using for this site?
I’m getting sick and tired of WordPress because I’ve had problems with hackers and
I’m looking at options for another platform. I would be great if
you could point me in the direction of a good platform.