2015-07-13 2 views
1

Я ПОСТАВИЛ XML-данные с помощью WebClient.C# - Catch WebException при отправке XML Async

public string uploadXMLData(string destinationUrl, string requestXml) 
     { 
      try 
      { 

       System.Uri uri = new System.Uri(destinationUrl); 
       using (WebClient client = new WebClient()) 
       { 
        client.Headers.Add("content-type", "text/xml"); 
        var response = client.UploadString(destinationUrl, "POST", requestXml); 
       } 
      } 

      catch (WebException webex) 
      { 

       WebResponse errResp = webex.Response; 
       using (Stream respStream = errResp.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(respStream); 
        string text = reader.ReadToEnd(); 
       } 
      } 
      catch (Exception e) 
      { } 

      return null; 
     } 

Когда есть ошибка, я ловлю его как WebException, и я прочитал поток для того, чтобы знать, что ответ XML является.

Что мне нужно сделать, это отправить XML-данные в URL-адрес в Async. Поэтому я изменил функцию:

public string uploadXMLData(string destinationUrl, string requestXml) 
{ 
    try 
    { 

     System.Uri uri = new System.Uri(destinationUrl); 
     using (WebClient client = new WebClient()) 
     { 

      client.UploadStringCompleted 
     += new UploadStringCompletedEventHandler(UploadStringCallback2); 
      client.UploadStringAsync(uri, requestXml); 
     } 
    } 

    catch (Exception e) 
    { } 

    return null; 
} 


void UploadStringCallback2(object sender, UploadStringCompletedEventArgs e) 
{    
    Console.WriteLine(e.Error); 
} 

Как я могу поймать WebException сейчас и прочитать ответ XML?

Можно ли выбросить e.Error?

Любая помощь будет оценена

+0

видеть эту ссылку ... он дает подробную информацию о том, как обрабатывать исключения с реализацией aync. http://stackoverflow.com/questions/5383310/catch-an-exception-thrown-by-an-async-method – Prashant

+0

@Prashant Спасибо. Я хочу, чтобы он работал с UploadStringAsync ... – HelpASisterOut

ответ

1

Я нашел решение:

void UploadStringCallback2(object sender, UploadStringCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      object objException = e.Error.GetBaseException(); 

      Type _type = typeof(WebException); 
      if (_type != null) 
      { 
       WebException objErr = (WebException)e.Error.GetBaseException(); 
       WebResponse rsp = objErr.Response; 
       using (Stream respStream = rsp.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(respStream); 
        string text = reader.ReadToEnd(); 
       } 
       throw objErr; 
      } 
      else 
      { 
       Exception objErr = (Exception)e.Error.GetBaseException(); 
       throw objErr; 
      } 
     } 

    } 
+0

Вы должны принять свой собственный ответ, поэтому вопрос отмечен как ответ. Это также сигнализирует другим, что это действительно правильное решение проблемы. – nestedloop