Nova postagem

Encontrar

Resumo
· Out. 28, 2024

Publicações Desenvolvedores InterSystems, Outubro 21 - 27, 2024, Resumo

Resumo
· Out. 28, 2024

InterSystems Developers Publications, Week October 21 - 27, 2024, Digest

Articles
Announcements
Questions
#InterSystems IRIS
#Caché
#InterSystems IRIS for Health
#Ensemble
Discussions
#InterSystems IRIS
October 21 - 27, 2024Week at a GlanceInterSystems Developer Community
Artigo
· Out. 28, 2024 3min de leitura

Soluciones para los Timeouts en Servicios SOAP

Hola a todos, hoy comentamos con un ejemplo cómo solucionar problemas relacionados con el TimeOut cuando se hacen llamadas a servicios SOAP.

Tomemos como ejemplo aplicaciones que proporcionen servicios SOAP que utilizan consultas SQL basadas en "DSTIME" para devolver registros que han sido añadidos o modificados recientemente. Como estos registros no cambian con frecuencia, estas consultas suelen devolver un número reducido de registros, lo cual implica un tiempo de procesamiento corto.

Sin embargo, en ocasiones realizamos cambios en una tabla que afectan a todos los registros en ella. Cuando eso ocurre, en la siguiente solicitud SOAP de un cliente, el servicio ejecutará su consulta, la cual tomará un tiempo adicionalmente largo porque incluirá todos los registros (en nuestras aplicaciones, las consultas devuelven cientos de miles de registros en este caso).

La cantidad de tiempo necesario para generar los resultados a veces supera el "timeout" predeterminado especificado en la conexión del gateway CSP para la instancia que aloja el servicio SOAP. Esto provoca que la conexión se cierre antes de que el cliente reciba los datos solicitados, y en su lugar, el cliente obtiene un mensaje de error como el siguiente:

ERROR #5002: ObjectScript error: InvokeClient+208^%SOAP.WebClient.1

El error se debe a un timeout. Esto podemos confirmarlo revisando los detalles del InterSystems IRIS SOAP Log.

En este caso, el log de mostraba esta información:

Input to Web client with SOAP action = http://www.intersystems.com/user/SOAPTest.SlowSOAPService.GetSlowService

ERROR #5922: Timed out waiting for response
string**** SOAP client return error. method=GetSlowService, action=http://www.intersystems.com/user/SOAPTest.SlowSOAPService.GetSlowService
     ERROR #5922: Timed out waiting for response

Para resolver este error, podemos añadir código para establecer un timeout de conexión en la instancia del cliente SOAP antes de llamar al método SOAP que utiliza esa consulta específica.

Habíamos ejecutado la consulta en la página SQL del Portal de Administración, exportando el resultado a un archivo CSV, y observamos que tardó más de 6 minutos en completarse. Por lo tanto, añadimos este código para aumentar el timeout a 10 minutos antes de llamar al servicio (los nombres se han cambiado para proteger a los inocentes 😊):

    #dim result As %XML.DataSet
    set wc = ##class(SlowSOAPService.WebClient.SlowSOAPServiceSoap).%New()
    set sc = wc.TimeoutSet(600)
    set sc = wc.GetSlowService(.result)

La clase `%SOAP.WebService` proporciona el método “TimeoutSet”, que solo cambia el valor de timeout de conexión para esa solicitud específica. No afecta el valor de timeout de la conexión del gateway CSP, que por defecto es un breve período de 30 segundos (para incentivar la escritura de código eficiente en el lado del servidor).

De hecho, para mantener ese incentivo, podemos asegurarnos de que el timeout extendido solo se utilice en los casos excepcionales en los que sea necesario, envolviendo el código del cliente en un condicional que verifique una variable global, de la siguiente manera:

    #dim result As %XML.DataSet
    set wc = ##class(SlowSOAPService.WebClient.SlowSOAPServiceSoap).%New()
    if (^reallySlowSvcExpectedTime > 0) {
        set sc = wc.TimeoutSet(^reallySlowSvcExpectedTime)
    }
    set sc = wc.GetSlowService(.result)

La global actúa tanto como un indicador (¿es mayor que 0? entonces establece el timeout) y como el número de segundos a esperar. Para el problema descrito al inicio de este artículo, notificaríamos a los clientes que deben configurar temporalmente una variable global utilizando un terminal IRIS conectado a su instancia de la siguiente manera:

    set ^reallySlowSvcExpectedTime = 600

Una vez que esperemos nuevamente a que el servicio devuelva rápidamente una pequeña cantidad de datos, los clientes pueden restablecerse para usar el timeout predeterminado configurando la variable global de nuevo a 0:

    set ^reallySlowSvcExpectedTime = 0
Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Out. 28, 2024

Load and compile error

Hello,

I am using the following: 

s status = $SYSTEM.OBJ.Load("myClassName," "c")

and while trying to compile it i get an error that a property or method does not exist, more specifically:

 

Method or Property 'basicToolbar' does not exist in this class.

it's important to say - basicToolbar DOES EXIST! If i manually compile this class through the studio, it will work and is runnable. 
only when using the Load command i get this error. 

what could possibly be wrong?
i also tried combination of different flags but fail to understand how is this possible.
 

3 Comments
Discussão (3)1
Entre ou crie uma conta para continuar
Anúncio
· Out. 28, 2024

¡20,000 miembros en la Comunidad de Desarrolladores de InterSystems!

Redoble de tambores, por favor...

🎉 ¡La Comunidad de Desarrolladores de InterSystems ha superado oficialmente los 20,000 miembros registrados! 🎉

Pero eso no es todo: también hemos alcanzado algunos hitos impresionantes:

📝 21,500 publicaciones

👁 10,000,000 visitas

¡Queremos dedicar un momento para celebrar con todos vosotros que habéis hecho esto posible!

En lo que parece un abrir y cerrar de ojos, ¡nuestra comunidad ha EXPLOTADO en tamaño! 🤯 ¡Hemos duplicado nuestro número en solo dos años! No se trata solo de números, sino del impacto que vosotros estáis generando, y no podríamos estar más agradecidos.

Este crecimiento fenomenal se debe a vosotros, nuestra increíble comunidad de desarrolladores, contribuyentes y pioneros. Ya sea compartiendo vuestra experiencia y conocimientos avanzados, haciendo preguntas que invitan a la reflexión o colaborando con otros, ¡sois el corazón de esta Comunidad! ❤️‍🔥 Estáis transformando esta plataforma en una potencia de ideas y soluciones, y ¡estamos aquí para ello!

🌍🫂 Con seis comunidades regionales en diferentes idiomas (EN, ES, PT, JP, CN, FR), estamos uniendo a desarrolladores de todo el mundo, haciendo de la Comunidad de Desarrolladores de InterSystems un verdadero centro global.

👏 Un agradecimiento especial a nuestros supermoderadores, gestores de contenido y administradores que mantienen esta increíble máquina funcionando sin problemas. ¡Vuestra dedicación mantiene los engranajes en movimiento, y no podríamos hacerlo sin vosotros!

¿Y adivina qué? ¡Esto es solo el comienzo!  
Estamos emocionados de seguir creciendo, aprendiendo e innovando JUNTOS. Ya seas nuevo en la comunidad o un miembro de larga data, hay mucho más por delante para todos nosotros.

¡GRACIAS!

---

Atentamente,  
El equipo de la Comunidad de Desarrolladores de InterSystems

Discussão (0)1
Entre ou crie uma conta para continuar