我正在尝试从外部链接下载10张照片,例如http://images.net/images/20159178574IMG_0843.jpg
我正在读取驱动器上的文本文件,并将其放在列表中,这是代码
List < string > lines = new List < string > ();
using(StreamReader r = new StreamReader(fileName))
{
string line;
while ((line = r.ReadLine()) != null)
{
lines.Add(line);
}
}
foreach(string s in lines)
{
getthefile(s, System.DateTime.Now.Hour + System.DateTime.Now.Minute + System.DateTime.Now.Second + ".jpg");
}
private void getthefile(string filename, string filenamesave)
{
if (checkurl(filename))
{
string filepath = @
"D:\files" + "\\Photos\\" + filenamesave;
WebClient webClient = new WebClient();
webClient.DownloadFile(filename, filepath);
}
}
private bool checkurl(string url)
{
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "HEAD";
var response = (HttpWebResponse) request.GetResponse();
switch ((int) response.StatusCode)
{
case 200:
return true;
default:
return false;
}
}
现在列表中的第一张照片会被下载,但当循环移动到下一张照片时,它会卡住大约2分钟并抛出 超时异常 我尝试制作一个新的列表,看看它是否再次出现错误,但遗憾的是它会引发同样的错误。
我的代码或托管 IIS 的服务器有什么问题吗?
谢谢
答案 0 :(得分:1)
看起来您的问题出现在checkurl
方法中,该方法没有处理它获得的WebResponse
- 这意味着与该主机关联的连接池已经有效地&#34 ;丢失&#34;该连接直到WebResponse
完成。基本上,始终对using
个对象使用WebResponse
语句。
除此之外,您还不清楚为什么要为每个网址发出两个请求 - 也不清楚您的checkurl
是否会返回{{1}当你遇到错误时,而不是抛出异常。我只是跳过false
测试,尝试下载该文件,并处理checkurl
引发的任何异常。