2009-02-23 19 views
8

वेबक्रॉक्स्ट को असीमित रूप से प्राप्त करने के लिए सबसे अच्छा अभ्यास क्या है?असिंक्रोनस वेबरेक्वेस्ट सर्वोत्तम प्रथाओं

मैं इंटरनेट से एक पृष्ठ डाउनलोड करना चाहता हूं (इससे कोई फर्क नहीं पड़ता) और जितना संभव हो सके थ्रेड को अवरुद्ध करने से बचें।

पहले मुझे विश्वास था कि यह केवल 'BeginGetResponse' और 'EndGetResponse' जोड़ी का उपयोग करने के लिए पर्याप्त था। लेकिन करीब निरीक्षण पर मैं यह भी देखना है कि वहाँ का उपयोग कर 'BeginGetRequestStream'

[अद्यतन] का विकल्प है कि GetRequestStream पोस्ट करने की कार्यवाही

के लिए प्रयोग किया जाता है और फिर भ्रम में जोड़ने के लिए, मैं धारा का उपयोग करना चाहिए। BeginRead और EndRead?

[अद्यतन] इस article चलता है कि यह HttpResponse.GetResponseStream कार्रवाई करने के लिए एसिंक्रोनस रूप Stream.BeginRead

क्या एक मेस का उपयोग कर भी बेहतर है!

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

सर्वश्रेष्ठ अभ्यास क्या है?

उत्तर

0
  1. आरंभ/EndGetResponse asynchonously HTTP प्रतिक्रिया के लिए प्रतीक्षा करने का उपयोग करें। यदि आप पोस्ट कर रहे हैं और असीमित रूप से बहुत सारे डेटा भेजने की आवश्यकता है, तो Begin/EndGetRequestStream का उपयोग करें।

  2. यह असीमित संचार के लिए अद्वितीय नहीं है - आप अतिरिक्त जानकारी प्राप्त करने के लिए सिंक्रोनस संस्करणों को देख सकते हैं।

  3. मुझे यकीन नहीं है कि आप अनुरोध स्ट्रीम पर क्यों पढ़ रहे होंगे - अधिकतर आप इसे लिखेंगे, और प्रतिक्रिया स्ट्रीम से पढ़ेंगे।

अंत में, Jeffrey Richter's blog HttpWebRequest और झरनों के बारीकियों से कुछ के बारे में एक लेख है।

+0

हाँ मुझे लगता है कि मैं 'BeginGetRequestStream' –

0

क्या आपने नये धागे में वेब अनुरोध करने पर विचार किया है?

http://msdn.microsoft.com/en-us/library/ms173178.aspx

+0

के उद्देश्य से उलझन में था, एक नया धागा आदर्श से कम है। बस एक और धागा अवरुद्ध करना इस एप्लिकेशन को स्केल करने में मदद नहीं कर रहा है –

5

आप यह सब अपने आप को कोड या आप बस WebClient जो आपके लिए घुरघुराना बहुत काम करता है इस्तेमाल कर सकते हैं। उदाहरण के लिए, एक स्ट्रिंग के रूप में फ़ाइल डाउनलोड करने के लिए आप DownloadStringAsync() को कॉल करेंगे जो अंततः OnDowloadString पूर्ण ईवेंट को ट्रिगर करेगा। अगर फ़ाइल बाइनरी है तो आप इसके बजाय DownloadDataAsync() का उपयोग करने का प्रयास कर सकते हैं।

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