2012-09-20 22 views
5

कोड के नीचे टुकड़ा दे रहा है त्रुटि संदेश: "प्रचालन का समय समाप्त हो गया है" त्रुटि Sourse: System.Net.httpWebRequest.GetResponse (कम)System.Net.WebRequest - टाइमआउट त्रुटि

यह विधि एक यूआरएल बुला रही है और प्रतिक्रिया वस्तु ला रही है।

नोट: यह मेरा end..but में सभी कार्य ठीक जब मैं production..it के लिए एक ही कोड भेजने के समय oout त्रुटियों

public GetUpdatedInventoryUnitValues(Vehicle aeVehicle) 
{ 
      WebRequest oWebRequest = null; 
      StringBuilder oStringBuilder = null; 
      StreamReader oStreamReader = null; 
      dcDealerDetails = new Dictionary<string, string>(); 

      MSRP = string.Empty; 
      NetPrice = string.Empty; 
      string strLine = string.Empty; 
      string strURL = GetUpdatedInventoryUnitValues.GetFormattedURL(aeVehicle); 

      try 
      { 
       /* Open the requested URL */ 
       oWebRequest = WebRequest.Create(strURL); 
       oWebRequest.Method = "GET"; 
       oWebRequest.ContentType = "application/xml"; 
       /* Get the stream from the returned web response */ 
       oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream()); 
       /* Get the stream from the returned web response */ 
       oStringBuilder = new StringBuilder(); 
       /* Read the stream a line at a time and place each one into the stringbuilder */ 
       while ((strLine = oStreamReader.ReadLine()) != null) 
       { 
        /* Ignore blank lines */ 
        if (strLine.Length > 0) 
         oStringBuilder.Append(strLine); 
       } 

       string[] tempArray = null; 
       string[] tempNextArray = null; 
       //Split string by semicolon as a separater 
       tempArray = Data.SplitString(oStringBuilder.ToString(), new char[] { ';' }); 

       if (tempArray != null) 
       { 
        foreach (string invUnits in tempArray) 
        { 
         //Split string by '=' as a separater 
         tempNextArray = Data.SplitString(invUnits, new char[] { '=' }); 

         if (tempNextArray != null && tempNextArray.Length == 2) 
         { 
          switch (tempNextArray[0].ToLower()) 
          { 
           //case "msrp": 
           // MSRP = Data.RemoveDoubleCode(tempNextArray[1]); 
           // break; 
           case "netprice": 
            NetPrice = Data.RemoveDoubleCode(tempNextArray[1]); 
            break; 
          } 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       ErrorLog.ErrorMessage = ErrorLog.Separator; 
       ErrorLog.ErrorMessage = "Exception during posting data to another application ."; 
       ErrorLog.ErrorMessage = "ERROR MESSAGE : " + ex.Message; 
       ErrorLog.ErrorMessage = "ERROR SOURCE: " + ex.StackTrace.ToString(); 

      } 
      finally 
      { 
       if (oStreamReader != null) 
       { 
        oStreamReader.Close(); 
       } 
       if (oWebRequest != null) 
       { 
        oWebRequest = null; 
       } 
      } 
     } 

कृपया सुझाव है कि क्या मैं गलत कर रहा हूँ या लापता से पता चलता है?

+0

क्या आपको यकीन है आपके अनुरोध अच्छा है और यह कोड से बाहर का समय-समाप्त नहीं करता है? मेरा मतलब है कि आपने इसे सीधे अपने ब्राउज़र में लॉन्च करने का प्रयास किया है? –

+0

यह सब मेरे अंत में ठीक काम कर रहा है..लेकिन जब मैं उत्पादन के लिए एक ही कोड भेजता हूं .. यह समय के दौरान त्रुटियों को दिखाता है –

+0

आपके विकास मंच और आपके उत्पादन मंच के बीच अंतर क्या हैं? क्या कोई फ़ायरवॉल या ऐसा कुछ है जो आपके अनुरोध को रोक सकता है? –

उत्तर

17

क्या आप शायद यह पाते हैं कि पहले दो अनुरोध ठीक हैं, और फिर वे समय समाप्त कर रहे हैं? यदि ऐसा है, तो मुझे संदेह है कि यह समस्या है:

oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream()); 

आप प्रतिक्रिया प्राप्त कर रहे हैं, लेकिन इसका निपटान कभी नहीं कर रहे हैं। आप का उपयोग करना चाहिए:

using (var response = oWebRequest.GetResponse()) 
{ 
    ... 
} 

वास्तव में, यदि आप अपने finally ब्लॉक से छुटकारा पा सकते पूरी तरह से अगर आप भर using बयानों का उपयोग करें।

एक तरफ के रूप में, यह एक बहुत लंबी विधि है - 77 लाइनें! - और भी बदतर, ऐसा लगता है कि यह वास्तव में एक निर्माता है जैसे:

  • कोशिश छोटे, अधिक आसानी से समझा, और अधिक आसानी से परीक्षण योग्य टुकड़ों में इसे बाहर विभाजित करने के लिए
  • कंस्ट्रक्टर्स में बहुत काम कर से बचने के लिए प्रयास करें
+0

.. यह मेरे 250 कॉल लूप में ठीक काम कर रहा है..लेकिन उत्पादन में लगभग सभी समय व्यतीत हैं .. कोड भाग पर .. हाँ मुझे यह करना चाहिए .. –

+0

@ रतनशर्मा: आप उत्पादन से क्या यूआरएल ला रहे हैं? क्या यह संभव है कि यह वास्तव में बस समय समाप्त हो रहा है? –

+0

उपरोक्त फ़ंक्शन टूल से है ... जो उत्पादन साइट में चल रहा है ... फ़ंक्शन एक यूआरएल को कॉल कर रहा है जो कुछ प्रतिक्रिया दे रहा है..मैं ठीक काम कर रहा हूं जब मैं अपने सिस्टम में टूल चलाता हूं, लेकिन उत्पादन सर्वर में मैं वही चल रहा हूं, यह समय समाप्त हो रहा है .. –

1

मैं personnally मेरा कार्यक्रम में से एक के लिए इस कोड का उपयोग और यह सही काम करता है:

WebRequest webRequest = WebRequest.Create(requestUri); 
    webRequest.Credentials = new NetworkCredential(login, password); 
    WebResponse webResponse = webRequest.GetResponse(); 
    Stream response = webResponse.GetResponseStream(); 
    StreamReader reader = new StreamReader(response); 

तो मुझे लगता है कि यह अपने कोड से लेकिन अपने उत्पादन मंच से नहीं आती है।

+4

यदि आप प्रतिक्रियाओं का निपटारा नहीं कर रहे हैं तो यह पूरी तरह से काम नहीं कर रहा है - आप बस भाग्यशाली हो रहे हैं। –

+0

उपयोग के अंत के बाद अपने पोस्ट कोड का उपयोग करके यह प्रतिक्रिया का निपटान करता है? –

+1

हां। साफ-सफाई सुनिश्चित करने के लिए आपको 'आईडीआईस्पोज़बल' लागू करने वाली बहुत कुछ भी 'कथन' का उपयोग करना चाहिए। –

2

बस अनुभव साझा करना।

मुझे एक ही त्रुटि "ऑपरेशन टाइम आउट" मिल रही थी।

मैंने वेब क्लाइंट और वेबरक्वेट (सेट टाइमआउट भी) दोनों का उपयोग करने का प्रयास किया है लेकिन अभी भी त्रुटि हो रही है।

कारण यह था कि मैं प्रतिक्रिया का निपटारा नहीं कर रहा था।

तो मैं जैसा कि ऊपर उल्लेख प्रयोग किया है:

using (var response = oWebRequest.GetResponse()) 

{ 
    ... 
} 

और यह समस्या हल हो ...