Ho questo codice, che sta lavorando quando soltanto 1 download è in esecuzione in un momentoCome limitare la larghezza di banda e consentire download multipli durante il download di un file?
using (System.IO.FileStream fs = System.IO.File.OpenRead(@"C:\HugeFile.GBD"))
{
using (System.IO.BinaryReader br = new System.IO.BinaryReader(fs))
{
Response.AddHeader("Cache-control", "private");
Response.AddHeader("Content-Type", "application/octet-stream");
Response.AddHeader("Content-Length", fs.Length.ToString());
Response.AddHeader("Content-Disposition", "filename=HugeFile.GBD");
Response.Flush();
float kbs = 20f;
while (fs.Position < fs.Length)
{
if (!Response.IsClientConnected)
break;
byte[] bytes = br.ReadBytes((int)Math.Truncate(1024 * kbs));
char[] c = UTF8Encoding.Default.GetChars(bytes);
Response.Write(c, 0, c.Length);
Response.Flush();
System.Threading.Thread.Sleep(1000);
}
Response.Flush();
}
}
Ma se faccio due connessioni simultanee (avviare una seconda scaricare sullo stesso browser) il secondo non esegue fino a quando il primo finisce.
Utilizzando un filo o un compito produce un errore quando si aggiungono le intestazioni al Response
...
Come posso fare in modo che possa eseguire 2+ download sullo stesso browser, allo stesso tempo?
Forse guardate a fare di questo un ['Task'] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.startnew.aspx) e girate su quelli che vi servono . Inoltre, puoi dare un'occhiata a [questo sito] (http://www.codethinked.com/net-40-and-systemthreadingtasks) per ulteriori esempi. –
Potrei sbagliarmi, ma penso che non devi usare il multithread per questo. il server dovrebbe gestire automaticamente anche questo è un file enorme. Come lo test? cosa succede se lo provano da 2 macchine diverse e hanno ancora lo stesso problema? – urlreader
Utilizzo di attività o thread, non riesce a 'Response.AddHeader (" Cache-control "," private ");' 'ArgumentException, il valore non rientra nell'intervallo previsto. – BrunoLM