2010-02-01 6 views
1

Ok, donc voici une erreur aléatoire. J'ajoute dynamiquement des images à une page html. Les images sont sur un autre serveur dont je n'ai pas le contrôle. Les images sont nommées quelque chose comme ceci: imageName10.jpg imageName11.jpg imageName13.jpg imageName14.jpg imageName16.jpg imageName17.jpg imageName19.jpg.Net WebRequest Échoue tout le temps après la première défaillance

permet de prendre la liste des images ci-dessus. Je veux obtenir toutes les images disponibles, mais je ne sais pas combien il y en a. Je sais qu'il commence par la chaîne "imageName", a un nombre entre 10 et 20 et se termine par la chaîne ".jpg". J'ai décidé de créer une boucle de 10 à 20 en créant le nom de l'image et en ajoutant les balises d'image à mon code HTML. Cela fonctionne, mais je ne veux pas ajouter de liens brisés, donc je veux d'abord vérifier si l'image existe. Pour ce faire, j'ai utilisé un WebRequest pour obtenir l'URL de l'image avec un délai de 5 secondes. Si elle expire, elle saute essentiellement sur le lien et continue la boucle.

 String dynamicHtmlStr = String.Empty; 
     dynamicHtmlStr += "<TABLE>"; 
     WebRequest webReq = null; 
     WebResponse webResp = null; 
     for (int i = 10; i < 20; i++) 
     { 
      try 
      { 
       webReq = WebRequest.Create("http://www.someurl.com/image/imageName" + i + ".jpg"); 
       webReq.Timeout = 5000; 
       webResp = webReq.GetResponse(); 

       dynamicHtmlStr += "<TR>"; 
       dynamicHtmlStr += "<TD>"; 
       dynamicHtmlStr += "<IMG http://www.someurl.com/image/imageName" + i + ".jpg"\">"; 
       dynamicHtmlStr += "</TD>"; 
       dynamicHtmlStr += "</TR>"; 
      } 
      catch (Exception) 
      { 
      } 
     } 
     dynamicHtmlStr += "</TABLE>"; 
     return dynamicHtmlStr; 

Ma question est la suivante: Après WebRequest échoue la première fois. toutes les autres demandes Web après cela semblent échouer aussi. Par exemple, prenez la liste des images ci-dessus. La boucle commence à 10. Elle fait une requête web pour voir si "imageName10.jpg" existe, obtient une bonne réponse, j'ajoute la chaîne html à la variable dynamicHtmlStr. Il boucle à nouveau, cette fois sur 11 et tout va toujours bien. Ensuite, nous passons à 12. 12 est faux et n'ajoute pas au dynamicHtmlStr car il n'existe pas, ce qui est correct. Nous passons à 13 qui existe, mais cela échoue aussi et toutes les autres demandes de Web après cela, indépendamment de si elle existe ou non.

Cela n'a aucun sens pour moi. Est-ce que je fais quelque chose de mal?

Répondre

2

La situation est un peu étrange, je dois dire.

J'ai tendance à utiliser les classes HttpWebRequest/HttpWebResponse avec beaucoup de succès directement avec les flux. La demande est assez simple, jetez un oeil here et here.

Une fois que vous avez créé votre demande, vous pouvez regarder la réponse ici:

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
{ 
    using (Stream responseStream = response.GetResponseStream()) 
    { 
     using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8)) 
     { 
      // Put in code to check response status. You'll probably get a 404 when not found. 
     } 
    } 
} 

Une autre note: Je sais que la taille de la boucle est minute, mais vous devriez toujours essayer d'utiliser une StringBuilder pour chaîne itérative enchaînement.

+0

Merci pour les conseils sur le StringBuilder. Je vais essayer le HttpWebRequest/HttpWebResponse et voir ce qui se passe –

+0

Mon problème était que je ne fermais pas le flux de réponse. Merci. –

+0

Après avoir fait cela, je reçois toujours ce problème ... –

Questions connexes