4 messaggi dal 06 giugno 2013
Buongiorno,
ho un problema che non riesco a risolvere in una applicazione Asp Net Fw 4.0 che prevedere l'esecuzione dell'applicazione WINWORD.EXE. Intercetto l'evento di schiusura dell'applicazione Word:


void _Application_DocumentBeforeClose(WORD.Document Doc, ref bool Cancel)
{
object oMissing = System.Reflection.Missing.Value;
_Application.Quit(ref oMissing, ref oMissing, ref oMissing);
_Application = null;


// elimina dalla memoria l'applicazione WINWORD
System.Diagnostics.Process[] aProcWrd = System.Diagnostics.Process.GetProcessesByName("WINWORD");
foreach (System.Diagnostics.Process oProc in aProcWrd)
{
oProc.Kill();
}
}

e dopo la chiusura dell'applicazione e del Documento, l'intenzione era quella di visualizzare un messaggio oppure eseguire un refresh della pagina stessa, ma il Response mi rilascia un'eccezione 'Response' ha generato un'eccezione di tipo 'System.Web.HttpException'{"Risposta non disponibile in questo contesto."}.
Potreste aiutarmi?
Grazie per la Vostra attenzione

Giuseppe Sbernini
10.246 messaggi dal 09 febbraio 2002
Contributi
Ciao Giuseppe,


intenzione era quella di visualizzare un messaggio oppure eseguire un refresh della pagina stessa

Anche se all'apparenza sembra semplice, in realtà non lo è.
Infatti, non appena la pagina web viene visualizzata nel browser del tuo utente, la connessione con il server si chiude. Certo, la pagina può restare aperta nel browser per un tempo illimitato ma il browser non saprà mai che, ad un certo punto, il documento è stato chiuso.

L'errore si riferisce appunto a questo: non puoi usare l'oggetto Response perché non c'è alcuna richiesta web in corso. La pagina web era stata servita al client parecchio tempo prima e l'opportunità di usare l'oggetto Response è ormai svanita.

Quello che puoi fare è scrivere un file di testo o nel database che il documento è stato chiuso. Poi, fai aggiornare la pagina all'utente e vai a controllare se su quel file di testo (o nel database) è stato scritto che il documento è stato chiuso.

Questa era la maniera più facile, ma ne esistono anche di più eleganti.
  • Invii una richiesta ajax al server ogni tot secondi, in modo che l'utente non sia costretto a ricaricare la pagina;
  • Oppure usi ASP.NET SignalR, che è una tecnologia appositamente creata per stabilire una connessione persistente e bidirezionale con il server, così che quando il server deve comunicare che un documento è stato chiuso, lo può fare su questo canale sempre aperto.


ciao,
Moreno

Enjoy learning and just keep making
4 messaggi dal 06 giugno 2013
Grazie per avermi fornito informazioni che mi hanno aiutato a risolvere il problema. L'espediente che ho utilizzato è il l'oggetto Timer impostato con un tempo ciclico molto breve (1,5 sec) il quale viene attivato nel momento dell'apertura di WORD e disattivato alla sua chiusura.

Questo mi permette di avere sempre la connessione tra Client e Server e naturalmente eseguire altre operazioni, quali, scritture sul DB, messaggistiche varie, ecc..

Grazie ancora per la tua e Vostra professionalità dimostrata.
Giuseppe Sbernini

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.