2011-04-01 5 views
1

WebClient가 시간 초과를 지원하지 않지만 이상한 점을 발견했습니다. 내 웹 클라이언트 클래스 :WebClient 시간 초과 문제

class MyWebClient : WebClient 
{ 
    private int timeout; 

    public int Timeout 
    { 
     get { return timeout; } 
     set { timeout = value; } 
    } 

    public MyWebClient() 
    { 
     timeout = 5000; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 

     if (request.GetType() == typeof(HttpWebRequest)) 
     { 
      ((HttpWebRequest)request).Timeout = timeout; 
     } 

     Console.WriteLine("timeout {0}", request.Timeout); 

     return request; 
    } 
} 

내가 요청이 인쇄합니다 내가 언급
시간 제한 만

//((HttpWebRequest)request).Timeout = timeout; 

가 인쇄 :
시간 제한 100000

이 확인 기본값

하지만 내가 설정 한 경우 :

((HttpWebRequest)request).Timeout = 5000; 

가 인쇄 :
제한 시간 5000

및 timouts가

작동 나는를 입력해야하는 이유 이

아무도 설명 할 수 타임 아웃 값은 직접?

+0

이것은 WebRequest.Timeout에 관한 질문이 아니라 C#에서 상속이 어떻게 작동하는지에 대한 질문입니다. – angularsen

답변

2

WebRequest은 설정하지 않으면 어떤 시간 초과를 사용할지 알 수 없습니다.

클래스의 로컬 필드 timeout의 설정을 WebRequest 클래스의 Timeout 속성으로 설정하는 것을 혼동하고 있습니까? 또는 WebClientTimeout 속성이 있고이 요청 시간을 자동으로 설정한다고 생각합니까? TimeoutWebRequest 기본 클래스의 일부이며 그래서 HttpWebRequest에 캐스팅없이 사용할 수있게되면

만 HTTP 요청에 대한 자신의 시간 제한을 설정할 않는

는 요청 유형의 전체 검사가 필요하지 않습니다.

+1

나는 바보. 나는 wc.Timeout을 다른 함수로 설정했다. 문제 해결됨 – ekapek