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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace PruebaWS { /// <summary> /// Summary description for Service1. /// </summary> 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 ; /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { } /// <summary> /// Clean up any resources being used. /// </summary> 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(); } } } |
Archivo: "Includes\clsWsServices.asp"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | <!-- #include file = "constantes.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 = "" & _ "<soap:envelope chema-instance=" " chema=" " envelope=" " http:=" " schemas.xmlsoap.org=" " soap=" " www.w3.org=" " xmlns:soap=" " xmlns:xsd=" " xmlns:xsi=" ">" & _ "<soap:header>" & _ "</soap:header>" & _ "<soap:body>" & _ "<getupper http:=" " tempuri.org=" " xmlns=" ">" & _ "<cadena>" & cadena & "</cadena> " & _ "</getupper>" & _ "</soap:body>" & _ "</soap:envelope>" '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: '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"
1 2 3 |
Archivo: "Includes\callWs.asp"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <pre class= "brush:vbnet" ><% '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 %> </pre> |
Archivo: "Prueba.asp"
1 2 3 4 5 6 7 8 | <h1> <u> PRUEBA - WS </u></h1> <form action= "./includes/callWs.asp" method= "GET" > Cadena: <input name= "pCadena" pcadena= "" type= "text" value= "<% Response.write(Request.QueryString(" >" > Result: <input name= "pResult" presult= "" type= "text" value= "<% Response.write(Request.QueryString(" >"> <input type= "submit" value= "Enviar wsPrueba" > </form> |
No hay comentarios:
Publicar un comentario