Newsgroup: it.comp.lang.javascript
Titolo: [?] Microsoft.XMLHTTP e timeout

Uso in intranet Microsoft.XMLHTTP (non ho mai avuto voglia di convertire in
modalità cross-browser, se trovo una soluzione è la volta buona!).
Pagina con elenco di report; apro il report e ho tasti per generare pdf e
xls.
Click sul tasto, genera l'xls sul server, restituisce il path e via
javascript apro il path in un frame nascosto forzando il download.
Problema: alcuni report si inchiodano per timeout (gli arriva un xml
nullo).
Cercando in rete sembra non esista modo (né con l'oggettino Microsoft, né
con xmlhttprequest) di settare il timeout client-side (server-side esiste
invece setTimeouts, che ho provato a piazzarglielo come metodo ma segnala
errore).
Conoscete per caso qualche alternativa?
Penso sia risolvibile in modalità asincrona (penso, non sono sicuro che
risolva il problema, percui chiedo perché devo metter mano alla libreria
per abilitare la modalità sincrona).
Grazie
Cristiano
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

Il Wed, 4 Apr 2007 17:43:38 +0200, Cristiano Larghi ha scritto:
[CUT]
nientenienteniente? a nessuno sono mai capitati timeout di attesa risposta?
secondo voi se mi sbatto a cambiare la libreria per accettare anche
chiamate asincrone risolve? secondo me no, il problema rimane, però ...
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 chiamate asincrone risolve? secondo me no, il problema rimane, però ...
Continua a sfuggirmi il problema.
-- 
~ "Non ci si uccide per amore, basta aspettare."
"Allora non mi uccido per amore, mi uccido per impazienza."
(A.O. e M.T.)

 capitati timeout in attesa di risposta, ma che c'entra JS?
che non ci sono timeout sul server, č solo che determinate pagine ci
mettono piů di x minuti per rispondere... ripeto: nessun problema di
timeout sul server, ma il client dopo x minuti (non so quale sia il
default) si "scollega".
stessa pagina, stessa function js, che effettua chiamate server-side e
riceve in risposta il nome del file creato.
Se, per creare tale file, ci mette piů di X minuti, la pagina segnala
errore (che non ricordo, ma un qualcosa del tipo "resettata la connection"
o simile).
Cercando in rete dicono che non esiste purtroppo un modo di modificare il
timeout di xmlhttp client-side: esiste server-side, altrimenti dicono anche
di usare un altro oggettino (winHTTP o simile, mi sembra).


 chiamate asincrone risolve? secondo me no, il problema rimane, però ...
Scusa, forse mi sfugge qualche aspetto della questione, ma mi pare che in
modalità asincrona tu possa risolvere egregiamente il problema, se la
difficoltà è solo quella di gestire un timeout. 
In modalità asincrona puoi decidere tu quando interrompere una richiesta.
Lo fai invocando 'abort'. 
Però, ripeto, sospetto mi sfugga qualcosa.
Max

 difficoltà è solo quella di gestire un timeout. 
sì, il problema è quello, ma sei sicuro che risolva? io non capisco in base
a quale criterio, dopo X minuti, mi segnala questo "reset connection". in
modalità asicrona io immagino che internamente ci sia l'oggetto che attende
comunque la risposta e, quando arriva, chiama la callback...se così è, a
naso, il timeout settato di default è lo stesso.
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 o simile).
Hai guardato il valore che hai nelle proprietà status e responseText?
-- 
~ Il lavoro è prezioso. Non essere egoista! Lascialo agli altri!

 connection".
In realtŕ avevo capito male. Il tuo problema non č semplicemnte gestire il
timeout. Tu vorresti che il client attendesse anche un tempo molto lungo.
Sei sicuro che il problema non sia lato server? Mi spiego: il fatto che il
client dica che la connessione sia stata "resettata" suggerisce che sia il
server a chiuderla. Puň darsi che la tecnologia o la configurazione del
server non tolleri che un'operazione innescata da una richiesta possa
impiegare piů di un certo tempo. 
Prova a effettuare la stessa richiesta con uno strumento che ti consenta di
vedere esattamente cosa succede: se il server risponde qualcosa o se dopo
un po' chiude butalmente senza emettere nulla. 
 
Max

 Hai guardato il valore che hai nelle proprietà status e responseText?
sì, ho verificato di tutto (responseText è vuoto, l'errore segnalato
(parseError? a memoria non ricordo) è appunto tipo un "drop connection",
dovrei eseguirne una per verificare ma ci mette appunto un bel po'...magari
la eseguo in pausa pranzo così ho l'errore esatto)
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 impiegare più di un certo tempo. 
no, ho dubbi che sia quel bastardo di isa server, ma non saprei come
scavallarlo per testare ... però in rete ho trovato vari thread con questo
problema, tutti senza soluzione (dicono che il timeout è standard e non è
modificabile)
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.

 la eseguo in pausa pranzo così ho l'errore esatto)
Un suggerimento: Anche se con Microsoft.XMLHTTP non so se possa
funzionare, diversamente da XMLHttpRequest.
Prova a mandare qualcosa al client ogni tanto, mentre crei quel
file. Scrivi qualcosa sull'output buffer, e poi fanne il flush.
E nel caso prova a fare un test del genere pure su una chiamata
asincrona (un test, senza rifare la libreria)
-- 
~ Il futuro è nelle nostre mani. Purtroppo.

 modalità asincrona ma non sono così sicuro che possa risolvere il problema.
Io, per queste cose, ho una funzione in polling (una volta al secondo) che
legge da una coda le richieste "ajax", e solo se l'oggetto e` libero le
esegue, altrimenti le lascia in coda.
Mi limito, quando un utente clicka, a mettere nella coda la richiesta (e a
mettere una gif animata che indichi "la tua richiesta e` in invio").
La gif appare subito, la richiesta parte quando puo`. Se non ci sono altre
richieste in coda parte in media dopo mezzo secondo. Se ce ne sono altre,
prima termina quelle, poi parte lei.
Bye.

 esegue, altrimenti le lascia in coda.
sì, ho in mente la logica...semplicemente in intranet non sono interessato
a usare modalità asincrona. se serve la implemento, ma appunto non penso
proprio possa risolvere in questo caso.


 asincrona (un test, senza rifare la libreria)
questa è più lunga perché devo per forza passare da quella pagina, ma se
non trovo altre soluzione ci lavorerò.
comunque sia sì, più ci penso più penso sia quel fetente di isa server, ho
un vago ricordo di un qualcosa di simile capitato tempo fa ma acc non
riesco proprio a farmelo venire in mente (magari avevo trovato la
soluzione...)
ho nel frattempo trovato l'errore originale restituito:
"10054 - connection reset by server ISA" - "the server you are attempting
to access has aborted the connection" ... ma porc di quella putt ...
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 to access has aborted the connection" ... ma porc di quella putt ...
Vedi che il timeout non è del client ma del server :P Ma questo errore
dovrebbe arrivarti nel responseText, non dovrebbe essere vuoto... Dove
te lo restituisce, per curiosità?
-- 
~ "Solo i morti hanno visto la fine della guerra."
(Platone)

 to access has aborted the connection" ... ma porc di quella putt ...
Vedi che il timeout non è del client ma del server :P Ma questo errore


 te lo restituisce, per curiosità?
Quello che ho indicato è l'errore originale che mi ha inviato il capo (da
cui ho iniziato a studiare il problema). Dato che lo ha visto il capo vuol
dire che glielo fa vedere il codice. Guardando il codice client-side
l'errore lo restituisco così:
if(_xmlDOM.parseError!=0) 
 return _return("<ERR><![CDATA[#ERR_"+_xmlDOM.parseError.reason+"\n\nValore
restituito:"+xmlHTTP.ResponseText+"]]></ERR>");
guardando la mail il parseError ha segnalato un errore di spazio, quindi
sì, è il ResponseText.
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 sě, č il ResponseText.
Eh, mi pareva. Ma allora ci fornisci dati falsi & tendenziosi. :)
-- 
~ "Ho sciupato il tempo, e ora il tempo sciupa me."
(W.Shakespeare, "Riccardo II")