2010-10-13 13 views
6

में HTTP शीर्षलेख प्राप्त करें मैं System.Net.WebClient का उपयोग कर रहा हूं ताकि एसिंक्रोनस मोड में कुछ HTTP संचालन कर सकें। एसिंक्रोनस ऑपरेशंस का उपयोग करने का कारण किसी और चीज से ऊपर है, तथ्य यह है कि मुझे प्रगति परिवर्तन संकेत मिलते हैं - जो केवल the docs द्वारा बताए गए अनुसार एसिंक ऑपरेशंस के लिए उपलब्ध है।एसिंक्रोनस वेब क्लाइंट अनुरोध

तो चलो कहते हैं कि मैं अपने WebClient की स्थापना की है करते हैं:

this.client = new WebClient(); 
this.client.UploadStringCompleted += 
    new UploadStringCompletedEventHandler(textUploadComplete); 

और प्रतिनिधि:

private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     // trigger UI failure notification 
     return; 
    } 

    // FIXME not checking for response code == 200 (OK) 
    // trigger UI success notification 
} 

तो आप देख, मैं यह सोचते कर रहा हूँ कि अगर कोई अपवाद नहीं उठाया जाता है, अनुरोध था हमेशा सफल (जो मामला नहीं हो सकता है, क्योंकि HTTP प्रतिक्रिया स्थिति कोड हो सकता है! = 2xx)। UploadFileAsync पर प्रलेखन से मैं यह नहीं बता सकता कि एक गैर-200 प्रतिक्रिया संसाधित की गई है या नहीं।

मैं वास्तव में नया सी # पर हूं और मुझे उस विशेष एसिंक्रोनस अनुरोध की प्रतिक्रिया के लिए हेडर तक पहुंचने का कोई तरीका नहीं दिख रहा है। मुझे लगता है कि प्रत्येक WebClient किसी भी समय किसी प्रतिक्रिया (या हेडर का एक सेट) पकड़ सकता है।

जबकि मैं एक ही समय में कई समांतर अनुरोधों को निष्पादित नहीं कर रहा हूं, मैं अभी भी जानना चाहता हूं कि किसी विशेष अनुरोध के प्रतिक्रिया शीर्षलेख/स्थिति कोड को पुनर्प्राप्त करने का एक और शानदार तरीका है या नहीं WebClient से "अंतिम उपलब्ध" प्रतिक्रिया प्राप्त करें।

धन्यवाद।

+0

क्या आप .NET 4.5 में हैं? यदि ऐसा है तो TaskAsync ओवरलोड का उपयोग करने का प्रयास करें ... आपको अभी भी वेब क्लाइंट क्लास से हेडर तक पहुंचने की आवश्यकता होगी, लेकिन मुझे टीएपी वर्कफ़्लो का उपयोग करके यह आपत्तिजनक नहीं मिलेगा ... मैं मानता हूं कि इसे करने में थोड़ा गलत लगता है एक साधारण घटना हैंडलर। 'ग्राहक का इंतजार करें। अपलोड करेंस्ट्रिंग टास्कएसिंक (...); var headers = client.ResponseHeaders; ' – TCC

उत्तर

0

क्या आप .NET 4.5 में हैं? यदि ऐसा है तो TaskAsync ओवरलोड का उपयोग करने का प्रयास करें ... आपको अभी भी वेब क्लाइंट इंस्टेंस से हेडर तक पहुंचने की आवश्यकता होगी, लेकिन मुझे टीएपी वर्कफ़्लो का उपयोग करके यह आपत्तिजनक नहीं मिलेगा ... मैं मानता हूं कि इसे करने में थोड़ा गलत लगता है एक साधारण घटना हैंडलर।

await client.UploadStringTaskAsync(...); 
var headers = client.ResponseHeaders; 

और सबसे अच्छी बात आप यूआई धागे पर यह सब कर सकते हैं ... ब्लॉक नहीं ... तो अपने 'ट्रिगर अद्यतन यूआई' वास्तव में सिर्फ 'अद्यतन यूआई' है।

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