Sto lavorando con un'applicazione WPF .net 4.0. Ho una barra di ricerca. Per ogni token di ricerca devo eseguire 8 richieste http su 8 URL separati per ottenere risultati di ricerca. Invio 8 richieste al server dopo 400 millisecondi dopo che l'utente ha smesso di digitare nella barra di ricerca. La ricerca di risultati da 6 a 7 per i token di ricerca si presenta molto bene. Ma dopo questo improvvisamente HttpWebRequest smette di funzionare silenziosamente. Nessuna eccezione è stata lanciata, nessuna risposta è stata ricevuta. Sto lavorando con Windows 7, ho disabilitato anche il firewall. Non so dove sono perse le successive richieste http.HttpWebRequest smette di funzionare all'improvviso, nessuna risposta ricevuta dopo poche richieste
Qualcuno può mostrarmi luci per risolvere questo problema?
Di seguito è riportato il mio codice per la chiamata HttpWebRequest.
public static void SendReq(string url)
{
// Create a new HttpWebRequest object.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Proxy = new WebProxy("192.168.1.1", 8000);
// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);
string postData = this.PostData;
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
using(HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
{
using(Stream streamResponse = response.GetResponseStream())
{
using(StreamReader streamRead = new StreamReader(streamResponse))
{
string responseString = streamRead.ReadToEnd();
Debug.WriteLine(responseString);
}
}
}
}
Quanto sei certo che non vengano lanciate eccezioni per le altre richieste? Le tue chiamate 'Close' non sono in istruzioni' using', il che significa che se ci sono eccezioni, lascerai aperte le connessioni di risposta, che potrebbero deadlock in seguito richieste ... –
Non viene generata alcuna eccezione. L'applicazione è completamente silenziosa. Nessuna risposta ricevuta GetResponseCallback non viene mai chiamato dopo 6 o 7 richieste. Ho aggiornato il codice. Aggiunto * usando * ma ancora lo stesso problema. – Somnath
Hai guardato cosa sta succedendo a livello di rete con qualcosa come Wireshark? –