2009-01-20 15 views
5

वेब अनुरोध वापस करने के लिए प्रतीक्षा करने के लिए उचित समय क्या है? मुझे पता है कि यह शायद एक प्रश्न के रूप में थोड़ा भरा हुआ है, लेकिन मैं बस इतना करने की कोशिश कर रहा हूं कि कोई वेब पेज उपलब्ध है या नहीं।वेब अनुरोध के लिए टाइमआउट

शायद एक बेहतर तरीका है?

try 
{ 
    // Create the web request 
    HttpWebRequest request = WebRequest.Create(this.getUri()) as HttpWebRequest; 

    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 

    // 2 minutes for timeout 
    request.Timeout = 120 * 1000; 

    if (request != null) 
    { 
     // Get response 
     response = request.GetResponse() as HttpWebResponse; 

     connectedToUrl = processResponseCode(response); 
    } 
    else 
    { 
     logger.Fatal(getFatalMessage()); 

     string error = string.Empty; 
    } 
} 
catch (WebException we) 
{ 
... 
} 
catch (Exception e) 
{ 
... 
} 

उत्तर

5

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

मैं कुछ भी (उपभोक्ता समय) + 10 सेकंड का उपयोग करता हूं।

2

बेतकल्लुफ़ मैं 10 सेकंड के लिए अनुमति देते हैं, लेकिन यह वास्तव में नेटवर्क कनेक्शन की किस तरह कोड के साथ चल रहे हो जाएगा पर निर्भर करता है। सामान्य प्रतिक्रिया समय क्या है यह देखने के लिए कुछ दिनों/सप्ताह की अवधि में कुछ परीक्षण पिंग्स चलाने का प्रयास करें।

1

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

1

मैं केवल 15 (30) 30 सेकंड के करीब 30 सेकंड का इंतजार करूंगा। यह वास्तव में निर्भर करता है कि आप क्या कर रहे हैं और परिणाम असफल कनेक्शन का क्या है। मुझे यकीन है कि आप जानते हैं कि कर रहा हूँ के रूप में वहाँ कारण है कि आप एक समय समाप्ति हो सकता है की बहुत सारी है ...

1

मैं इस दो बातों पर निर्भर करता है लगता है:

  • नेटवर्क गति/लोड (के रूप में दूसरों ने लिखा है, पिंग हो सकता है का उपयोग करते हुए आपको इसके बारे में एक विचार दें)
  • जिस प्रकार का आप कॉल कर रहे हैं: उदाहरण के लिए क्या यह एक स्थिर HTML पृष्ठ है या यह एक ऐसा पृष्ठ है जो कुछ समय लेने वाली परिचालन (डीबी एक्सेस इत्यादि) कर सकता है

वैसे भी, मुझे लगता है कि 2 मिनट बहुत समय है। I निश्चित रूप से टाइमआउट को 30 सेकंड से कम समय तक कम कर देगा।

2

मैं मापता हूं कि प्रतिक्रिया देने के लिए मौजूद पृष्ठों के लिए कितना समय लगता है। यदि वे सभी एक ही समय के बारे में प्रतिक्रिया देते हैं, तो मैं टाइमआउट अवधि को उस राशि को लगभग दोगुना कर दूंगा।

1

मुझे एहसास है कि यह सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन फिर इस प्रश्न का "उत्तर" थोड़ा कठिन है। वैसे भी, एक उपकरण मैंने अतीत में gomez का उपयोग किया है ताकि दुनिया के विभिन्न हिस्सों से पृष्ठ लोड समय को माप सकें। यह मुफ़्त है और यदि आपने इस तरह के परीक्षण नहीं किए हैं, तो इससे पहले कि आप किसी दिए गए स्थान से किसी दिए गए पृष्ठ के लिए सामान्य पृष्ठ लोड समय के बारे में दृढ़ विचार देने के मामले में सहायक हो सकते हैं।

2

बस इतना जोड़ना चाहता था कि मैं एक अनुकूली टाइमआउट का उपयोग करूंगा।

period += (numTimeouts/numRequests > .01 ? someConstant: 0);

जाँच की जब भी आप कोशिश करते हैं और (उदाहरण के लिए) 1% से कम समय समाप्ति रखने के लिए एक समय समाप्ति मारा: एक साधारण मीट्रिक की तरह हो सकता है। बस इसे कम करने के बारे में सावधान रहें :)

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