2011-07-07 20 views
7

कोई समस्या नहीं होने पर, जहां पहली कॉल पर WebRequest.GetResponse() लटका और समय लगता है, लेकिन पहले कॉल के बाद, सब कुछ ठीक काम करता है।वेबरक्वेट टाइमआउट हमेशा पहले अनुरोध पर क्यों करता है, लेकिन किसी भी बाद के किसी भी

 try { 
      WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/"); 
      // Sends the HttpWebRequest and waits for the response.   
      myHttpWebRequest.Timeout = 1000; 
      WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); 
     } catch(Exception e) { 
      Console.WriteLine("Failure 1"); 
     } 
     try { 
      WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/"); 
      // Sends the HttpWebRequest and waits for the response.   
      myHttpWebRequest.Timeout = 1000; 
      WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); 
     } catch(Exception e) { 
      Console.WriteLine("Failure 2"); 
     } 
     try { 
      WebRequest myHttpWebRequest = WebRequest.Create(@"http://192.168.x.x/"); 
      // Sends the HttpWebRequest and waits for the response.   
      myHttpWebRequest.Timeout = 1000; 
      WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse(); 
     } catch(Exception e) { 
      Console.WriteLine("Failure 3"); 
     } 

एक सांत्वना आवेदन में इस कोड का उपयोग, मैं हमेशा एक Failure 1 प्राप्त करते हैं। डीबगर के तहत चल रहा है या नहीं। मैंने लूप किया है, और यह हमेशा पहले पर विफल रहता है, कभी भी कोई अन्य नहीं। वास्तव में, वेब सर्वर के लॉग पढ़ना, यह वास्तव में पहले अनुरोध को कभी प्राप्त नहीं करता है। क्या मुझसे कोई चूक हो रही है?

+0

क्या आपको कभी इस समस्या का समाधान मिला है –

+1

हां, यह वीपीएन चलने का परिणाम था। सॉफ्टवेयर जैसे वीपीएन या वीपीएन को बंद करना समस्या को हल करता है। – Rahly

उत्तर

9

संपादित करें: मुझे एहसास हुआ है कि नीचे दिए गए उत्तर के साथ स्थिति के विपरीत ठीक होंगे, जहां पहला अनुरोध काम करता है लेकिन अन्य नहीं करते हैं। हालांकि, यह अभी भी महत्वपूर्ण है - आप वास्तव में को अपने प्रतिक्रियाओं का निपटारा करना चाहिए। यह तब भी उपयोगी होगा जब आप त्रुटि की रिपोर्ट करते हैं, तो आप अपवाद संदेश की भी रिपोर्ट करते हैं ...

यहां क्या हो रहा है, यह जानने के लिए, आपको वास्तव में WireShark जैसे कुछ का उपयोग करना चाहिए ताकि आप देख सकें कि समस्या यह है कि समस्या अनुरोध किया जा रहा है लेकिन जवाब नहीं दिया गया है, या क्या यह भी नहीं किया जा रहा है।

मुझे आश्चर्य है कि क्या समस्या वास्तव में है कि यह एक प्रॉक्सी का समाधान करना है, या ऐसा ही कुछ ... और वहाँ बस से पहले दूसरा अनुरोध समयबाह्य इसे हल करने के लिए पर्याप्त समय के बारे में है। टाइमआउट बढ़ाने का प्रयास करें। फिर, यह वायरशर्क के माध्यम से दिखाई देना चाहिए।


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

एक using बयान में WebResponse हिस्सा रखो और आप शायद यह सब ठीक काम करता है मिल जाएगा:

using (WebResponse myHttpWebResponse = myHttpWebRequest.GetResponse()) 
{ 
} 

आप वास्तव में प्रतिक्रिया के साथ कुछ करना चाहते हैं, ज़ाहिर है, यह सोचते हैं कि है। नहीं तो आप बस लिख सकते हैं:

myHttpWebRequest.GetResponse().Dispose(); 

:)

+0

लेकिन यह दूसरा अनुरोध नहीं है कि मुझे टाइमआउट मिल रहा है, असल में, दूसरा एकदम सही काम करता है। पहला समय समाप्त हो रहा है। लेकिन, मैंने आपके जैसे परिवर्तन को कहा था, और उपयोग किया (यह सिर्फ एक परीक्षण है, असली ऐप नहीं है), और इससे कोई फर्क नहीं पड़ता। पहला अनुरोध अभी भी समय समाप्त हो रहा है। – Rahly

+0

@ जेरेमी: हाँ, मैंने अभी देखा है। क्या पहले अनुरोध से पहले वेब साइट है? –

+0

मैंने अपवाद की रिपोर्ट की, यह एक टाइमआउट – Rahly

0

तुम बहुत इस के समान व्यवहार प्राप्त कर सकते हैं अगर आप प्लावित नहीं किया है \ RequestStream बंद कर दिया प्रतिक्रिया के लिए पूछ रहा से पहले। यह व्यवहार .NET 3.5 पर मौजूद प्रतीत होता है लेकिन .NET Framework 4.5 में संबोधित किया गया है। मैंने ढांचे को स्विच करते समय समस्या देखी - कोड (डब्ल्यू/ओ बंद) जो 3.5 में काम करते समय काम करना बंद कर दिया। हो सकता है कि अनुरोध को स्पष्ट रूप से प्राप्त करने का प्रयास करें और इसे एक कार्य के रूप में बंद कर दें।

+0

जॉन ने जो कुछ समझाया वह काफी है, और मुझे "वर्कअराउंड" के रूप में स्ट्रीम को बंद नहीं करना है, लेकिन अधिक "करना चाहिए"। – ForceMagic

3

थोड़ा देर हो सकती है, लेकिन मेरे पास बिल्कुल वही प्रभाव पड़ा। आखिरकार कारण यह था कि नेटवर्क में कोई डिफ़ॉल्ट गेटवे नहीं है। समाधान ऑप्टिकल रूप से अनुरोध सेट करना था। Prroxy = null

var request = WebRequest.Create(UriString); 
request.Timeout = Timeout; 
if (_disableProxy) 
{ 
    request.Proxy = null; 
} 
if (request is HttpWebRequest) 
{ 
    var response = (HttpWebResponse)request.GetResponse(); 
    responseStream = response.GetResponseStream(); 

} 
if (request is FtpWebRequest) 
{ 
    var response = (FtpWebResponse)request.GetResponse(); 
    responseStream = response.GetResponseStream(); 
} 
else if (request is FileWebRequest) 
{ 
    var response = (FileWebResponse)request.GetResponse(); 
    responseStream = response.GetResponseStream(); 
} 

उम्मीद है कि इससे मदद मिलती है।

0

मुझे एक ही समस्या का सामना करना पड़ा है, मेरे मामले में मैंने timeoutWebRequest ऑब्जेक्ट का मूल्य बढ़ाया है और यह काम करता है!

webRequest.Timeout = int.Parse(60000); 

(मैंने टाइमआउट संपत्ति 60 सेकेंड तक निर्धारित की है)।

+1

एक टाइमआउट मुद्दे की तरह लगता है .... मेरे पास टाइमआउट 3600000 पर सेट था और मैंने इसे 12 मिनट के बाद रोक दिया ... – Rahly

+0

3600000 बहुत बड़ा है, –

+0

मैं उस समय परीक्षण कर रहा था – Rahly

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