2014-11-30 4 views
16

정말 간단한 질문이 있습니다. HTTP POST를 사용하여 서버에 파일을 업로드하고 있습니다. 문제는 연결 시간 제한을 특별히 처리하고 서버를 다시 발생시키기 위해 시간 초과가 발생한 후 대기 알고리즘을 약간 추가해야한다는 것입니다.HttpWebRequest 제한 시간 처리

내 코드는 매우 간단하다 : 그것은 우리의 관심사 아니므로

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("SomeURI"); 
request.Method = "POST"; 
request.ContentType = "application/octet-stream"; 
request.KeepAlive = true; 
request.Accept = "*/*"; 
request.Timeout = 300000; 
request.AllowWriteStreamBuffering = false; 

try 
{ 
     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 
      WebHeaderCollection headers = response.Headers;  
      using (Stream Answer = response.GetResponseStream()) 
      { 
       // Handle. 
      } 
     } 
} 
catch (WebException e) 
{ 
    if (Timeout_exception) 
    { 
     //Handle timeout exception 
    } 
} 

내가 코드를 읽고 파일을 생략. 이제는 WebException이 던져지면 예외를 필터링하여 실제로 시간 초과 예외인지 확인해야합니다. 나는 예외 메시지와 비교할 것을 생각했지만, 문제의 애플리케이션이 상용 애플리케이션이기 때문에 이것이 올바른지 확실하지 않다. 메시지가 다른 언어로 다양하기 때문에 두려워한다. 그리고 내가 바라는 메시지는 무엇인가?

제안 사항?

답변

27

볼 수 있습니다 볼 수 있습니다. C# 6 예외 필터를 사용

try 
{ 
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 
     WebHeaderCollection headers = response.Headers;  
     using (Stream answer = response.GetResponseStream()) 
     { 
      // Do stuff 
     } 
    } 
} 
catch (WebException e) 
{ 
    if (e.Status == WebExceptionStatus.Timeout) 
    { 
     // Handle timeout exception 
    } 
    else throw; 
} 

편리 여기에 올 수 있습니다 : :이 WebExceptionStatus 열거가 Timeout 플래그가이 종류의 예외가 아니었다면 또한

try 
{ 
    var request = WebRequest.Create("http://www.google.com"); 
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 
     WebHeaderCollection headers = response.Headers; 
     using (Stream answer = response.GetResponseStream()) 
     { 
      // Do stuff 
     } 
    } 
} 
catch (WebException e) when (e.Status == WebExceptionStatus.Timeout) 
{ 
    // If we got here, it was a timeout exception. 
} 
+1

를, 그것은 좋은 연습이다, 예외를 다시 발생 Timeout – rolivares

+1

@rolivares 확실히 좋은 생각입니다. 코드를 수정했습니다. –

관련 문제