Tengo una situación bastante extraña.Comportamiento extraño con uri y clases WebClient en el paquete SSIS
tengo este paquete muy simple:
- tarea "obtener la lista" recupera una tabla de datos de un conjunto con uno columna y una lista de URL que se corrió en una variable de objeto .
- El "foreach" bucle de bucle a través de la variable de objeto y carga el URL en una cadena URL variable de
La "marcha", llama a la URL con el código (el 2005 así que estoy atascado con VB):
Dim myURI As New Uri("http://" + Dts.Variables("URL").Value.ToString()) Dim myWebClient As New System.Net.WebClient myWebClient.OpenReadAsync(myURI)
la URL que se llama es interno y simplemente lee los parámetros y realiza una serie de operación que llevará algún tiempo, es por eso que he usado "OpenReadAsync"
Mi problema es: si tengo 4 URL para ejecutar, el paquete solo ejecuta 2 de ellas. El ciclo 4 veces, el script se llama 4 veces (puedo ver si lo depuro), la línea myWebClient.OpenReadAsync(myURI)
se ejecuta 4 veces con 4 valores diferentes, pero solo se hacen 2 llamadas a la URL.
Si ejecuto el paquete de nuevo, ahora se llaman las otras 2 URL, lo que demuestra que no hay nada mal con la URL y si llamo las 4 urls manualmente en el navegador (en 4 pestañas, por ejemplo) enseguida, todos producen el resultado esperado, lo que prueba que no hay nada de malo en el código que analiza la URL.
Así que me quedé con el código VB, es la primera vez que estoy usando uri y WebClient, así que me pregunto si estoy haciendo algo mal. También traté de agregar un sueño de 5 segundos entre las llamadas, pero no tuve suerte.
Cualquier ayuda sería apreciada. Gracias
Lo que si se cambia a usando el método sincrónico OpenRead? – billinkc
¡Hola billinkc! Obtengo un tiempo de espera luego de la segunda ejecución. Es extraño porque las 4 URL que tengo deben ejecutarse en unos pocos segundos, de hecho puedo ver (tengo un registro) que el segundo ejecutó 5 segundos después del primero. Y si ejecuto el paquete la segunda vez, las 2 URL restantes funcionan bien, así que definitivamente es algo así como llamar al código más de 2 veces – Diego
Cada vez que me encuentro con problemas de código "extraños" en SSIS, vuelco el código a una aplicación de consola .NET y ver si puedo reproducir el comportamiento allí. Supongo que ya lo has intentado, pero en caso de que no lo hayas hecho, ese podría ser un lugar para volverte ya que no ha habido mucho amor por tu generosidad. Además, ¿cómo se ve tu código completo? ¿Hay alguna posibilidad de que se llamen las 4 URL, pero como son llamadas asincrónicas, simplemente no observas los efectos hasta más adelante? ¿Qué pasa si pone un hilo más largo. Duerma allí, algo que coincida con la duración esperada del proceso? Derrota el propósito de la asincrónica, lo sé, pero puede arrojar algo de luz – billinkc