Se ti puo' aiutare io faccio cosi pero' occhio a file di grosse dimensioni, questo modo impegna la ram del sistema.
codice:
if(File.Exists(PathCompleto) == true)
{
System.Byte[] m_byteFile = utility.DownloadFile(PathCompleto);

// estraggo il nome file dal Path completo
				
string NomeFile = PathCompleto.Substring(PathCompleto.LastIndexOf(@"\")+ 1);
//Clear del contesto
HttpContext.Current.Response.Clear();
				
//Imposto l'header
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + NomeFile);
HttpContext.Current.Response.AddHeader("Pragma", "public");
HttpContext.Current.Response.AddHeader("Cache-Control","max-age=0");
HttpContext.Current.Response.AddHeader("Content-Length", m_byteFile.Length.ToString());
HttpContext.Current.Response.ContentType = "application/save; name= NomeFile";

//Scrittura dei Byte
HttpContext.Current.Response.BinaryWrite(m_byteFile);					
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}