2012-12-19 24 views
12

देता है मैंने एक प्रोग्राम के लिए एक फ़ंक्शन बनाया है, जो अनुरोध करता है जब अनुरोध प्रकार GET है, यदि यह POST है, तो यह हमेशा टाइमआउट अपवाद (और 50 का समय समाप्ति नहीं हुआ) उत्पन्न करता है रेखा HttpWebResponse response = (HttpWebResponse)request.GetResponse();
मैंने कई चीजों की कोशिश की, लेकिन मुझे नहीं पता कि क्यों कोई इसे यहां जानता है।

संपादित करें: यह काम मिल गया, अगर किसी को दिलचस्पी है: https://gist.github.com/4347248

किसी भी मदद की बहुत सराहना की जाएगी।

मेरे कोड है:अनुरोध। गेट्सस्पॉन्स हमेशा एक टाइमआउट

public ResRequest request(string URL, RequestType typ, CookieCollection cookies, string postdata ="", int timeout= 50000) 
    { 
     byte[] data; 
     Stream req; 
     Stream resp; 

     HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest; 
     request.Timeout = timeout; 
     request.ContinueTimeout = timeout; 
     request.ReadWriteTimeout = timeout; 
     request.Proxy = new WebProxy("127.0.0.1", 8118); 
     request.Headers.Add(HttpRequestHeader.AcceptLanguage, "de"); 
     request.Headers.Add("UA-CPU", "x86"); 


     request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); 
     request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) "; 
     request.CookieContainer = new CookieContainer(); 
     request.CookieContainer.Add(cookies); 
     if (typ == RequestType.POST) 
     { 
      data = System.Text.Encoding.Default.GetBytes(postdata); 
      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.ContentLength = data.Length; 
      req = request.GetRequestStream();//after a few tries this produced a Timeout error 
      req.Write(data, 0, data.Length); 
      req.Close(); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse();//This line produces a Timeout Exception 
      resp = response.GetResponseStream(); 

      if ((response.ContentEncoding.ToLower().Contains("gzip"))) 
      { 
       resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress); 
      } else if ((response.ContentEncoding.ToLower().Contains("deflate"))) { 
       resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress); 
      } 

      return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) }; 

     } 
     else 
     { 
      request.Method = "GET"; 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      resp = response.GetResponseStream(); 

      if ((response.ContentEncoding.ToLower().Contains("gzip"))) 
      { 
       resp = new System.IO.Compression.GZipStream(resp, System.IO.Compression.CompressionMode.Decompress); 
      } 
      else if ((response.ContentEncoding.ToLower().Contains("deflate"))) 
      { 
       resp = new System.IO.Compression.DeflateStream(resp, System.IO.Compression.CompressionMode.Decompress); 
      } 

      return new ResRequest() { result = new System.IO.StreamReader(resp, System.Text.Encoding.UTF8).ReadToEnd(), cookies = response.Cookies, cstring = cookiestring(response.Cookies) }; 
     } 

    } 
+0

"लिटल" फ़ंक्शन ??? –

+0

ठीक है यह छोटा नहीं है ... मैंने इसे हटा दिया – Tearsdontfalls

+0

'टाइमआउट' के लिए आप क्या सेट करते हैं? – VladL

उत्तर

16

तो यह हर बार req.GetRequestStream() पर लटका होता है या वह "कुछ प्रयास" काम करता है और उसके बाद फांसी?

यदि यह कुछ बार काम करता है और फिर लटकता है, तो यह संभव है कि आप अनुरोधों को ठीक से बंद नहीं कर रहे हैं, जिससे आप कनेक्शन से बाहर निकल सकते हैं। Close() और/या Dispose()HttpWebResponse ऑब्जेक्ट्स और आपके द्वारा बनाए जा रहे सभी स्ट्रीम और रीडर सुनिश्चित करें।

+0

यह हर बार लटकता है जब मैं 'req.GetRequestStream() 'करता हूं। धन्यवाद, लेकिन यह काम नहीं किया। मुझे यह भी पता चला कि जब मैं अनुरोध पर कोई पोस्ट पैरामीटर पास नहीं करता है तो यह 500 सर्वर त्रुटि – Tearsdontfalls

+0

को कनेक्ट और वापस करेगा, डेटा 'लम्बाई' क्या है? क्या आप कुछ वास्तव में बड़ा भेजने की कोशिश कर रहे हैं? –

+1

कई नमूना कोडों के आधार पर फ़ंक्शन को फिर से लिखने के बाद, तीसरे अनुरोध के बाद हर अनुरोध विफल हुआ। आपकी टिप के लिए धन्यवाद, मैंने 'बंद करें();' और 'निपटान(); '' HttpWebRespose' और' स्ट्रीम 'में जोड़ा और अब सब कुछ बढ़िया काम करता है। कोड: https://gist.github.com/4347248 – Tearsdontfalls

1

आपको प्रतिक्रिया का उपयोग करना होगा।();

विधि