13 de diciembre de 2010

C#, Manejo de WebException. Error en el servidor remoto: (500) Error interno del servidor.

Recientemente, mientras hacia una petición POST (.Net C#) a una URL determinada, me estaba encontrando con el siguiente error:

WebException, ProtocolError

ex.Message: Error en el servidor remoto: (500) Error interno del servidor.

Error 500

Este es un error genérico que aporta casi nada de información y que por consiguiente poco puedo obtener para solucionar el problema.

Solución Manejo WebException

Para obtener más información de este tipo de error, puedes hacer lo siguiente:

private string Test(HttpWebRequest request)
{
  string responseText = string.Empty;
  try
  {
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
      //...
    }
  }
  catch (WebException wex)
  {
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("ERROR:" + wex.Message + ". STATUS: " + wex.Status.ToString());
 
    if (wex.Status == WebExceptionStatus.ProtocolError)
    {
      var response = ((HttpWebResponse)wex.Response);
      sb.AppendLine(string.Format("Status Code : {0}", response.StatusCode));
      sb.AppendLine(string.Format("Status Description : {0}", response.StatusDescription));
 
      try
      {
       StreamReader reader = new StreamReader(response.GetResponseStream());
        sb.AppendLine(reader.ReadToEnd());
      }
      catch (WebException ex) { throw; }
    }
 
    throw new Exception(sb.ToString(), wex);
  }
  catch (Exception ex) { throw; }
 
  return responseText;
}

Y de esta forma podrás leer la información relacionada al error.