2012-10-18 5 views
5

su Windows Phone, posso ottenere WebException con StatusCode == HttpStatusCode.NotFound seCome distinguere NotFound restituito dal server e da NotFound a causa della cattiva connettività?

  1. server ha restituito 404
  2. Server non può essere trovato a causa del cattivo connettività.

Su Windows Phone WebException lo stato è WebExceptionStatus.UnknownError per entrambi i casi.

Come è possibile distinguere il caso 1 dal caso 2?

Quello che osservo è quando la connettività è male (server non trovato) ResponseUri è nullo e le intestazioni WebResponse contengono 0 elementi.

EDIT
ResponseUri non è nullo, ma ha il suo OriginalString vuoto

E 'sicuro per fare questo:

catch (WebException ex) 
{ 
    switch (ex.Response.StatusCode) 
    { 
     ... 
     case HttpStatusCode.NotFound: 
      if (ex.Response.ResponseUri == null 
       || string.IsNullOrEmpty(httpWebResponse.ResponseUri.OriginalString)) 
       DoServerNotFound(); 
      else 
       DoServerReturned404(); 
+0

Sembra il modo. Inoltre, è possibile controllarlo utilizzando http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getisnetworkavailable.aspx –

+1

Non è sicuro al 100% controllare GetIsNetworkAvailable in condizioni di rete non valide. Quando la richiesta di rete non è riuscita, la rete potrebbe mancare, quando gestisco WebException, la rete potrebbe essere già attiva –

+0

Inoltre, è necessario verificare che GetIsNetworkAvailable sia true prima di eseguire una richiesta Web :) –

risposta

0

Perché non utilizzare NetworkInterface.GetIsNetworkAvailable() per vedere se c'è un connessione di rete attiva prima di effettuare la chiamata web. Altrimenti, finisci per aspettare nulla e sprecare una chiamata. Se c'è una connessione e la chiamata fallisce ancora, sai che si tratta di un problema con il servizio web.

Lo uso nelle mie app, se non c'è connettività, non mi preoccupo di effettuare una chiamata.

Grazie
Max

+0

Si prega di vedere i miei commenti sopra. Controlliamo anche questo, ma la connessione potrebbe cadere da qualche parte nel mezzo –

0

Se sei stato 'Non trovi' eccezione coz di richiesta Letto Ciò volontà lo aiuta.

catch (WebException ex) 
     {      
     using (WebResponse webResponse = ex.Response) 
       { 
       HttpWebResponse httpResponse = (HttpWebResponse)webResponse; 
       using (Stream data = webResponse.GetResponseStream()) 
       using (var reader = new StreamReader(data)) 
        { 
         string string = reader.ReadToEnd(); 

         } 
       } 
      }