2014-11-30 8 views
16

मेरे पास वास्तव में एक सरल सवाल है। मैं HTTP पोस्ट का उपयोग कर सर्वर पर फ़ाइलों को अपलोड कर रहा हूं। सर्वर को रिहा करने के लिए टाइमआउट होने के बाद मुझे विशेष रूप से कनेक्शन टाइमआउट को संभालने और प्रतीक्षा प्रतीक्षा एल्गोरिदम जोड़ने की आवश्यकता है।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 
    } 
} 

मैं फ़ाइल कोड को पढ़ने के लोप के रूप में यह हमारे लिए चिंता का विषय नहीं है। अब मुझे यह सुनिश्चित करने की ज़रूरत है कि वेबएक्सप्शन फेंकने के बाद, मैं यह देखने के लिए अपवाद फ़िल्टर करता हूं कि यह वास्तव में टाइमआउट अपवाद है या नहीं। मैंने अपवाद संदेश के खिलाफ तुलना करने का विचार किया है, लेकिन मुझे यकीन नहीं है कि यह सही तरीका है क्योंकि प्रश्न में आवेदन एक वाणिज्यिक ऐप है और मुझे डर है कि संदेश अलग-अलग भाषाओं के बीच भिन्न होता है। और मुझे किस संदेश की तलाश करनी चाहिए।

कोई सुझाव?

उत्तर

27

आप WebException.Status देख सकते हैं।

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; 
} 

सी # 6 अपवाद फ़िल्टर का उपयोग करना यहाँ काम में आ सकता है: WebExceptionStatus enum एक 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

इसके अलावा, यह एक अच्छा अभ्यास है, अपवाद rethrow अगर यह एक तरह से एक अपवाद नहीं था टाइमआउट – rolivares

+1

@rolivares यह निश्चित रूप से एक अच्छा विचार है। कोड संपादित किया गया। –

संबंधित मुद्दे