Entradas

Mostrando las entradas de agosto, 2019

Como responder un HTTP 500 - "Internal Server Error" en un servicio web GeneXus C#.

Imagen
En determinados programas expuestos como servicios web SOAP, es conveniente devolver un error 500 - Internal Server Error, para dejar bien evidente que hubo un problema serio.

En GeneXus no hay una forma nativa de devolver estos errores, por ahora al menos.

Necesitábamos devolver errores 500 cuando nos llegaba un request con formato invalido.

Lo que hicimos fue, agregar en la primera línea del procedure (*):

&SoapErrMsg =GetSOAPErrMsg()

If&SoapErrMsg <> ''
csharp throw new System.Web.Services.Protocols.SoapException([!&SoapErrMsg!], System.Web.Services.Protocols.SoapException.ClientFaultCode);
endif

* Esto fue probado en el Upgrade 5 de GeneXus 16. 



Diferencias en servicios SOAP de GeneXus Evo3 y GeneXus 16.

Imagen
Realizando una conversión de una KB que está en GeneXus Evo3 a GeneXus 16, tenemos varios servicios web con protocolo SOAP.  Despues de tener algunos inconvenientes con las pruebas de los mismos,  tuve que hacer la comparación mas exhaustiva de la salida de los servicios SOAP  y comparar los resultados.

En las pruebas me lleve varias sorpresas.

Hice un web service soap (procedure/main/call protocol=SOAP/Use SOAP native=NO) que recibe un SDT con un numero con signo de -N(8.2) y asi como lo recibe lo devuelve.

&SDTEntrada                     Collection=True
    &Numero                     -N(8.2)

con la regla

parm(in:&SDTEntrada,out:&SDTSalida);

y el código

//Asigno lo mismo que recibo. 
&SDTSalida = &SDTEntrada

Los Request que se envían a ambos sistemas en Evo3 y GX16 son parecidos a


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:kbn="KBNamespace"><soapenv:Header/><soapenv:Body><kbn:Pr…

Recuperar la version de GeneXus que estoy ejecutando.

Imagen
En nuestro proceso de integración continua queríamos lograr que cuando se instalara una nueva versión de GeneXus en la maquina de build, se hiciera un REBUILD en vez de un Build all normal.

Para esto, era necesario poder saber en que versión de GeneXus estoy ejecutando.

GeneXus /version
GeneXus viene con un comando command line para recuperar esta información, pero no es trivial recuperarla desde línea de comando, pues necesita ejecutar como administrador. Si no estoy como administrador, abre otra ventana y no es fácil recuperar la información.

La opción que encontramos, es recuperar la versión directamente del archivo GeneXus.exe con powershell

(Get-Command "genexus.exe").FileVersionInfo.ProductVersion

y devuelve  algo parecido a esto:

16.0.5.135057

Es el Upgrade 5 de la versión 16, con el Build = 135057

Teniendo esto podemos guardar la versión en un archivo, cuando termina el build en forma exitosa y si actualizamos GeneXus, solo tenemos que comparar el contenido del archivo…