Ошибка при получении потока ответов (ReadDone2): ошибка получения

Помоги мне, пожалуйста. После отправки почтового запроса у меня есть веб-исключение «Ошибка получения потока ответа (ReadDone2): Ошибка получения». помогите избавиться от этой ошибки. Спасибо.

кусок кода

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;
}

//Метод 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;
    }

person Alexadnr    schedule 02.09.2011    source источник
comment
Можете ли вы опубликовать код класса ConnectionHelper (или, может быть, просто метода GetHttpWebRequest)?   -  person clarkb86    schedule 03.09.2011


Ответы (3)


В моем случае сервер не отправил тело ответа. После исправления сервера «Ошибка получения» исчезла.

Итак, у вас есть два варианта:

  1. Не запрашивайте поток ответов, если вы можете жить без него.

  2. Убедитесь, что сервер отправляет тело ответа.

    Например, вместо

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

    код сервера Python должен быть

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

это не ошибка Xamarin или .NET. :подмигивание:

ваша конечная точка на стороне сервера не работает при запросе. :neutral:

проверьте конечную точку API, если вы являетесь владельцем API, или обратитесь в службу поддержки, если вы получаете API от сторонней компании или службы.

почему это происходит случайно : :wink: потому что ошибка находится во внутренних блоках цикла if или, и это происходит, когда она проходит через этот цикл с ошибками или если.

с уважением. :улыбка:

person Keyvan Arasteh    schedule 22.09.2018

person    schedule
comment
Нужно ли явно вызывать функцию Close() при использовании ключевого слова «using»? Я думал, что поток автоматически удаляется/закрывается, когда он выходит за рамки оператора «использование». - person Adam Jones; 11.01.2012
comment
Я тоже так думаю, но на практике без .Close() он не отправит запрос. - person mironych; 11.01.2012