2011-05-04 1 views
3

J'ai un problème lors du téléchargement des données, il affiche l'erreur "L'opération a expiré".Comment résoudre l'erreur "L'opération a expiré"

Que puis-je faire pour résoudre cette erreur? J'utilise des formulaires Win (C#) voici mon code s'il vous plaît vérifier et donner des suggestions. Où dois-je changer le code s'il vous plaît aidez-moi ...

public void ProcessData() 
     { 


      try 
      { 
      string MessageTitle = ""; 
      int pages = Convert.ToInt32(txtPages.Text); 

      for (int k = Count; k <= pages; k++) 
      { 

       string url = "http://www.yellowpages.com/" +StateName.ToLower()+ "/" + CategoryName + "?g=" + StateName + "&page=" + k + "&q=" + CategoryName + "";//txtYP.Text + k; 
       System.Net.HttpWebRequest httpRequest; 
       System.Net.HttpWebResponse httpResponse; 
       System.IO.StreamReader SReader; 
       string html; 
       httpRequest = (System.Net.HttpWebRequest)(System.Net.HttpWebRequest.Create(url)); 
       httpRequest.Method = "GET"; 
       httpResponse = (System.Net.HttpWebResponse)(httpRequest.GetResponse()); 
       SReader = new StreamReader(httpResponse.GetResponseStream()); 
       html = SReader.ReadToEnd(); 
       string strDummy = html; 
       httpResponse.Close(); 

Répondre

1

Combien de temps est-il avant que la demande expire? Etes-vous capable de naviguer vers l'URL à partir d'un navigateur Web?

Définissez la propriété HttpWebRequest.ReadWriteTimeout sur HttpWebRequest à une valeur beaucoup plus élevée que ce qu'elle est actuellement. La valeur par défaut est 5 minutes. Je ne sais pas pourquoi cela devrait prendre plus de 5 minutes. Au lieu de bloquer sur getresponse, vous pouvez aussi utiliser des rappels asynchrones (BeginGetResponse/EndGetResponse).

EDIT

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
    <source name="System.Net"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.HttpListener"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.Sockets"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    <source name="System.Net.Cache"> 
     <listeners> 
     <add name="System.Net"/> 
     </listeners> 
    </source> 
    </sources> 
    <sharedListeners> 
    <add 
     name="System.Net" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="trace.log" 
     traceOutputOptions = "ProcessId, DateTime" 
      /> 
    </sharedListeners> 
    <switches> 
    <add name="System.Net" 
     value="Verbose" /> 
    <add name="System.Net.Sockets" 
     value="Verbose" /> 
    <add name="System.Net.Cache" 
     value="Verbose" /> 
    <add name="System.Net.HttpListener" 
     value="Verbose" /> 
    </switches> 
</system.diagnostics> 

Ajouter cette section à l'intérieur configuration section dans le app.config de votre application. Après avoir ajouté ce qui précède, reconstruisez la solution et exécutez-la. Regardez le fichier trace.log écrit dans le répertoire bin de votre application pour plus de détails.

+0

Merci d'avoir donné la réponse ,,, oui, je suis capable de naviguer dans l'url du navigateur web ... comment régler Httprequest time please helpme .... où je peux écrire du code ... –

+0

pourquoi il montre cette erreur "La demande a été annulée: la connexion a été fermée de manière inattendue." –

+0

Il me semble que vous martelez un site que vous ne possédez pas avec des requêtes et que vous êtes bloqué par les contre-mesures de votre pare-feu. – Arunas

0

ajouter à votre code:

httpRequest.Timeout = 3600000;

cela augmentera le délai d'attente de demande à une heure.

+0

Salut merci de donner respose ... en fait, nous ne savons pas combien de temps il faudra peut-être soit 5hrs ou 7hrs ..... –

+0

puis mettez-le 10 heures, certains programmes ont presque 24 heures comme délai d'attente pour leurs demandes. donc c'est bien testé. – Arrabi