2011-05-14 4 views
13

के लिए सही तरीके से निपटने का अपवाद मैं सोच रहा था कि WebClient.DownloadString का उपयोग करते समय मुझे अपने आप को कौन से अपवादों की रक्षा करनी चाहिए।WebClient.DownloadString

यहां मैं वर्तमान में इसका उपयोग कैसे कर रहा हूं, लेकिन मुझे यकीन है कि आप बेहतर मजबूत अपवाद हैंडलिंग का सुझाव दे सकते हैं।

उदाहरण के लिए

, मेरे सिर के ऊपर से:

  • कोई इंटरनेट कनेक्शन।
  • सर्वर ने 404 लौटाया।
  • सर्वर का समय समाप्त हो गया।

इन मामलों को संभालने और यूआई को अपवाद फेंकने का पसंदीदा तरीका क्या है?

public IEnumerable<Game> FindUpcomingGamesByPlatform(string platform) 
{ 
    string html; 
    using (WebClient client = new WebClient()) 
    { 
     try 
     { 
      html = client.DownloadString(GetPlatformUrl(platform)); 
     } 
     catch (WebException e) 
     { 
      //How do I capture this from the UI to show the error in a message box? 
      throw e; 
     } 
    } 

    string relevantHtml = "<tr>" + GetHtmlFromThisYear(html); 
    string[] separator = new string[] { "<tr>" }; 
    string[] individualGamesHtml = relevantHtml.Split(separator, StringSplitOptions.None); 

    return ParseGames(individualGamesHtml);   
} 

उत्तर

13

आप WebException पकड़ने, तो यह ज्यादातर मामलों को संभाल चाहिए। WebClient और HttpWebRequest सभी HTTP प्रोटोकॉल त्रुटियों (4xx और 5xx) के लिए एक WebException फेंक, और यह भी नेटवर्क स्तर त्रुटियों (वियोग, होस्ट तक नहीं पहुंचा, आदि) के लिए


मैं यूआई से करने के लिए इस पर कब्जा कैसे करते हैं एक संदेश बॉक्स में त्रुटि दिखाओ?

मुझे यकीन नहीं है कि मैं आपका प्रश्न समझता हूं ... क्या आप केवल अपवाद संदेश नहीं दिखा सकते हैं?

MessageBox.Show(e.Message); 

FindUpcomingGamesByPlatform में अपवाद को पकड़ने मत करो, चलो यह बुला विधि करने के लिए बुलबुला, यह वहाँ पकड़ने और संदेश को दिखाने के ...

+0

कृपया संपादित करें देखें। –

+0

मेरा उत्तर अपडेट किया गया –

+0

धन्यवाद थॉमस, मुझे लगता है कि मैं अपवाद त्रुटि को बबल करने के लिए कह रहा था। :) –

1

the MSDN documentation के अनुसार, केवल गैर प्रोग्रामर अपवाद नहीं है WebException, जिसे उठाया जा सकता है यदि:

बेसएड्रेस और पते के संयोजन द्वारा बनाई गई यूआरआई अवैध है।

-या- जबकि संसाधन डाउनलोड करने में कोई त्रुटि आई।

5

मैं इस कोड का उपयोग करें:

  1. यहाँ मैं भरी हुई घटना

    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
        // download from web async 
        var client = new WebClient(); 
        client.DownloadStringCompleted += client_DownloadStringCompleted; 
        client.DownloadStringAsync(new Uri("http://whateveraurisingis.com")); 
    } 
    
  2. कॉलबैक whithin webclient init

    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
        #region handle download error 
        string download = null; 
        try 
        { 
        download = e.Result; 
        } 
    catch (Exception ex) 
        { 
        MessageBox.Show(AppMessages.CONNECTION_ERROR_TEXT, AppMessages.CONNECTION_ERROR, MessageBoxButton.OK); 
        } 
    
        // check if download was successful 
        if (download == null) 
        { 
        return; 
        } 
        #endregion 
    
        // in my example I parse a xml-documend downloaded above  
        // parse downloaded xml-document 
        var dataDoc = XDocument.Load(new StringReader(download)); 
    
        //... your code 
    } 
    

धन्यवाद।