miércoles, 31 de julio de 2019

ASP. Classic obtener datos de un servicio web


Introducción
Esta puede ser de utilidad para todo aquel que puede tener la necesidad de consumir un servicio web y su sitio web este utilizando esta tecnología de Microsoft que aunque antigua se sigue utilizando en muchos sitios web de hoy en día y no cuenta con todas las ayudas de nuevas tecnologías o entornos que hacen que esta acción se mucho más cómoda y sencilla.
Antes de comenzar los que necesitaremos.

Requisitos:
SO: Windows
Servidor web: IIS 6.0
Visual Studio 2003 .NET framework 1.1

1º) Crear servicio web.
Lo primero de todo vamos comenzar creado nuestro servicio web de prueba, que simplemente tendrá como funcionalidad que le pasamos una cadena y esta sea devuelta por nuestro webServices en mayúsculas. Para ello alimentaremos a nuestro servicio web con los siguientes parámetros:

Parámetro 1: Cadena (Cadena con el texto que vamos a convertir en mayúscula)


Definimos nuestro método que lo llamaremos “getUpper”.

Código del método de nuestro servicio web.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace PruebaWS
{
 /// 
 /// Summary description for Service1.
 /// 
 public class Service1 : System.Web.Services.WebService
 {
  public Service1()
  {
   //CODEGEN: This call is required by the ASP.NET Web Services Designer
   InitializeComponent();
  }

  #region Component Designer generated code
  
  //Required by the Web Services Designer 
  private IContainer components = null;
    
  /// 
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// 
  private void InitializeComponent()
  {
  }

  /// 
  /// Clean up any resources being used.
  /// 
  protected override void Dispose( bool disposing )
  {
   if(disposing && components != null)
   {
    components.Dispose();
   }
   base.Dispose(disposing);  
  }
  
  #endregion


  [WebMethod]
  public string getUpper(string cadena)
  {
   return cadena.ToUpper();
  }
 }
}



Y arrancamos nuestro servicio web.



2º) Crear aplicación ASP. Classic.

Archivo: "Includes\clsWsServices.asp"


<%
Class clsWsServices

Function InvokeWebService (strSoap, strSOAPAction, strURL, ByRef xmlResponse)
    '************************************************************************
    ' Descripción: Invoca un WebService y obtiene su resultado.
    '
    ' Inputs:
    '    strSoap:    Petición HTTP a enviar, en formato SOAP. Contiene la    
    '                llamada al WebMethod y sus parámetros 
    '                correspondientes.
    '    strSOAPAction:    Namespace y nombre del WebMethod a utilizar.
    '    strURL:        URL del WebService.
    '
    ' Returns:
    '    La función retornará False si ha fallado la ejecución del WebService o si
    '    ha habido error en la comunicación con el servidor remoto. De lo contrario
    '    retornará True.
    '
    '    xmlResponse:    Respuesta obtenida desde el WebService, parseada 
    '                por el MSXML.
    '************************************************************************

    Dim xmlhttp
    Dim blnSuccess

        'Creamos el objeto ServerXMLHTTP
        Set xmlhttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

        'Abrimos la conexión con el método POST, ya que estamos enviando una
        'petición.
        xmlhttp.Open "POST", strURL

        'Agregamos encabezados HTTP requeridos por el WebService
        xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1"
        xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
        xmlhttp.setRequestHeader "SOAPAction", strSOAPAction

        'El SOAPAction es importante ya que el WebService lo utilizará para
        'verificar qué WebMethod estamos usando en la operación.

        'Enviamos la petición
        xmlhttp.send(strSoap)

        'Verificamos el estado de la comunicación
        If xmlhttp.Status = 200 Then

            'El código 200 implica que la comunicación se puedo establecer y que
            'el WebService se ejecutó con éxito.
            blnSuccess = True
        Else

            'Si el código es distinto de 200, la comunicación falló o el
            'WebService provocó un Error.
            blnSuccess = False
        End If
  
        'Obtenemos la respuesta del servidor remoto, parseada por el MSXML.
        'Set xmlResponse = xmlhttp.responseXML
  Set xmlResponse = xmlhttp

        InvokeWebService = blnSuccess

        'Destruimos el objeto, acá no hay GarbageCollector ;)
        Set xmlhttp = Nothing
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''  METODOS DEL WEBSERVICES    ''''''''''  
'''''''''''''''''''''''''''''''''''''''''''''''''
Public Function getUpper(cadena)

 strSoap = "" & _
 "" & _
   "" & _
   "" & _
   "" & _
  "" & _
    ""& cadena & " " & _
  "" & _
   "" & _
 ""

 'Una vez que tenemos el mensaje SOAP armado, procedemos 
 'a invocar al Web Service. Para hacerlo, necesitamos el
 'SOAPAction, el cual se forma con el namespace del Web Service / el nombre del WebMethod:
 strSOAPAction = "http://tempuri.org/getUpper"
 'Ahora sí estamos listos para llamar a la función InvokeWebService(). 
 'Conociendo la estructura del XML de respuesta (SOAP Response), 
 'obtenemos el resultado de la ejecución:

 'Dimensionamos la variable donde obtendremos la respuesta del WebService 
 Dim xmlResponse
 Dim rs

 'Realizamos la llamada a la función InvokeWebService(), brindándole los parámetros correspondientes
 If InvokeWebService (strSoap, strSOAPAction, RUTA_WS, xmlResponse) Then  
  getUpper = xmlResponse.responseXML.documentElement.selectSingleNode("soap:Body/getUpperResponse").text 
 Else
  'Pero si hubo algún problema, le informamos al usuario
  getUpper  = "Error: No se ha podido conectar con el servicio web."
 End If

 'Liberamos la memoria del objeto xmlResponse 
 Set xmlResponse = Nothing
 
End Function

End Class
%>


Archivo: "Includes\constantes.asp"
<%
Const RUTA_WS = "http://localhost/PruebaWS/Service1.asmx"
%>


Archivo: "Includes\callWs.asp"
<%
'Objeto WebServices
Dim PruebaWs
Set PruebaWs = New clsWsServices 


Dim cadena
Dim resultado

'Obtenemos el parametro
cadena = Request.QueryString("pCadena")

'LLamada Servicio WebServices
resultado = PruebaWs.getUpper(cadena)

'Volvemos a la pagina principal
Response.redirect "../Prueba.asp?pResult=" & resultado  & "&pCadena=" &cadena

%>


Archivo: "Prueba.asp"

PRUEBA - WS

Cadena: " > Result: ">

Web Pruebas. (Prueba.asp)


No hay comentarios:

Publicar un comentario