Servicios web: ejemplos

Basándonos en la arquitectura del servicio web, creamos los siguientes dos componentes como parte de la implementación de los servicios web:

Proveedor de servicios o editor

Este es el proveedor del servicio web. El proveedor de servicios implementa el servicio y lo pone a disposición en Internet o en una intranet.

Escribiremos y publicaremos un servicio web simple usando .NET SDK.

Solicitante de servicio o consumidor

Este es cualquier consumidor del servicio web. El solicitante utiliza un servicio web existente abriendo una conexión de red y enviando una solicitud XML.

También escribiremos dos solicitantes de servicios web: un consumidor basado en web (aplicación ASP.NET) y otro consumidor basado en aplicaciones de Windows.

A continuación se muestra nuestro primer ejemplo de servicio web que funciona como proveedor de servicios y expone dos métodos (agregar y SayHello) como los servicios web que utilizarán las aplicaciones. Esta es una plantilla estándar para un servicio web. Los servicios web .NET utilizan la extensión .asmx. Tenga en cuenta que un método expuesto como servicio web tiene el atributo WebMethod. Guarde este archivo como FirstService.asmx en el directorio virtual de IIS (como se explica en la configuración de IIS; por ejemplo, c: \ MyWebSerces).

FirstService.asmx
<%@ WebService language = "C#" class = "FirstService" %>

using System;
using System.Web.Services;
using System.Xml.Serialization;

[WebService(Namespace = "http://localhost/MyWebServices/")]
public class FirstService : WebService{
   [WebMethod]
   public int Add(int a, int b) {
      return a + b;
   }

   [WebMethod]
   public String SayHello() {
      return "Hello World";
   }
}

Para probar un servicio web, debe estar publicado. Un servicio web se puede publicar en una intranet o en Internet. Publicaremos este servicio web en IIS ejecutándose en una máquina local. Comencemos con la configuración del IIS.

  • Abra Inicio → Configuración → Panel de control → Herramientas administrativas → Administrador de servicios de Internet.

  • Expanda y haga clic con el botón derecho en el sitio web predeterminado; seleccione Nuevo & # rarr; Directorio virtual. Se abre el Asistente para la creación de directorios virtuales. Haga clic en Siguiente.

  • Se abre la pantalla "Alias ​​de directorio virtual". Escriba el nombre del directorio virtual. Por ejemplo, MyWebServices. Haga clic en Siguiente.

  • Se abre la pantalla "Directorio de contenido del sitio web".

  • Ingrese el nombre de la ruta del directorio para el directorio virtual. Por ejemplo, c: \ MyWebServices. Haga clic en Siguiente.

  • Se abre la pantalla "Permiso de acceso". Cambie la configuración según sus requisitos. Conservemos la configuración predeterminada para este ejercicio.

  • Haga clic en el botón Siguiente. Completa la configuración de IIS.

  • Haga clic en Finalizar para completar la configuración.

Para comprobar si IIS se ha configurado correctamente, copie un archivo HTML (por ejemplo, x.html) en el directorio virtual (C: \ MyWebServices) creado anteriormente. Ahora, abra Internet Explorer y escribahttp://localhost/MyWebServices/x.html. Debería abrir el archivo x.html.

Note- Si no funciona, intente reemplazar el localhost con la dirección IP de su máquina. Si aún no funciona, verifique si IIS se está ejecutando; es posible que deba volver a configurar IIS y el directorio virtual.

Para probar este servicio web, copie FirstService.asmx en el directorio virtual de IIS creado anteriormente (C: \ MyWebServices). Abra el servicio web en Internet Explorer (http: //localhost/MyWebServices/FirstService.asmx). Debería abrir su página de servicio web. La página debe tener enlaces a dos métodos expuestos como servicios web por nuestra aplicación. ¡Felicidades! ¡Has escrito tu primer servicio web!

Prueba del servicio web

Como acabamos de ver, escribir servicios web es fácil en .NET Framework. Escribir consumidores de servicios web también es fácil en .NET framework; sin embargo, es un poco más complicado. Como se dijo anteriormente, escribiremos dos tipos de consumidores de servicios, uno basado en web y otro consumidor basado en aplicaciones de Windows. Escribamos nuestro primer consumidor de servicios web.

Consumidor de servicios basados ​​en web

Escriba un consumidor basado en la web como se indica a continuación. Llámelo WebApp.aspx. Tenga en cuenta que es una aplicación ASP.NET. Guárdelo en el directorio virtual del servicio web (c: \ MyWebServices \ WebApp.axpx).

Esta aplicación tiene dos campos de texto que se utilizan para obtener números del usuario que se agregarán. Tiene un botón, Ejecutar, que al hacer clic en él, obtiene los servicios web Agregar y SayHello.

WebApp.aspx
<%@ Page Language = "C#" %>
<script runat = "server">
   void runSrvice_Click(Object sender, EventArgs e) {
      FirstService mySvc = new FirstService();
      Label1.Text = mySvc.SayHello();
      Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text),  Int32.Parse(txtNum2.Text)).ToString();
   }
</script>

<html>
   <head> </head>
   
   <body>
      <form runat = "server">
         <p>
            <em>First Number to Add </em>:
            <asp:TextBox id = "txtNum1" runat = "server" Width = "43px">4<  /asp:TextBox>
         </p>
			
         <p>
            <em>Second Number To Add </em>:
            <asp:TextBox id = "txtNum2" runat = "server" Width = "44px">5</asp:TextBox>
         </p>
			
         <p>
            <strong><u>Web Service Result -</u></strong>
         </p>
			
         <p>
            <em>Hello world Service</em> :
            <asp:Label id = "Label1" runat = "server" Font-Underline = "True">Label< /asp:Label>
         </p>

         <p>
            <em>Add Service</em> :
            & <asp:Label id = "Label2" runat = "server" Font-Underline = "True">Label</asp:Label>
         </p>
			
         <p align = "left">
            <asp:Button id = "runSrvice" onclick = "runSrvice_Click" runat = "server" Text = "Execute"></asp:Button>
         </p>
      </form>
   </body>
</html>

Una vez creado el consumidor, debemos crear un proxy para que se consuma el servicio web. Visual Studio .NET realiza este trabajo automáticamente cuando se hace referencia a un servicio web que se ha agregado. Estos son los pasos a seguir:

  • Cree un proxy para que se consuma el servicio web. El proxy se crea utilizando la utilidad WSDL proporcionada con .NET SDK. Esta utilidad extrae información del servicio web y crea un proxy. El proxy es válido solo para un servicio web en particular. Si necesita consumir otros servicios web, también debe crear un proxy para este servicio. Visual Studio .NET crea un proxy automáticamente cuando se agrega la referencia del servicio web. Cree un proxy para el servicio web utilizando la utilidad WSDL proporcionada con .NET SDK. Creará el archivo FirstSevice.cs en el directorio actual. Necesitamos compilarlo para crear FirstService.dll (proxy) para el servicio web.

c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL
c:> csc /t:library FirstService.cs
  • Coloque el proxy compilado en el directorio bin del directorio virtual del Servicio Web (c: \ MyWebServices \ bin). Internet Information Services (IIS) busca el proxy en este directorio.

  • Crear el consumidor de servicios, de la misma forma que ya lo hicimos. Tenga en cuenta que se crea una instancia de un objeto del proxy de servicio web en el consumidor. Este proxy se encarga de interactuar con el servicio.

  • Escriba la URL del consumidor en IE para probarlo (por ejemplo, http: //localhost/MyWebServices/WebApp.aspx).

Consumidor de servicios web basados ​​en aplicaciones de Windows

Escribir un consumidor de servicios web basado en aplicaciones de Windows es lo mismo que escribir cualquier otra aplicación de Windows. Solo necesita crear el proxy (que ya hemos hecho) y hacer referencia a este proxy al compilar la aplicación. A continuación se muestra nuestra aplicación de Windows que utiliza el servicio web. Esta aplicación crea un objeto de servicio web (por supuesto, proxy) y llama a los métodos SayHello y Add en él.

WinApp.cs

using System;
using System.IO;

namespace SvcConsumer {
   class SvcEater {
      public static void Main(String[] args) {
         FirstService mySvc = new FirstService();
         Console.WriteLine("Calling Hello World Service: " + mySvc.SayHello());
         Console.WriteLine("Calling Add(2, 3) Service: " + mySvc.Add(2, 3).ToString());
      }
   }
}

Compílelo usando c:\>csc /r:FirstService.dll WinApp.cs. Creará WinApp.exe. Ejecútelo para probar la aplicación y el servicio web.

Ahora, surge la pregunta: ¿Cómo puede estar seguro de que esta aplicación realmente está llamando al servicio web?

Es fácil de probar. Detenga su servidor web para que no se pueda contactar con el servicio web. Ahora, ejecute la aplicación WinApp. Disparará una excepción de tiempo de ejecución. Ahora, vuelva a iniciar el servidor web. Deberia de funcionar.