8 messaggi dal 06 settembre 2002
salve.

il codice che segue forza il download, ma purtroppo non da risposte asincrone su cosa accade lato client (fine download, abort).
Qualcuno sa dirmi se esiste un modo per catturare la risposta lato client?


iStream = New FileStream(fPath, FileMode.Open, FileAccess.Read, FileShare.Read)
If Not IsNothing(iStream) Then
ReDim buffer(iStream.Length)
length = iStream.Read(buffer, 0, iStream.Length)
iStream.Close()

Response.Clear()
Response.Buffer = True
Response.AddHeader("", "HTTP/1.0 200 OK")
Response.AddHeader("Content-Length", length)
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" & fName)
iar = Response.OutputStream.BeginWrite(buffer, 0, length, AddressOf EndWriteCallback, Response)

ReDim buffer(0)
buffer = Nothing
Response.End()


Private Shared Sub EndWriteCallback(ByVal asyncResult As IAsyncResult)


11.886 messaggi dal 09 febbraio 2002
Contributi
credo che devi utilizzare la tecnologia push.
Cioè con un socket stabilisci una connessione permanente con il server e fai dialogare le due parti.

credo che il Response.End() che hai messo alla fine venga eseguito ancora prima che l'utente abbia deciso che cosa fare con il file che gli viene servito: Apri o Salva con nome.

Non vorrei sbagliarmi, ma credo che quello che vuoi fare non ti sia permesso dall'attuale funzionamento del protocollo http.



Enjoy learning and just keep making
32 messaggi dal 20 dicembre 2001
www.dinuzzo.it
LucaTT ha scritto:
il codice che segue forza il download, ma purtroppo non da risposte asincrone su cosa accade lato client (fine download, abort).
Qualcuno sa dirmi se esiste un modo per catturare la risposta lato client?


Nessun codice vb.net o di altro linguaggio server side del framework potrebbe darti risposte elaborate "lato client". Quando il client chiama, il server risponde dopo di che del client non sa e non si ricorda piu' nulla (si tenta di mantenergli qualcosa in memoria con le session e altri farmaci vari  ).
La "risposta asincrona" di cui fai cenno nell'oggetto non riesco a capire cosa intendi. Per quel che ne so io quando si parla di chiamata asincrona di un metodo, si intende una tecnica che permette di utlizzare un metodo o funzione esposta da un servizio o web service che crea >>sul server<< un nuovo thread distinto da quello chiamante in modo da lasciare libero il client e non costringerlo ad attendere la fine dell'elaborazione.

Ciao
Riccardo
8 messaggi dal 06 settembre 2002
X riccardone_70:
Per risposta asincrona, intendo proprio l'evento che avverte il thread o task chiamante che il Thread figlio (generato per eleaborare ) ha terminato le sue operazoni. Una CallBack insomma.

X BrightSoul:
Si è così come dici. In pratica BeginWrite è un metotodo che genera (credo )un thread per scrivere sullo Stream, e torna sulla EndWriteCallBack. Ma quando torna
significa che ha terminato la scrittura. Di cosa accade lato client non se ne sa nulla.

----------------------------------------------------------------------------------------------------
In realtà avevo risolto la cosa, nel sito già sviluppato in asp, con le ISAPI Exstension, scrivendo una dll in C (nella funzione di callback, torna quando l'operazione termina lato client). Con .Net mi aspettavo un'integrazione di certi mecchenasmi, invece nulla! :-(|
Avete qualche dritta da darmi?
X BrightSoul, puoi darmi qualche indizio in più sul suggerimento che riguarda i Socket?
Sapepetequalcosa di quest'oggetto "InetCtlsObjects" ? non ne trovo la documentazione.

Grazie mille.........................:-))

11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
per quanto riguarda i socket, c'è un controllo activex che viene installato con windows e che ti potrebbe tornare utile. Leggi qui:
http://www.15seconds.com/issue/010820.htm

Come per tutti gli activex, di solito se ne sconsiglia l'uso su siti che si trovano su internet perchè l'utente viene notificato con robe tipo "Gli activex sono pericolosi", "sicuro di voler continuare?".
Qualcuno (giustamente) potrebbe non fidarsi e chiudere direttamente la pagina prima di vederne il contenuto.

Per fare un download con i socket hai bisogno di realizzare 2 applicazioni: il client e il server. La parte server deve essere posta in ascolto su una porta di tua scelta, pronta ad accettare le connessioni entranti.
Comunque è spiegato nella pagina che si trova al link qua sopra.

Per inserire il controllo winsock nella pagina html (versione client), prova ad usare questo codice:
<OBJECT ID="Winsock1" WIDTH=28 HEIGHT=28
CLASSID="CLSID:248DD896-BB45-11CF-9ABC-0080C7E7B78D">
<PARAM NAME="_ExtentX" VALUE="741">
<PARAM NAME="_ExtentY" VALUE="741">
<PARAM NAME="_Version" VALUE="393216">
</OBJECT>

credo che puoi lavorare bene anche interagendo col semplice javascript.
Ribadisco il consiglio comunque: usa un activex solo se ti trovi in una condzione particolare e ti è assolutamente necessario sapere se il client ha completato il download.

------------

Ah, anche un'altra soluzione:
nel tuo sito puoi far scaricare normalmente un piccolo exe che funzionerà da download manager per gli altri file del tuo sito.
Allo stesso modo con cui gli indirizzi http: vengono aperti nel browser e quelli mailto: nel client di posta elettronica, tu puoi specificare un protocollo personalizzato affinchè i tuoi file vengano aperti con il donwload manager.
Esempio:
scrivendo una cosa di questo tipo
<a href="mioprt:cartella/file.zip">Scarica il file</a>
il percorso cartella/file.zip verrà passato al tuo download manager che provvederà a scaricarlo.
Non ti so dare altre indicazioni più dettagliate su questo, però so che si può fare
ciao

Enjoy learning and just keep making
8 messaggi dal 06 settembre 2002
Grazie per la dritta, vedrò cosa posso fare.
:-))

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.