VISITAS:

martes, 24 de enero de 2012

Servicios Web con .NET (howto)

En este artículo describiré paso a paso cómo crear un servicio web con .NET desde cero.
Las versiones que utilizaré son:
  • Windows 7
  • IIS 7.5
  • Visual Studio 2010
CREAR UNA SOLUCIÓN
1. Crear un directorio base, por ej, D:\apps\Calculadora
2. Abrir VisualStudio
3. New Project > Other Project Types > Visual Studio Solutions > Blank Solution
Name: CalculadoraSolution
Location: directorio base
OK
Visual Studio crea un subdirectorio para la solución D:\apps\Calculadora\CalculadoraSolution

PROYECTO PARA EL WS
1. Solution Explorer > Botón derecho sobre la solución > Add > New Project
2. Visual Basic > Web > ASP.NET Web Service Application
Name: CalculadoraWS
Location: Subdirectorio de la solución (...CalculadoraSolution)
OK
Visual Studio crea un subdirectorio para el proyecto D:\apps\Calculadora\CalculadoraSolution\CalculadoraWS
3. Solution Explorer > Botón derecho sobre Service1.asmx > Rename
Cambiar el nombre a CalculadoraService.asmx
4. Cambiar el nombre de la clase
Solution Explorer > Botón derecho sobre el fichero CalculadoraService.asmx > View Code
Botón derecho sobre la clase Service1 > Rename
Cambiar el nombre a Calculadora
Si se desea, se puede cambiar también el atributo Namespace
Solution Explorer > Botón derecho sobre el fichero CalculadoraService.asmx > View Markup
En el atributo Class, poner: CalculadoraWS.Calculadora
5. Meter las operaciones:
Solution Explorer > Botón derecho sobre el fichero CalculadoraService.asmx > View Code
Quitar el método HelloWorld y añadir los siguientes métodos:
Public Function Suma(ByVal a As Double, ByVal b As Double) As Double
Return a + b
End Function

Public Function Resta(ByVal a As Double, ByVal b As Double) As Double
Return a - b
End Function

6. Build > Build Solution

DESPLEGAR EN IIS
1. Abrir el administrador de IIS: Panel de Control > Herramientas administrativas > Administrador de Internet Information Services (IIS)
2. Crear el directorio D:\apps\Calculadora\WWW
3. Botón derecho sobre Sitios > Agregar Sitio Web
Nombre del sitio: Calculadora
Ruta de acceso física: D:\apps\Calculadora\WWW
Puerto: 82
Aceptar
4. Botón derecho sobre el sitio Calculadora > Agregar aplicación
Alias: CalculadoraApp
Ruta: directorio del proyecto, D:\apps\Calculadora\CalculadoraSolution\CalculadoraWS
Aceptar
5. Abrir un navegador (Internet Explorer)
6. Invocar una operación
Pulsar sobre el enlace Suma
Introducir valores para los parámetros a y b
Pulsar el botón Invocar
El resultado será el mensaje XML devuelto por el servicio

CLIENTE .NET
1. Solution Explorer > Botón derecho sobre la solución > Add > New Project
2. Visual Basic > Windows > Windows Forms Application
Name: CalculadoraClient
Location: Subdirectorio de la solución (...CalculadoraSolution)
OK
Visual Studio crea un subdirectorio para el proyecto D:\apps\Calculadora\CalculadoraSolution\CalculadoraClient
3. Añadir dos TextBox al formulario para los parámetros a y b
4. Añadir un Label al formualrio para poner el resultado
5. Añadir dos Button al formulario para invocar las operaciones suma y resta
6. Solution Explorer > Proyecto Calculadora Client > Add Web Reference
Pulsar la flecha verde
Web reference name: calculadoraws
Botón Add Reference
7. En el callback de los botones hay que invocar a las operaciones del servicio
Dim a As Double = CDbl(txtA.Text)
Dim b As Double = CDbl(txtB.Text)
Dim calc As calculadoraws.Calculadora = New calculadoraws.Calculadora
Dim res As Double = calc.Suma(a, b)
lblResultado.Text = CStr(res)
8. Solution Explorer > Proyecto CalculadoraClient > Set as startup project
9. Debug > Start debugging

LIBRERÍA PARA LA LÓGICA Y CÁLCULOS
Imaginemos ahora que queremos separar el servicio web de la lógica (cálculos en este caso). Nos interesa hacer una librería para meter allí toda la lógica, e invocar a esta librería desde el servicio.

1. Solution Explorer > Botón derecho sobre la solución > Add > New Project
2. Visual Basic > Windows > Class Library
Name: CalculadoraLib
Location: Subdirectorio de la solución (...CalculadoraSolution)
OK
Visual Studio crea un subdirectorio para el proyecto D:\apps\Calculadora\CalculadoraSolution\CalculadoraLib
3. Solution Explorer > Botón derecho sobre el fichero Class1.vb
Rename
Renombrar a CalculadoraLib.vb
4. Implementar los métodos de la clase:
Public Function Suma(ByVal a As Double, ByVal b As Double) As Double
Return a + b
End Function

Public Function Resta(ByVal a As Double, ByVal b As Double) As Double
Return a - b
End Function
5. Build > Build Solution
6. Solution Explorer > Botón derecho sobre el proyecto CalculadoraWS > Add Reference
Seleccionar el proyecto CalculadoraLib
Cada vez que se reconstruya el proyecto, Visual Studio copiará el fichero CalculadoraLib.dll en el directorio bin del proyecto CalculadoraWS
7. Cambiar la implementación del servicio web para que invoque a la librería:

Public Function Suma(ByVal a As Double, ByVal b As Double) As Double
Dim calc As CalculadoraLib.CalculadoraLib = New CalculadoraLib.CalculadoraLib
Return calc.Suma(a, b)
'Return a + b
End Function

Public Function Resta(ByVal a As Double, ByVal b As Double) As Double
Dim calc As CalculadoraLib.CalculadoraLib = New CalculadoraLib.CalculadoraLib
Return calc.Resta(a, b)
' Return a - b
End Function

Aunque parezca que hemos complicado el código, en realidad lo hemos simplificado muchísimo, ya que la lógica y los cálculos suelen ser bastante complicados, y es bueno mantenerlos en una librería aparte.

8. Probar de nuevo el servicio invocando la URL: http://localhost:82/CalculadoraApp/CalculadoraService.asmx

TIPOS COMPLEJOS
A veces es necesario pasar como entrada o como salida tipos de datos complejos.
1. Solution Explorer > Botón derecho sobre el proyecto CalculadoraLib > Add > Class
Common items > Code > Class
Name: DatosCalculadora.vb
OK
2. Este es el contenido del nuevo fichero:
Public Class Entrada

Public a As Double
Public b As Double

End Class

Public Class Salida

Public suma As Double
Public resta As Double

End Class

3. Añadir una nueva función a CalculadoraLib.vb:
Public Function SumaResta(ByVal ent As Entrada) As Salida
Dim sal As Salida = New Salida
sal.suma = Suma(ent.a, ent.b)
sal.resta = Resta(ent.a, ent.b)
Return sal
End Function

4. Build > Build Solution
5. Añadir una nueva operación al servicio en CalculadoraService.asmx.vb
Public Function SumaResta(ByVal ent As CalculadoraLib.Entrada) As CalculadoraLib.Salida
Dim calc As CalculadoraLib.CalculadoraLib = New CalculadoraLib.CalculadoraLib
Return calc.SumaResta(ent)
End Function

6. Build > Build Solution
Si se pulsa sobre la nueva operación SumaResta no podremos probarla ya que tiene tipos compuestos

8. Solution Explorer > Botón derecho sobre calculadoraws (Web reference) del proyecto CalculadoraClient > Update Web Reference
9. En el formulario de CalculadoraClient meter un nuevo botón para SumaResta
10. En el callback del nuevo botón poner:
Private Sub btnSumaResta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSumaResta.Click
Dim a As Double = CDbl(txtA.Text)
Dim b As Double = CDbl(txtB.Text)
Dim calc As calculadoraws.Calculadora = New calculadoraws.Calculadora
Dim ent As calculadoraws.Entrada = New calculadoraws.Entrada
ent.a = a
ent.b = b
Dim sal As calculadoraws.Salida = calc.SumaResta(ent)
lblResultado.Text = "Suma = " & sal.suma & ", resta = " & sal.resta
End Sub

11. Debug > Start debugging


No hay comentarios:

Publicar un comentario