서버에서 이미지를 연속적으로 받아와서 작업하는 부분이 있었습니다.
그래서 WebClient.DownloadFileAsync를 사용해서 이미지를 다운받았지요.
헌데, 첫번째 이미지는 제대로 가져오지 못하고, 두번째 이미지는 제대로 받아오는 것입니다.
도대체 어떻게 된 것인지.. 막막했습니다.
환경 및 조건을 바꾸어가며 갖가지 상황에서 테스트를 해보앗지만 결과는 동일했습니다.
한참을 찾아본 결과 MSDN 에 답이 있었네요.
MSDN 내용 입니다.
WebClient 인스턴스는 기본적으로 선택적 HTTP 헤더를 보내지 않습니다.
요청에 선택적 헤더가 필요한 경우에는 헤더를 Headers 컬렉션에 추가해야 합니다.
예를 들어, 응답에 쿼리를 포함하려면 사용자 에이전트 헤더를 추가해야 합니다.
또한 사용자 에이전트 헤더가 없으면 서버에서 500(내부 서버 오류)을 반환할 수 있습니다.
즉, 윈도우 서버나 리눅스 서버나 안되는 다운로드가 안되는 경우 아래와 같이 하시면 됩니다.
WClient = new System.Net.WebClient();
WClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
이 한줄로 고생 많이 했네요.
MSDN 에서와 같이 헤더가 추가 안되어 넘어오는 경우
500(내부서버오류)를 반환합니다.
즉, 파일명만 있는 0 byte 가 저장만 되는 거죠.
헤더 추가 하시면 다운로드가 잘 됩니다.
'[ Program ] > C#' 카테고리의 다른 글
[C#]Observer Pattern(옵저버 패턴) (0) | 2012.09.17 |
---|---|
키 이벤트 발생 시키기 - keybd_event() (0) | 2012.09.17 |
[C#] Ping 패킷 송수신 방법 (0) | 2012.09.17 |
[C#] string, char 배열을 byte 배열로 변환 (0) | 2012.09.17 |
[C#] Byte 배열을 String으로 변환 (0) | 2012.09.17 |
댓글