Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Download c#

  1. #1

    Download c#

    Salve, ho bisogno di scaricare un file da un link prodotto da un webservice.. Mi spiego meglio..
    Sto sviluppando un applicazione web che sfrutta un webservice SoapXml. Devo usare nella mia app la funzione Export. Questa funzione ritorna un url temporaneo.. Al momento della richiesta di download del file, il server CREA quel file e lo mette a disposizione per il download qualche secondo dopo.
    Io sto provando a usare
    codice:
     webClient.DownloadFile(url, @"c:/eccetera/");
    che mi scarica il file e me lo salva a 0kb.. è troppo veloce! Non ha il tempo di creare il file.. ho provato a mettere anche
    codice:
     
    webClient.OpenRead(url); 
    System.Threading.Thread.Sleep(7000);
    webClient.DownloadFile(url, @"c:/eccetera/");
    ma non funziona lo stesso..
    In modalità debug se metto un break point su webClient.DownloadFile e lo faccio scorrere dopo 3, 4 secondi il file ha il tempo di crearsi e quindi me lo scarica completo..
    Come posso fare a risolvere questo mio problema?(ho provato anche la modalità Asincrona di DownloadFile() )

    Vi ringrazio anticipatamente
    http://www.darsenatravel.com -
    Vai in Vacanza con Darsena Travel - I prezzi più bassi del web!

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    hai provato a ciclare per un po' di secondi su una

    If File.Exists(url) ...

    etc ?

  3. #3
    Il file lo crea subito quindi esiste... ma lo scarica a 0kb!!
    http://www.darsenatravel.com -
    Vai in Vacanza con Darsena Travel - I prezzi più bassi del web!

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    si scusa hai ragione, mi sa che a parte soluzioni piu' complesse la piu' semplice è non mettere in sequenza il download ma farlo a comando dietro un pulsante abilitato o visibile dopo 4-5 sec...

    (altrimenti prova a postare tutto il codice, non si capisce se c'e' qualche inghippo)

  5. #5
    il download è un file xml che prima è zippato che contiene un listino prezzi che si aggiorna giornalmente con offerte ecc.. devo farlo scaricare, unzipparlo e leggere il contenuto xml, il tutto automaticamente.. il codice è tutto quello che ho già scritto... come risolvo ?
    http://www.darsenatravel.com -
    Vai in Vacanza con Darsena Travel - I prezzi più bassi del web!

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    a parte quello che deve fare dopo, la soluzione del pulsante, invece delle istruzioni 'in sequenza', non va bene ?

  7. #7
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    hai provato con il pattern asincrono?

    codice:
    webClient.OpenReadAsync(url); 
    webClient.OpenReadCompleted += (se, ea) => {
      if (!ea.Cancelled && ea.Error == null)
        (se as WebClient).DownloadFile(url, @"c:/eccetera/");
    }

  8. #8
    Si avevo provato anche il download asincrono. Comunque sono riuscito a risolvere
    codice:
     
    
     public void PoolAndDownloadFile(Uri uri, string filePath)
            {
                WebClient webClient = new WebClient();
                byte[] downloadedBytes = webClient.DownloadData(uri);
                while (downloadedBytes.Length == 0)
                {
                    Thread.Sleep(2000);
                    downloadedBytes = webClient.DownloadData(uri);
                }
                Stream file = File.Open(filePath, FileMode.Create);
                file.Write(downloadedBytes, 0, downloadedBytes.Length);
                file.Close();
            }
    Impiega circa 15 secondi ma vabene così.
    Grazie a tutti voi lo stesso.
    Arrivederci al prossimo problema
    http://www.darsenatravel.com -
    Vai in Vacanza con Darsena Travel - I prezzi più bassi del web!

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    15 secondi ?

    non sono molto pratico di queste classi, ma se puo' essere d'aiuto ulteriore, da un rapido giro su StackOverflow notavo che (come diceva rsdpz) --in modalità asincrona-- esiste anche un gestore DownloadDataCompleted

    codice:
    webClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(DownloadCompleted);
    
    private static void DownloadCompleted(Object sender, DownloadDataCompletedEventArgs e)
    {
        byte[] bytes = e.Result;
        // fai qualcosa con i bytes
    }
    ciao

  10. #10
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    strano che con il pool manuale vada e con i metodi asincroni no...

    effettivamente la mia risposta era per attenermi al post iniziale in cui prima apriva il file e poi lo scaricava (non mi sono chiesto il motivo del perche ). Pero, se lo scarichi direttamente (come hai fatto tu con il pool manuale e come ha suggerito djciko con la modalità asincrona), usando la modalità asincrona è ancora meglio perche l'eventArg ha la proprietà Result con lo stream della risorsa gia scaricata e pronta per l'uso.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.