온라인에있는 모든 페이지에 오류가 없는지 확인하는 작은 프로그램을 작성해 달라는 요청을 받았습니다.
이를 위해, 나는 다음과 같은 코드를 사용 (pathsToCheck 목록이고, 각 문자열은 같은 URL입니다 http://www.domain.com/webpage
)
foreach (string path in pathsToCheck)
{
HttpWebResponse response = null;
try
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(path);
webRequest.AllowAutoRedirect = true;
response = (HttpWebResponse)webRequest.GetResponse();
System.Diagnostics.Debug.Assert(response.StatusDescription == "OK", "Look into this, it doesn't like the response code");
System.Threading.Thread.Sleep(1000);
}
catch (Exception ex)
{
Console.WriteLine("Failed : " + path);
}
finally
{
Write(--totalPathsToCheck);
}
}
내가 가진 문제는 목록의 세 번째 항목에서 항상 실패합니다 (시간 초과) (모든 것이 세 번째 항목에서 실패 함). 당연히 세 번째 항목에 결함이있는 것 같았지만 그렇지 않습니다.
첫 번째 항목이 시간 초과되지 않았기 때문에 5 개의 항목이 모두 동일한 URL (내가 아는 하나는 시간 초과되지 않음)으로 새 목록을 만들었습니다. 동일한 문제가 발생하여 세 번째 반복에서 시간이 초과되고 나머지 목록에 대해 계속 시간이 초과됩니다.
그런 다음 다른 URL (다른 도메인에서)을 테스트하기로 결정했는데 동일한 문제가 지속됩니다.
나는 코드에 수면을 추가하고 주어진 기간 내에 너무 많은 요청이 있었지만 차이가없는 경우를 대비하여 그것을 늘렸다.
나는 무엇을해야합니까?
연결을 닫아야합니다. 더하다
response.Close();
에서 http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close.aspx :
Close 메서드는 응답 스트림을 닫고 다른 요청에서 재사용 할 수 있도록 리소스에 대한 연결을 해제합니다. Stream.Close 또는 HttpWebResponse.Close 메서드를 호출하여 스트림을 닫고 다시 사용할 수 있도록 연결을 해제해야합니다. Stream.Close와 HttpWebResponse.Close를 모두 호출 할 필요는 없지만 그렇게해도 오류가 발생하지는 않습니다. 스트림을 닫지 않으면 애플리케이션의 연결이 부족해질 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다