从外部下载照片时 Web 客户端超时 link
Web Client timeout while downloading photos from external link
我正在尝试从外部下载 10 张照片 link 例如 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 的服务器有问题吗?
谢谢
看起来你的问题出在 checkurl
方法中,它没有处理它获得的 WebResponse
- 这意味着与该主机关联的连接池有效 "lost" 该连接,直到 WebResponse
完成。基本上,始终对 WebResponse
个对象使用 using
语句。
除此之外,尚不清楚为什么要为每个 URL 发出两个请求 - 也不清楚您的 checkurl
是否 实际上 会return false
当你遇到错误时,而不是抛出异常。我只是跳过 checkurl
测试,尝试下载文件,并处理 WebClient
抛出的任何异常。
我正在尝试从外部下载 10 张照片 link 例如 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 的服务器有问题吗?
谢谢
看起来你的问题出在 checkurl
方法中,它没有处理它获得的 WebResponse
- 这意味着与该主机关联的连接池有效 "lost" 该连接,直到 WebResponse
完成。基本上,始终对 WebResponse
个对象使用 using
语句。
除此之外,尚不清楚为什么要为每个 URL 发出两个请求 - 也不清楚您的 checkurl
是否 实际上 会return false
当你遇到错误时,而不是抛出异常。我只是跳过 checkurl
测试,尝试下载文件,并处理 WebClient
抛出的任何异常。