2009-04-14 11 views
9

Come mantenere una connessione attiva in C#? Non sto facendo bene Suppongo di creare un obj HttpWebRequest e usarlo per andare a qualsiasi URL ho bisogno? Non vedo un modo per visitare un URL diverso dal metodo statico HttpWebRequest.Create.Mantieni una connessione http attiva in C#?

Come creare una connessione, mantenerla attiva, sfogliare più pagine/supporti sulla pagina e supportare i proxy? (Ho sentito che i proxy sono facili e il supporto è quasi standard?) -edit- buone risposte. Come posso richiedere un secondo URL?

{ 
HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create("http://google.com"); 
WebRequestObject.KeepAlive = true; 
//do stuff 
WebRequestObject.Something("http://www.google.com/intl/en_ALL/images/logo.gif"); 
} 

risposta

19

Hai provato la proprietà HttpWebRequest.KeepAlive? Imposta l'intestazione HTTP Keep-Alive appropriata e mantiene le connessioni. (Naturalmente questo deve anche essere supportato e abilitato dal server Web remoto).

La HttpWebRequest.KeepAlive documentazione su MSDN afferma che è impostata su true per impostazione predefinita per le connessioni HTTP1.1, così ho il sospetto il server si sta cercando di contattare non consente il collegamento persistenza.

Il proxy viene utilizzato automaticamente e le relative impostazioni vengono prese dalle impostazioni del sistema (leggere Internet Explorer). È anche possibile sovrascrivere le impostazioni del proxy tramite la proprietà HttpWebRequest.Proxy o modificando il file di configurazione dell'applicazione (vedere http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx).

8

Set HttpWebRequest.KeepAlive proprietà True .NET si prenderà cura di tutto il resto. È solo un pool di connessione al database. Funziona in modo trasparente.

È possibile creare liberamente una nuova connessione. NET capirà che si sta collegando un server già connesso e lo userà. Dipende anche dal tuo numero Net.ServicePointManager.DefaultConnectionLimit che stabilirà nuove connessioni (se esegui il sottotitolaggio).

+0

Non trovo che questo è esattamente vero. .NET ha bisogno di aiuto nella gestione delle connessioni riutilizzando un'istanza HttpClient. Sto lavorando a un problema ora dove ci sono migliaia di connessioni inutilizzate stabilite, perché keep-alive viene utilizzato con un timeout del lease di connessione -1 e una nuova istanza di HttpClient da utilizzare per richiesta. Questo potrebbe essere solo un problema con la nuova classe HttpClient però. –

1

Ho avuto un problema simile quando HttpWebRequest.KeepAlive = true non era sufficiente per tenerlo in vita. Il collegamento rimase solo dopo che ho impostato request.UnsafeAuthenticatedConnectionSharing = true e ServicePointManager.MaxServicePointIdleTime = 100000; // evitare 0 o bassi valori

0

Se stai usando HTTP 1.1 non si dovrebbe usare keep-alive come la connessione è implicitamente Keep-Alive.

La proprietà HttpWebRequest.KeepAlive può essere impostata ma se si invia una richiesta HTTP 1.1 non verrà effettivamente impostata l'intestazione a meno che non venga impostata su Chiudi.

Ecco un'altra domanda che ha più informazioni: is an HTTP/1.1 request implicitly keep-alive by default?