Ho un servizio Windows .NET che genera un thread che agisce semplicemente come HttpListener
. Questo funziona bene nell'esempio modalità sincrona ...Gestione di più richieste con C# HttpListener
private void CreateLListener()
{
HttpListenerContext context = null;
HttpListener listener = new HttpListener();
bool listen = true;
while(listen)
{
try
{
context = listener.GetContext();
}
catch (...)
{
listen = false;
}
// process request and make response
}
}
Il problema che ora ho è ho bisogno di questo per lavorare con più richieste e li hanno risposto a simultaneamente o almeno in maniera sovrapposta.
Per spiegare ulteriormente, il client è un'app di lettore multimediale che inizia effettuando una richiesta per un file multimediale con la proprietà dell'intestazione della richiesta Range bytes=0-
. Per quanto posso dire, fa questo per capire che cos'è il contenitore multimediale.
Dopo aver letto un "chunk" (o se ha letto abbastanza per accertare il tipo di supporto), effettua un'altra richiesta (da un diverso numero di socket del client) con Range bytes=X-Y
. In questo caso, Y è il Content-Length restituito nella prima risposta e X è 250000 byte meno di quello (rilevato utilizzando IIS come test). A questo punto sta ottenendo l'ultimo "pezzo" per vedere se è possibile ottenere un indicatore di tempo dei media per misurare la lunghezza.
Dopo aver letto ciò, effettua un'altra richiesta con Range bytes=0-
(da un altro numero di socket) per avviare correttamente lo streaming del file multimediale.
In qualsiasi momento, se l'utente del client esegue un'operazione "salta", invia un'altra richiesta (da un altro numero di socket) con Range bytes=Z-
dove Z è la posizione in cui passare nel file multimediale.
Io non sono molto bravo con le cose HTTP ma, per quanto posso dire, ho bisogno di usare più thread per gestire ogni richiesta/risposta, mentre permetto al HttpListener
originale di tornare all'ascolto. Ho fatto molte ricerche ma non riesco a trovare un modello che sembra adattarsi.
EDIT:
riconoscimento e gratitudine a Rick Strahl per il seguente esempio, che sono stato in grado di adattarsi per soddisfare le mie esigenze ...
Add a Web Server to your .NET 2.0 app with a few lines of code
Un modo perfetto per farlo, ma fare i conti con la programmazione Async renderà il server migliore –