2012-09-20 15 views
5

Il pezzo di sotto del codice sta dando messaggio di errore: "L'operazione è scaduta" Errore Sourse: a System.Net.httpWebRequest.GetResponse()System.Net.WebRequest - Timeout errore

Questo metodo sta chiamando un URL e sta recuperando l'oggetto risposta.

NOTA: Questo è tutto bene a lavorare nel mio end..but quando i inviare lo stesso codice per production..it mostra tempo oout errori

public GetUpdatedInventoryUnitValues(Vehicle aeVehicle) 
{ 
      WebRequest oWebRequest = null; 
      StringBuilder oStringBuilder = null; 
      StreamReader oStreamReader = null; 
      dcDealerDetails = new Dictionary<string, string>(); 

      MSRP = string.Empty; 
      NetPrice = string.Empty; 
      string strLine = string.Empty; 
      string strURL = GetUpdatedInventoryUnitValues.GetFormattedURL(aeVehicle); 

      try 
      { 
       /* Open the requested URL */ 
       oWebRequest = WebRequest.Create(strURL); 
       oWebRequest.Method = "GET"; 
       oWebRequest.ContentType = "application/xml"; 
       /* Get the stream from the returned web response */ 
       oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream()); 
       /* Get the stream from the returned web response */ 
       oStringBuilder = new StringBuilder(); 
       /* Read the stream a line at a time and place each one into the stringbuilder */ 
       while ((strLine = oStreamReader.ReadLine()) != null) 
       { 
        /* Ignore blank lines */ 
        if (strLine.Length > 0) 
         oStringBuilder.Append(strLine); 
       } 

       string[] tempArray = null; 
       string[] tempNextArray = null; 
       //Split string by semicolon as a separater 
       tempArray = Data.SplitString(oStringBuilder.ToString(), new char[] { ';' }); 

       if (tempArray != null) 
       { 
        foreach (string invUnits in tempArray) 
        { 
         //Split string by '=' as a separater 
         tempNextArray = Data.SplitString(invUnits, new char[] { '=' }); 

         if (tempNextArray != null && tempNextArray.Length == 2) 
         { 
          switch (tempNextArray[0].ToLower()) 
          { 
           //case "msrp": 
           // MSRP = Data.RemoveDoubleCode(tempNextArray[1]); 
           // break; 
           case "netprice": 
            NetPrice = Data.RemoveDoubleCode(tempNextArray[1]); 
            break; 
          } 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       ErrorLog.ErrorMessage = ErrorLog.Separator; 
       ErrorLog.ErrorMessage = "Exception during posting data to another application ."; 
       ErrorLog.ErrorMessage = "ERROR MESSAGE : " + ex.Message; 
       ErrorLog.ErrorMessage = "ERROR SOURCE: " + ex.StackTrace.ToString(); 

      } 
      finally 
      { 
       if (oStreamReader != null) 
       { 
        oStreamReader.Close(); 
       } 
       if (oWebRequest != null) 
       { 
        oWebRequest = null; 
       } 
      } 
     } 

Si prega di suggerire Che cosa sto facendo di sbagliato o manca?

+0

Sei sicuro alla richiesta non è buona e non TimeOut fuori il codice? Voglio dire, hai provato a lanciarlo direttamente nel tuo browser? –

+0

Tutto sta funzionando bene nella mia fine..ma quando invio lo stesso codice alla produzione..it mostra il tempo degli errori –

+0

Quali sono le differenze tra la tua piattaforma di sviluppo e la tua piattaforma di produzione? C'è un firewall o qualcosa del genere che potrebbe fermare la tua richiesta? –

risposta

17

Stai forse scoprendo che il primo paio di richieste sono a posto e quindi iniziano a scadere? Se è così, ho il sospetto che questo sia il problema:

oStreamReader = new StreamReader(oWebRequest.GetResponse().GetResponseStream()); 

Stai recuperando la risposta, ma senza mai eliminarla. Si dovrebbe usare:

using (var response = oWebRequest.GetResponse()) 
{ 
    ... 
} 

In realtà, si può sbarazzarsi del vostro finally blocco del tutto se si utilizza using dichiarazioni in tutto.

Per inciso, questo è un metodo piuttosto lungo - 77 linee! - e peggio, sembra che in realtà è un costruttore:

  • cerca di dividere fuori in piccoli e più facilmente comprensibili, più facilmente pezzi testabili
  • Cercate di evitare di fare un sacco di lavoro nei costruttori
+0

.. Funziona bene con le mie 250 chiamate in loop..ma in produzione è quasi tutto timeouts..Sulla parte in codice..se dovrei farlo .. –

+0

@RatanSharma: quale URL stai recuperando dalla produzione? È possibile che stia davvero scadendo? –

+0

La funzione di cui sopra è dallo strumento .. che è in esecuzione nel sito di produzione ... la funzione sta chiamando un URL che sta dando una risposta ... Questo funziona bene quando eseguo lo strumento nel mio sistema, ma nel server di produzione quando sto correndo lo stesso è timming out .. –

1

io personalmente utilizzare questo codice per uno del mio programma e funziona perfetto:

WebRequest webRequest = WebRequest.Create(requestUri); 
    webRequest.Credentials = new NetworkCredential(login, password); 
    WebResponse webResponse = webRequest.GetResponse(); 
    Stream response = webResponse.GetResponseStream(); 
    StreamReader reader = new StreamReader(response); 

Quindi penso che non proviene dal codice, ma dalla tua piattaforma di produzione.

+4

Se non stai eliminando le risposte, allora non funziona perfettamente - stai solo diventando fortunato. –

+0

Utilizzando il codice postato dopo la fine dell'utilizzo, viene eliminata la risposta? –

+1

Sì. Dovresti usare le istruzioni 'using' per praticamente tutto ciò che implementa' IDisposable', per garantire la pulizia. –

2

Basta condividere l'esperienza.

Stavo ricevendo lo stesso errore "Operazione scaduta".

Ho provato a utilizzare sia WebClient che WebRequest (imposta anche Timeout) ma ho ancora ricevuto un errore.

La ragione era che non ero disposto a rispondere.

così ho usato come detto sopra:

using (var response = oWebRequest.GetResponse()) 

{ 
    ... 
} 

Ed è risolto il problema ...

Problemi correlati