2011-09-02 13 views
5

Ayuda por favor. Después de enviar la consulta posterior, tengo webexception "Error al obtener la secuencia de respuesta (ReadDone2): Error de recepción". ayudar a deshacerse de este error Gracias.Error al obtener la secuencia de respuesta (ReadDone2): Recibir falla

pieza de código

try 
{ 
string queryContent = string.Format("login={0}&password={1}&mobileDeviceType={2}/", 
login, sessionPassword, deviceType); 
request = ConnectionHelper.GetHttpWebRequest(loginPageAddress, queryContent); 

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())//after this line //occurs exception - "Error getting response stream (ReadDone2): Receive Failure" 
{ 

ConnectionHelper.ParseSessionsIdFromCookie(response); 

string location = response.Headers["Location"]; 
if (!string.IsNullOrEmpty(location)) 
{ 
string responseUri = Utils.GetUriWithoutQuery(response.ResponseUri.ToString()); 
string locationUri = Utils.CombineUri(responseUri, location); 
result = this.DownloadXml(locationUri); 
} 
response.Close(); 
} 
} 
catch (Exception e) 
{ 
errorCout++; 
errorText = e.Message; 
} 

// Methot GetHttpWebRequest

public static HttpWebRequest GetHttpWebRequest(string uri, string queryContent) 
    { 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);    
     request.Proxy = new WebProxy(uri); 
     request.UserAgent = Consts.userAgent; 
     request.AutomaticDecompression = DecompressionMethods.GZip; 
     request.AllowWriteStreamBuffering = true; 
     request.AllowAutoRedirect = false; 

     string sessionsId = GetSessionsIdForCookie(uri); 
     if (!string.IsNullOrEmpty(sessionsId)) 
      request.Headers.Add(Consts.headerCookieName, sessionsId); 

     if (queryContent != string.Empty) 
     { 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.Method = "POST"; 
      byte[] SomeBytes = Encoding.UTF8.GetBytes(queryContent); 
      request.ContentLength = SomeBytes.Length; 
      using (Stream newStream = request.GetRequestStream()) 
      { 
       newStream.Write(SomeBytes, 0, SomeBytes.Length); 
      } 
     } 
     else 
     { 
      request.Method = "GET"; 
     } 

     return request; 
    } 
+0

Se puede publicar el código para la clase ConnectionHelper (o tal vez sólo el método GetHttpWebRequest)? – clarkb86

Respuesta

0
using (Stream newStream = request.GetRequestStream()) 
{ 
    newStream.Write(SomeBytes, 0, SomeBytes.Length); 

    //try to add 
    newStream.Close(); 
} 
+1

¿Es necesario llamar explícitamente a la función Close() cuando se usa la palabra clave 'using'? Pensé que la transmisión se eliminó/cerró automáticamente cuando salió del alcance de la declaración 'using'. –

+0

También creo que sí, pero en la práctica sin .Close() no enviará la solicitud. – mironych

0

En mi caso, el servidor no envió a un cuerpo de la respuesta. Después de arreglar el servidor, desapareció el "Receive Failure".

lo que tiene dos opciones:

  1. no solicita una secuencia de respuesta, si se puede vivir sin él.

  2. Asegúrese de que el servidor envíe un cuerpo de respuesta.

    por ejemplo, en lugar de

    self.send_response(200) 
    self.wfile.close() 
    

    el código del servidor Python debe ser

    self.send_response(200) 
    self.send_header('Content-type', 'text/plain') 
    self.end_headers() 
    self.wfile.write("Thanks!\n") 
    self.wfile.close() 
    
Cuestiones relacionadas