x/html 페이지와 파일을 인터넷에서 올바르게 다운로드 할 수있는 코드 스 니펫이 꽤 많습니다. 대부분의 경우 꽤 잘 작동합니다.flakey 네트워크에서의 강력한 네트워크 연결 처리
불행히도, 자택 인터넷 연결은 자정부터 6시 사이에 거의 사용할 수 없게됩니다. 패킷 손실이 많이 발생하고 연결이 지연됩니다. 마찬가지로 네트워크 부하에 따라 일시적인 정전이 발생하는 직장에서 백업 3G 연결이 있습니다.
물론 다운로드 코드를 try/catch에 넣을 수는 있습니다.하지만 시간이 얼마나 걸리더라도 파일을 올바르게 다운로드하는 것이 이상적입니다.
나는 이것을 해결하기 위해 많은 노력을 기울였으며 성공을 거뒀다.
캡처중인 스트림의 길이를 가져오고 로컬 복사본의 길이가 동일한 지 확인했습니다. 어떤 이유로 (정확하게 다운로드 된) 로컬 복사본은 항상보고 된 스트림의 길이보다 몇 12 바이트 더 짧지 만 실제 크기는 더 짧았던 것처럼 보였습니다. 또한 모든 스트림이 길이를 사용할 수있는 것은 아닙니다.
또한 try/catch'd 세그먼트를 for 루프에 넣어서 시도해 보았습니다. 다운로드를 50 번 시도해 보았습니다. 성공적인 다운로드는 중단되지만 실패한 사용자는 다시 시도합니다.
나는 점차적으로 증가하는 지연으로 위의 내용을 보완했다. Thread.Sleep()은 반복적으로 시도하기 전에 각 반복마다 점차 길게 길게 잠을 자곤했다.
스팀, 크롬, 윈도우 업데이트, 아이튠즈 등 내 개인 소프트웨어가 많아서이 작업이 쉽지 않을 거라고 상상해보십시오. . 나는 종종 성공적으로 내려 오기 전에 대용량 파일을 10-15 번 다운로드하려고 시도해야한다. 이러한 devs는 연결 문제를 처리하는 데 신경 쓰지 않거나 수행하기 어렵습니다.
가능하다면 누군가 인터넷을 통해 스트림을 가져 오는 코드 스 니펫을 제공 할 수 있습니까? 그러나 벗겨지기 쉬운 연결을 처리 할 수 있습니까? 나는 기존 솔루션에보고 제안
public static MemoryStream Fetch(string url, int? maxRetries, int? maxDuration)
{
// Download the response of the url to a MemoryStream.
// Assume if null maxRetries and maxDuration, keep trying forever.
}