2013-01-31 24 views
10

मुझे एक बहुत ही सरल आवश्यकता है - मेरे सी # कोड को HTTP के माध्यम से रिमोट सर्वर से कनेक्ट करने और स्ट्रिंग डाउनलोड करने की आवश्यकता है। एक छोटा सा अनुरोध, कुछ और नहीं।.NET 4.5 से HTTP के माध्यम से एक स्ट्रिंग को डाउनलोड करने के लिए कैसे?

यह सुनिश्चित करने के लिए कि मेरा एप्लिकेशन उत्तरदायी रहता है, मैं भी ऑपरेशन पर टाइमआउट (कहना, 3 सेकंड) लगा देना चाहता हूं।

मेरा पहला विचार System.Net.WebClient का उपयोग करना था, लेकिन यह किसी भी टाइमआउट का समर्थन नहीं करता है।

तब मैं अच्छे पुराने System.Net.HttpWebRequest को आजमा देना चाहता था, लेकिन हां - क्योंकि .NET 4.5 यह been marked as obsolete है!

तो, मैं क्या उपयोग कर सकता हूं? मैं System.Net.Http नाम स्थान की जाँच की, लेकिन यह केवल अतुल्यकालिक उपयोग, बलों Task s का उपयोग करने की अनुमति देता है, और आम तौर पर केवल वास्तव में किसी भी नई कार्यक्षमता जोड़ने के बिना अमूर्त की एक दर्जन से अधिक विभिन्न परतों कहते हैं (वही पुरानी System.Net.HttpWebRequest के बाद से इसे इस्तेमाल करता है वैसे भी नीचे)

मुझे एसिंक्रोनस सामान नहीं चाहिए, मैं अन्य धागे को शामिल नहीं करना चाहता, मैं कार्य ढांचे को शामिल नहीं करना चाहता, मुझे कई रैपर नहीं चाहिए।

.NET 4.5 में ऐसा करने का सही तरीका क्या है?

+7

यह 'HttpWebRequest' नहीं है जिसे बहिष्कृत किया गया है, यह इसके निर्माता हैं। 'HttpWebRequest कन्स्ट्रक्टर का उपयोग न करें। नई HttpWebRequest ऑब्जेक्ट्स को प्रारंभ करने के लिए WebRequest.Create विधि का उपयोग करें। – GSerg

+2

आप टाइमआउट सेट करने के लिए अभी भी WebClient async विधियों का उपयोग कर सकते हैं: http://stackoverflow.com/a/601899/54937 –

+0

और आप हमेशा 'वेब क्लाइंट' पर कॉल को स्थानांतरित कर सकते हैं पृष्ठभूमि धागे के लिए और किसी प्रकार के सेमफोर का उपयोग करें (जैसे 'ऑटोरसेट इवेंट') जिसमें टाइमआउट होता है। – Will

उत्तर

14

HttpWebRequest कक्षा को बहिष्कृत नहीं किया गया है, केवल इसके निर्माता हैं।

का हवाला देते हैं करने के लिए documentation:

HttpWebRequest निर्माता का प्रयोग न करें। नई HttpWebRequest ऑब्जेक्ट्स को प्रारंभ करने के लिए WebRequest.Create विधि का उपयोग करें। यदि यूनिफ़ॉर्म रिसोर्स आइडेंटिफ़ायर (यूआरआई) की योजना http:// या https:// है, CreateHttpWebRequest ऑब्जेक्ट देता है।

+1

मुझे याद आया। :) –

2

केवल निर्माता को हटा दिया गया है, न कि HttpWebRequest क्लास स्वयं। HttpWebRequest का उदाहरण बनाने के लिए WebRequest.Create का उपयोग करें।