2010-02-01 91 views
1

好的,这是一个随机错误。我正在动态地将图像添加到html页面。这些图像位于另一台我无法控制的服务器上。图像被命名为这样的事情: imageName10.jpg imageName11.jpg imageName13.jpg imageName14.jpg imageName16.jpg imageName17.jpg imageName19.jpg.Net WebRequest第一次失败后一直失败

让我们的图像列表上方。我想获得所有可用的图像,但我不知道有多少图像。我知道它以字符串“imageName”开头,有一个10到20之间的数字,然后以字符串“.jpg”结尾。我决定创建一个从10到20的循环,创建图像名称并将图像标签添加到我的html中。这工作,但我不想添加断开的链接,所以我想先检查图像是否存在。为此,我使用WebRequest以5秒的超时时间获取图像URL。如果超时,它会跳过链接并继续循环。

 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; 

我的问题是这样的: 将向WebRequest失败后的第一次。之后的所有其他网络请求似乎也失败了。例如,拿上面的图片列表。循环从10开始。它执行一个web请求来查看“imageName10.jpg”是否存在,获得了很好的响应,我将html字符串添加到dynamicHtmlStr变量中。它再次循环,这次是11,并且仍然很好。然后我们继续前进到12. 12是错误的,并且不会添加到dynamicHtmlStr,因为它不存在,这是正确的。我们转到13存在,但是这也失败了,其后的每个其他web请求,无论它是否存在。

这对我来说没有意义。难道我做错了什么?

回答

2

这个情况有点奇怪,我必须说。

我倾向于使用HttpWebRequest/HttpWebResponse类,并直接在流中取得巨大成功。

该请求非常简单,看看herehere

一旦你创建你的要求,你可以看看这里的响应:

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. 
     } 
    } 
} 

另注:我知道环的大小是微小的,但你应该总是尝试使用StringBuilder迭代字符串级联。

+0

感谢您对StringBuilder的建议。我会尝试HttpWebRequest/HttpWebResponse,看看会发生什么 – 2010-02-01 11:46:08

+0

我的问题是,我没有关闭响应流。谢谢。 – 2013-08-27 12:49:06

+0

做完这个后,我仍然得到这个问题... – 2016-02-10 11:16:11

相关问题