2015-04-13 7 views
11

Nella mia applicazione Web ASP.net, ho codice nell'evento Page_Init() della mia pagina che controlla alcune variabili di sessione per reindirizzare gli utenti se si verifica un timeout di sessione.Silverlight Problemi relativi al ciclo di vita della pagina con Asyncrusus Event Handler

Nella mia applicazione Silverlight Ho un gestore di eventi pulsante che esegue un codice ESRI ArcGIS in modo asincrono, e che configura un gestore di eventi che spara quando la chiamata asincrona:

QueryTask queryTask = new QueryTask(myLayer.Url + "/" + layerID); 
queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryCountyTask_ExecuteCompleted); 
queryTask.ExecuteAsync(query); 

C'è anche un po 'di codice che chiama una funzione JavaScript on-page per nascondere un pannello. L'inclusione di questo codice causa un postback a pagina intera.

HtmlPage.Window.Invoke("hideReport"); 

Il mio problema è che a volte le queryCountyTask_ExecuteCompleted() generato l'evento Silvelright prima della Page_Init() evento pagina e, a volte spara dopo. In quei casi in cui Silverlight viene generato prima dell'evento Page, lo stato della sessione è vuoto, causando il reindirizzamento errato dell'utente a una pagina "la tua sessione è scaduta". Finché l'evento Silverlight viene attivato dopo l'evento Page, le variabili Session sono ancora presenti e tutto funziona correttamente.

Sembra che il posizionamento del metodo Invoke non influenzi quando viene attivato l'evento a livello di pagina, quindi l'ordine degli eventi sembra apparentemente casuale. C'è un modo per ordinare gli eventi in modo da evitare queste condizioni di gara?

C'è un modo per coordinare questi eventi di callback asincroni con il normale ciclo di vita della pagina di una pagina web in modo da evitare queste condizioni di gara?

risposta

1

Se si capovolge il problema di come ottenere la pagina ASP.net per attivare le funzioni Silverlight dopo aver completato, quindi non ci sarà alcuna condizione di gara.

Ecco un Link su come creare eventi in Silverlight con script da JavaScript esterno che dovrebbe aiutare.

+0

Sfortunatamente non vengono chiamate direttamente le funzioni di Silverlight, ma gli eventi di Silverlight vengono attivati ​​dalle chiamate di servizio ESRI ArcGIS (ovvero gli eventi che vengono generati quando una query GIS ha esito positivo o negativo). Il tempo necessario per il rilascio di questa query determina se ritorna prima che si verifichi il postback. – bperniciaro

+0

La tecnica di chiamare i metodi Silverlight dal lato server dovrebbe funzionare poiché è possibile attendere fino a quando la pagina non viene caricata per effettuare le chiamate della query. Dovrai solo spostare qualsiasi codice dal codice Silverlight che viene eseguito al caricamento e spostarlo in metodi che chiami una volta caricata la pagina. Puoi anche passare lo stato dal server sid eto al plugin Silverlight usando la proprietà InitParams http://weblogs.asp.net/lduveau/provide-startup-parameters-to-silverlight-with-initparams –

Problemi correlati