asp.net - Problemas del ciclo de vida de la página de Silverlight con un controlador de eventos asíncrono
arcgis (1)
Si le das la vuelta al problema acerca de cómo conseguir que tu página de ASP.net active las funciones de Silverlight después de que se haya completado, no habrá condiciones de carrera.
Aquí hay un enlace sobre cómo hacer eventos en script de Silverlight desde javascript externos que deberían ser de ayuda.
En mi aplicación web ASP.net, tengo un código en el evento Page_Init () de mi página que comprueba algunas variables de sesión para redirigir a los usuarios si se ha producido un tiempo de espera de la sesión.
En mi aplicación Silverlight tengo un controlador de eventos de botón que ejecuta algunos códigos ESRI ArcGIS de forma asíncrona, y que configura un controlador de eventos que se activa cuando se completa la llamada asíncrona:
QueryTask queryTask = new QueryTask(myLayer.Url + "/" + layerID);
queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryCountyTask_ExecuteCompleted);
queryTask.ExecuteAsync(query);
También hay un poco de código que llama a una función de JavaScript en la página para ocultar un Panel. La inclusión de este código provoca una devolución de datos de página completa.
HtmlPage.Window.Invoke("hideReport");
Mi problema es que a veces el evento queryCountyTask_ExecuteCompleted () Silvelright se dispara antes del evento Page_Init () Page y a veces se activa después. En los casos en que Silverlight se dispara antes del evento Page, el estado de la sesión está vacío, lo que hace que el usuario se redirija incorrectamente a la página "su sesión ha agotado el tiempo de espera". Siempre que el evento de Silverlight se active después del evento de página, las variables de sesión todavía están presentes y todo funciona bien.
Parece que la ubicación del método Invoke no influye cuando se activa el evento a nivel de página, por lo que el orden de los eventos parece ser aparentemente aleatorio. ¿Hay alguna manera de ordenar los eventos para evitar estas condiciones de carrera?
¿Hay alguna forma de coordinar estos eventos de devolución de llamada asíncrona con el ciclo de vida de página normal de una página de aplicación web para evitar estas condiciones de carrera?