从外部链接

时间:2015-09-22 06:02:03

标签: c# webclient

我正在尝试从外部链接下载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 的服务器有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:1)

看起来您的问题出现在checkurl方法中,该方法没有处理它获得的WebResponse - 这意味着与该主机关联的连接池已经有效地&#34 ;丢失&#34;该连接直到WebResponse完成。基本上,始终对using个对象使用WebResponse语句。

除此之外,您还不清楚为什么要为每个网址发出两个请求 - 也不清楚您的checkurl 是否会返回{{1}当你遇到错误时,而不是抛出异常。我只是跳过false测试,尝试下载该文件,并处理checkurl引发的任何异常。