Contexto y uso eficiente de los recursos
Este tema explica qué determina cuántas veces se llama a un servicio web. En una asignación que contenga una llamada a un servicio web, si el contexto lo permite, es posible llamar al mismo servicio web varias veces, lo que normalmente querrá evitar. Considere los casos que se exponen a continuación.
Solicitud
Si la conexión con el elemento Solicitud del componente de servicio web contiene una secuencia de valores, se llamará al servicio web varias veces, una por cada elemento de la secuencia.
Respuesta
Dependiendo de las conexiones en la parte Respuesta, será posible llamar a un servicio web varias veces, y puede que esto no sea lo deseado. Considere los ejemplos que se exponen a continuación.
Ejemplo n°1
Por ejemplo, al servicio web que se ilustra a continuación se le llama dos veces, porque no existe un contexto primario común para los nodos statusCode y body en el componente de destino.
De acuerdo con la regla general de asignación de datos, el procesamiento comienza con el elemento raíz de destino (Rows en este caso). El nodo Rows no tiene ninguna conexión, por lo que MapForce empieza a recorrer el resto de la estructura jerárquica. Para rellenar el elemento de destino statusCode, se hace la primera llamada al servicio web. Lo siguiente es que la asignación rellene el elemento body. Por lo tanto, hace la segunda llamada al servicio web. Si hubiera más elementos secundarios del nodo Rows conectados al servicio web se haría una nueva llamada por cada nodo secundario.
Dado que ni statusCode ni body tienen un contexto primario explícito (en otras palabras, su primario no está conectado a un elemento de origen), no pueden reutilizar ningún dato de su primario y deben recuperarlo individualmente del componente de llamada al servicio web. Puede resolver fácilmente este problema trazando una conexión entre Response y Rows, como mostramos a continuación:
Gracias a la conexión entre Response y Rows, el contexto primario común existe ahora para todos los nodos secundarios del nodo Rows y, ahora, solo se llama una vez el servicio web. Tras la primera llamada, todos los datos del servicio web se encuentran en el contexto actual y están disponibles para los secundarios del elemento Rows. Por lo tanto, no se producirán llamadas redundantes al servicio web.
Ejemplo n°2
En el segundo ejemplo, la respuesta de la llamada al servicio web se asigna a dos componentes de destino (imagen siguiente). En MapForce, solo puede previsualizar un resultado a la vez y, cada vez que hace clic en el botón de cualquiera de los destinos, se hace una llamada al servicio web. Sin embargo, si ejecuta la asignación con MapForce Server o como un trabajo de FlowForce Server, la asignación producirá todos los resultados en el orden especificado, de arriba a abajo. Esto también significa que la asignación hará dos llamadas al servicio web, para cada destino por separado, porque no existe un contexto de destino común.
Una solución mejor sería emitir la respuesta a un único componente de destino. Si es necesario, puede dividirlo en varios componentes. Véase el diseño de asignación que aparece más abajo.
Servicios web en funciones definidas por el usuario
Si un servicio web está dentro de una función definida por el usuario y si se llama varias veces a la función definida por el usuario durante el tiempo que dure la ejecución de la asignación, entonces se llamará al menos el mismo número de veces al servicio web. Para evitar esto debe cambiar las opciones de la configuración de la función definida por el usuario. Para más detalles, consulte Contexto en las funciones definidas por el usuario.