Invocando un WebMethod en Javascript

Lo primero que quiero resolver es el tema de como van a viajar los datos en mi Proveedor de Datos.
Me decidí por usar tecnología AJAX para resolver este tema.
Esta tecnología me permite acceder a los datos en el servidor sin hacer postback, y hacerlo ademas de forma asincrónica. El  usuario no notará el trabajo que el explorador hace por detrás.

Ademas pensé en usar JSON como formato de datos. Es fácil de leer y escribir, liviano y me soluciona el tema de presentar los datos de forma tipada en Javascript.

Me hice una rutina para hacer las llamadas al servidor a través de un webmethod. Es la siguiente:

InvocarWebMethod: function(pWebMethod, pContrato, pRetorno, pErroneo, pSincronico, pPath) {
        var xmlHTTP = new XMLHttpRequest();
        xmlHTTP.onreadystatechange = function() {
            if (xmlHTTP.readyState == 4) {
                if (xmlHTTP.status == 200) {
                    if (pRetorno) pRetorno(Sys.Serialization.JavaScriptSerializer.deserialize(xmlHTTP.responseText).d);
                } else {
                    if (pErroneo) pErroneo(Sys.Serialization.JavaScriptSerializer.deserialize(xmlHTTP.responseText));
                }
            }
        }
        if (pPath == undefined || pPath == "" || pPath == null) {
            pPath = this.Path;
        }
        xmlHTTP.open("POST", pPath + "/" + pWebMethod, pSincronico)
        xmlHTTP.setRequestHeader("Content-Type", "application/json; charset=utf-8")
        var ParamLlamada = Sys.Serialization.JavaScriptSerializer.serialize(pContrato);
        xmlHTTP.send(ParamLlamada);
    },

Como verán esta rutina es muy parecida a la que usa el SriptManager para invocar a los PageMethods. Pensarán que soy un poco caprichoso en hacerla nuevamente. Y si… no me gusta depender demasiado de código de terceros. Pero en este caso me encontré que la rutina ofrecida por el ScriptManager no me daba la opción de elegir entre una comunicación sincrónica o asincrónica(es siempre asincrónica). Esta necesidad viene dada por alguna experiencia previa donde me vi obligado a realizar una comunicación sincrónica y no tuve la facilidad. Por lo tanto le agregue un parámetro pSincronico y me guardo la posibilidad de hacer ese tipo de comunicaciones en el futuro. Ademas aprovecho para serializar y desserializar al formato JSON con las funciones Sys.Serialization.JavaScriptSerializer.deserializeSys.Serialization.JavaScriptSerializer.seserialize.

Parametros:

pWebMethod: es el nombre del Webmethod tal como esta definido en la página que aloja nuestro Proveedor de Datos.

pContrato: serían los datos en sí que envía la función, siempre en formato JSON  para que puedan ser leídos en .NET y Javascript como objetos.

pRetorno y pErroneo: son delegados de métodos en Javascript que serán invocados cuando el cliente reciba del servidor los datos o el error respectivamente.

pPath : es esperado por la función, pero si no es especificado debería llenarse con la URL de la página donde se encuentra el WebMethod. Yo uso este paso pPath = this.Path porque quiero incluir esta rutina dentro del Framework y que la URL de la página donde es incluido el Proveedor de Datos pase a la variable this.Path.

pSincronico: por defecto es false e indica el tipo de comunicación sincrónico o asincrónico.

Bueno… ya tengo el corazón de este control ahora a pensar en el resto de las entrañas.

Apropósito estoy pensando en llamar a este control ServerDataAdapter o AdaptadorDatosServidor. Castellano o Ingles “that is la pregunta”…Todavía no me decido…

Anuncios

3 Respuestas a “Invocando un WebMethod en Javascript

  1. Pingback: Arquitectura del Proveedor de Datos | MoniMisi

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s