Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Http server
giovedì 12 maggio 2005 - 16.38
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Dokkis
Profilo
| Newbie
34
messaggi | Data Invio:
gio 12 mag 2005 - 16:38
ciao a tutti.. sto cercando di fare una mezza specie di piccolo web server.. col mio WS finchè devo scaricare file piccoli non ci sono problemi:
FileStream fs = new FileStream(sPhysicalFilePath, FileMode.Open, FileAccess.Read,
FileShare.Read);
BinaryReader reader = new BinaryReader(fs);
byte[] bytes = new byte[fs.Length];
int read;
while((read = reader.Read(bytes, 0, bytes.Length)) != 0)
{
// Read from the file and write the data to the network
sResponse = sResponse + Encoding.ASCII.GetString(bytes,0,read);
iTotBytes = iTotBytes + read;
}
reader.Close();
fs.Close();
SendHeader(sHttpVersion, sMimeType, iTotBytes, " 200 OK", ref mySocket);
SendToBrowser(bytes, ref mySocket);
come potete assurdamente vedere il mio WS crea un array di byte[] grande quanto il conteggio totale dei byte del file.. quindi con file anche sugli 1-2 mb la ram skizza sui 50 mb e se provo con un file di 10 mb arriva anche a 100-200 mb di ram.. vorrei sapere come mandare i byte tipo con un buffer di 4096.. se mando semplicemente i byte a 4096 (so come fare) il metodo WebClient.Download(url,path) va in eccezione per protocollo errato.. prima di mandare i 4096 byte cosa dovrei mandare? in quel caso mando:
SendHeader(sHttpVersion, sMimeType, iTotBytes, " 200 OK", ref mySocket);
SendToBrowser(bytes, ref mySocket);
prima il msg 200 OK al client e poi tutti i byte del file.. se faccio così anche ad ogni 4096 il client mi scarica solo i primi 4096 byte dato che 200 OK si manda a protocollo finito.. come dovrei fare?? l'esempio l'ho trovato da qua:
http://www.codeproject.com/csharp/mywebserver.asp
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 12 mag 2005 - 18:36
Ciao,
la costruzione di un server Web Http non è così semplice come qualcuno vorrebbe far credere. L'implementazione del protocollo già in sè non è una cosa molto banale.
In ogni caso ti sconsiglio l'uso della classe WebClient.Download perchè a me personalmente ha creato diversi problemi. In genere per questo tipo di applicazioni si usano i socket (classe Socket).
Riguardo al dump della memoria a 100 mega, sì, la risposta è che devi inviare i dati a chunk (blocchi) in modo da non creare un eccessivo overhead sul sistema.
Ultima considerazione per creare un Web Service scalabile ed efficente in termini di performance e memoria programmalo in Visual C++ che non sbagli.
ciao
david
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !