2011-03-08 6 views
5
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Timeout = 20000; 
using (WebResponse response = request.GetResponse()) 
using (var stream = response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    var result = reader.ReadToEnd(); 
    // Do something with result 
} 

उपरोक्त उदाहरण में मेरे पास टाइमआउट परिभाषित किया गया है, अगर टाइमआउट को मारने के लिए ऐसा होता है तो मुझे कैसे पता चलेगा, परिणाम खाली होगा?वेब अनुरोध टाइमआउट हैंडलिंग?

क्या मुझे कोई प्रतिक्रिया प्रकार प्राप्त होता है?

मैं कैसे सुनिश्चित कर सकता हूं कि मुझे समय समाप्त हो गया है?

उत्तर

10

GetResponse()WebException फेंक देगा। का परीक्षण करना आसान है हालांकि क्या होता है - टाइमआउट को 1ms पर सेट करें और वापस आने के लिए कुछ भी समय हिट करने का प्रयास करें।

वास्तव में, documentation राज्यों को स्पष्ट रूप से इस:

से पहले संसाधन वापस किया जा सकता समय समाप्ति की अवधि समाप्त हो रहा है, तो एक WebException फेंक दिया है।

+0

धन्यवाद कि मैं जो खोज रहा था वह पूरी तरह से सुनिश्चित नहीं था। – Prix

0

आपको शायद HTTPWebResponse का उपयोग करना चाहिए। इसमें एक स्टेटस कोड है जो आपको जानकारी और अधिक बताता है। HTTPWebResponse WebResponse का वंशज है।

2

आपकी HttpWebRequest.GetResponse कॉल WebException फेंक देगा;

Abort was previously called.  
-or-  
The time-out period for the request expired. 
-or-  
An error occurred while processing the request. 

इस अपवाद को पकड़ें।

मैं इस तरह की चीज का परीक्षण करने के लिए बस अपने नेटवर्क केबल को खींचता था, हालांकि आप अधिक सुरुचिपूर्ण हो सकते हैं और प्रॉक्सी टूल का उपयोग कर सकते हैं और उस विशेष अनुरोध को ब्लॉक कर सकते हैं।

+0

धन्यवाद, 'अनुरोध के लिए टाइम-आउट अवधि समाप्त हो गई।' इससे मदद मिलती है। – Prix