Servidor de Peticiones

 

            El comando /RUN=SERVIDOR[:instancia] ejecuta el sistema en modo servidor, donde distintos servicios pueden ejecutarse. Una instancia es la ejecución del sistema en modo servidor en una máquina determinada. Diferentes instancias pueden ejecutarse en la misma o diferente máquina, pero una misma instancia solo puede ser ejecutada una vez. Para configurar instancias, se ingresa en Herramientas -> Servidor -> Instancias y se crea una o mas instancias. Si no se incluye nombre de instancia, se toma la DEFECTO. En la instancia puede indicarse la máquina en la que se ejecuta (se impide su ejecución en otras) y el usuario con el cual se loguea automáticamente el sistema. Este usuario debe ser Supervisor o al menos tener permiso sobre "Comando /RUN"

 

            Al ejecutar el sistema con /RUN=SERVIDOR, el sistema se minimiza a un ícono al lado de la hora. Con botón derecho sobre ese ícono ofrece activar o cerrar. Al darle cerrar, se cierra esa instancia del servidor de peticiones. Si se ofrece activar, se puede cerrar manualmente con la tecla Suprimir. Puede ejecutarse el servidor de peticiones en cualquier máquina que tenga acceso al sistema, no es necesario ni recomendable por razones de seguridad que sea el propio servidor Web.

 

            Se recomienda programar el servidor de peticiones en un tarea programada de Windows que se lanze cada 5 o 10 minutos. Si la instancia está activa, la nueva instancia se cierra automáticamente. Si la instancia está activa pero colgada, sin responder, la cierra y activa la nueva instancia. Esto permite asegurar de que la instancia va a correr en todas las circunstanacias, porque si se bajó la instancia a causa de una actualización del sistema, un error, un mantenimiento de la base, etc, en 5 o 10 minutos se recupera automáticamente.

 

            Uno de estos servicios que atiende el servidor es el servicio de Peticiones Web, donde atiende peticiones cargadas a la tabla PETICIONESSERVIDOR. El objetivo de este comando es atender requerimientos de programas externos, tales como un servidor Web, ejecutando comandos y devolviendo datos en formato XML o Json. La elección de utilizar una tabla SQL y el formato XML/Json fue tomada para mantener la máxima compatibilidad y velocidad en la interfaz, ya que virtualmente todo lenguaje de programación en cualquier S.O. (Linux, Windows) tienen mecanismos para consultar e insertar datos en tablas SQL. Si se emplearan otros mecanismos, tales como OLE o Servicios Web, sería incompatible con lenguajes fuera de Windows en el primer caso o que no tengan un soporte nativo de http y sockets en el segundo. Por otro lado, los tiempos de respuesta son mucho mas rápidos que en cualquiera de los otros mecanismos, por cuanto un servidor SQL es el producto de años de desarrollo buscando la máxima perfomance en las consultas y respuestas.

 

            La tabla PETICIONESERVIDOR tiene los siguientes campos:

 

Campo

SQL Server

Descripción

PETICION

Int

Código de Petición. Pueden consultarse los distintos códigos en Herramientas->Servidor->Tipos de Peticiones

INSTANCIA

VarChar(20)

Nombre de Instancia que se desea que procese al petición. Si se deja en blanco lo procesa cualquier instancia. Luego de procesada se graba el nombre de la instancia que la procesó.

IDPETICIÓN

Int identity

Código interno. No debe insertarse en la tabla SQL. Puede utilizarse para identificar la petición si el lenguaje del cliente de la petición. tiene forma de obtener la última identidad insertada

IDEXTERNA

VarChar(20)

Código externo, puede obviarse, pero normalmente se utiliza para identificar la petición

ESTADO

TinyInt

Los valores posibles son 0=En espera, 1= Procesando, 2= Procesamiento completado exitosamente, 3= Procesado con error. STATUSSALIDA contiene la cadena de error

STATUSSALIDA

Text

Cadena de descripción del error, si ESTADO=3. En ciertas peticiones, si está antecedido de la palabra WARNING: se indica que la petición se llevó a cabo pero hubieron problemas

FECHA

Datetime

Es utilizado por el servidor para indicar la hora de comienzo del procesamiento de la petición

PARAMETRO1

Text

Parámetro de entrada en formato XML/Json.

Todos los campos indicados en cada petición deben estar presentes, aunque no sean necesarios. Si el campo es numérico y de una sola cifra, en formato XML agréguese 0 delante de manera de poner dos cifras (00), porque los valores 0 y 1 son traducidos en XML como Logical y producen un error de Parámetro inválido.

PARAMETRO2

Text

Si existe, es un parámetro de salida en formato XML/Json. El formato de salida se corresponde al usado en PARAMETRO1. Si se pasa XML, se retorna XML. Si se pasa Json, se retorna Json

PARAMETRO3

Text

Si existe, es un parámetro de salida en formato XML. En caso de que se haya usado Json en PARAMETRO1, PARAMETRO3 se agrega como un objeto con ese nombre al Json de PARAMETRO2

 

 

            El proceso cliente que desee efectuar una petición debe insertar un registro en esta tabla, cargando los campos PETICION, ESTADO=0, IDEXTERNA y PARAMETRO1 e ingresar entonces en un loop de espera testeando el estado de la petición hasta que se haga 2 o 3. Ejemplo

 

INSERT INTO PETICIONESSERVIDOR(PETICION, ESTADO, IDEXTERNA, PARAMETRO1) VALUES      (300,0,”test”,"<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?> <VFPData> <_parametro1> <legajo>48544</legajo> <dni>25459658</dni> <password>1526</password> <tipologueo>02</tipologueo> </_parametro1></VFPData>")

 

_tiempo=seconds()+10   /* <------ Tomando un timeout razonable

do while seconds()<_tiempo

    SELECT * FROM PETICIONESSERVIDOR WHERE IDEXTERNA=”test”

    IF ESTADO>1

       …. Procesando la petición

       EXIT

    END

   WAIT(0.2)     /* <----- Esperando un tiempo razonable para no sobrecargar el servidor

END

.... procesando el timeout

 

            Una vez procesada la petición puede optarse por borrarla o dejarla en la tabla como una auditoria de todas las peticiones procesadas.

 

 

Ejemplos XML de parámetros para distintas peticiones:

 

            Los siguientes ejemplos muestran ejemplos de XML de parámetros. Recuérdese cargar ESTADO=0 en todas ellas y solo el PARAMETRO1. Los parámetros 2 y 3 muestran ejemplos de respuesta.

 

 

PET

PARAMETRO1

PARAMETRO2

PARAMETRO3

100

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><peticion>

<anoacademico>2002</anoacademico>

<especialidad>05</especialidad>

<plan>95</plan>

<materia>228</materia>

<comision>08</comision>

<directorio>n:\bajar</directorio>

</peticion></VFPData>

 

 

101

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><peticion>

<archivo>n:\subir\Notas comision 2002-5-95-228-8.xls</archivo>

</peticion></VFPData>

 

 

200

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData>

<_parametro1>

<legajo>42152</legajo>

<especialidad>24</especialidad>

<plan>95</plan>

<materia>309</materia>

<mesaespecial>00</mesaespecial>

<tribunal>00</tribunal>

<horario>01</horario>

<fecha>0000-00-00</fecha>

<turno>10</turno>

</_parametro1></VFPData>

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro2>

<checksum>16MWIF</checksum>

<fecha>2002-12-05</fecha>

<horarioteorico>0:00</horarioteorico>

<horariopractico>0:00</horariopractico>

<aula>301</aula>

<inscripto>jueves 5 de diciembre - Mañana</inscripto>

</_parametro2></VFPData>

 

202

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><peticion>

<legajo>42152</legajo>

<mesaespecial>00</mesaespecial>

</peticion></VFPData>

 

 

203

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro1>

<legajo>42152</legajo>

<especialidad>24</especialidad>

<plan>95</plan>

<materia>343</materia>

<mesaespecial>00</mesaespecial>

<fecha>0000-00-00</fecha>

</_parametro1></VFPData>

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro2>

<fecha>2002-12-06</fecha>

<tribunal>0</tribunal>

<nombre/>

<mañana>1</mañana>

<tarde/>

<noche/>

<turno>10</turno>

</_parametro2></VFPData>

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro3>

<condicion>No aprobó Física II</condicion>

</_parametro3></VFPData>

300

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro1>

<legajo>42152</legajo>

<dni>24510422</dni>

<tipologueo>02</tipologueo>

<password>pepe<password/>

</_parametro1></VFPData>

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

<VFPData><_parametro2>

<nuevo/>

<nombre>Oviedo, Pablo Sebastian</nombre>

<especialidad>Ingeniería Industrial</especialidad>

<plan>95</plan>

</_parametro2></VFPData>

 

 

Desde el sistema SYSACAD en Herramientas->Servidor->Tipo de peticiones se pueden obtener todas las peticiones soportadas. Hay un vínculo Ayuda en esa vista que muestra los parametros de entrada y salida de cada petición