일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이메일광고
- Visual Studio .NET 9.0 Express Edition
- 절대참조
- 폰번호추출
- 네이버
- 심플네이버
- 전화번호찾기
- 폰번호정리
- 김밥할머니 폭행사건
- 비주얼 C++
- 자동화 서버는 개체를 작성할 수 없습니다.
- 자동화 서버
- 이메일추출
- iostream.h
- http://www.microsoft.com/downloads/
- 이메일수집
- esperanca.kr
- 용역직원
- 전번
- Stand 4 U
- esperanca
- 태마곡
- 이메일수집기
- 네이버1위
- 누난 너무 예뻐
- 김밥할머니 폭행 동영상
- 애러
- 제2의 동방신기
- 메일수집
- VisualStudio 2003 .NET
- Today
- Total
BLOG ESPERANCA
[C#] WebClient에 timeout을 사용하는 방법 본문
오랫만에 아주 간단하지만 편리한 Tip을 한가지 소개합니다.
C#으로 네트워크 통신을 하려면, System.Net 네임스페이스 안에 속한 WebClient 클래스는 거의 필수라고 해도 과언이
아닙니다.
사용법도 아주 간단합니다.
예를 들어 POST 방식으로 웹서버에 request를 던지고, 그 결과(UTF8)를
받는 부분이 필요하다고 가정을 해봅시다.
아래와 같이 몇줄로 가능하지요.
using (WebClient client = new WebClient())
{
NameValueCollection col = new NameValueCollection();
col.Add("param1", "aaaa");
col.Add("param2", "bbbb");byte[] byteResponse = client.UploadValues("http://someuri", col);
string response = Encoding.UTF8.GetString(byteResponse);//.....
}
때때로 WebRequest 라는 보다 low level의 클래스를 사용하기도 합니다.
string postData = "param1=aaaa";
postData += "¶m2=bbbbb";
byte[] data = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://someuri");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream writeStream = request.GetRequestStream();
writeStream.Write(data, 0, data.Length);
writeStream.Close();
WebClient 클래스와 비교하면 꽤나 성가신 코드가 추가되어야 합니다.
Request의 Method,
ContentType 을 써주어야 하고, RequestStream을 얻어와서 byte 배열을 직접 써야합니다.
그러나 WebRequest 클래스는 WebClient가 제공하지 않는 여러가지 기능을 제공합니다.
예를 들어 오늘 Tip의 주제인
Timeout 입니다.
WebClient에 Timeout 기능이 포함되어 있지 않아서 정말 단순한 기능인데도 WebRequest
클래스를 이용하는 경우를 더러 보았습니다.
그러나 WebClient 클래스를 조금만 살펴보면,
내부적으로 WebRequest를 사용하는 것을 알 수 있습니다.
바로
GetWebRequest라는 함수인데요.
그럼 WebClient 클래스를 상속받아서 이 함수를 override 하는 클래스를 만들어 보겠습니다.
class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
request.Timeout = 1000;
return request;
}
}
위의 Timeout에 들어가는 값은 밀리초 입니다.
그러니까 1000 ms = 1 sec가 되겠죠?
어떤가요?
WebClient를 사용하면서 Timeout도 되는 클래스..
쉽죠? ^^