HttpWebRequest tarkib boyligi xatosi

HttpWebResponse bilan faylni yuklab olayotganda server tomonidan yuborilgan kontent uzunligi noto'g'ri va faylni o'rta yo'lni yuklab olishni to'xtatish uchun HttpWebResponsega sabab bo'ladi. IE siz ko'rib chiqayotganingizda bu muammo yo'q ko'rinadi. HttpWebResponseni qanday yuborilganligi haqida hech qanday fikr, yuborilganni yoqib yubormoqchi yoki hatto mantiqiy bo'ladi. Beriladigan biron bir yordam juda qadrlanadi.

- Misol

class Program
{
    static void Main(string[] args)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:59771/Default.aspx");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Console.WriteLine("Content length: " + response.ContentLength);

        int bytesRead = 0;
        long totalBytesRead = 0;

        byte[] data = new byte[1024 * 64];
        StringBuilder output = new StringBuilder();

        Stream responseStream = response.GetResponseStream();

        do
        {
            bytesRead = responseStream.Read(data, 0, 1024 * 64);
            totalBytesRead += bytesRead;

            output.Append(Encoding.ASCII.GetString(data, 0, bytesRead));
        }
        while (bytesRead > 0);

        Console.WriteLine("total read: " + totalBytesRead);
        Console.WriteLine("last content read: " + output.ToString());
    }

    protected void Page_Load(object sender, EventArgs e)
    {
       Response.Clear();
       Response.ClearHeaders();
       Response.AddHeader("Content-Length", "13");
       Response.Write("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    }
}

Muammo hal qilindi!

Ma'lumotni pastga tushiradigan server Cognos serveri bo'lib, u siqilgan siqilgan siqilgan kontent uzunligini hisoblab chiqdi, lekin biz kodni siqishni qabul qila olishimiz uchun yubormadik, shuning uchun uni siqilmagan faqat siqishni uzunligiga bog'liq. IE bu muammoni siqishni qabul qila olishi mumkinligi bilan izohlamadi. Muammolarni hal qilish uchun kod:

request2.Headers.Add("Accept-Encoding", "gzip,deflate");
3
Siz o'zingizni ko'rish uchun tashrif buyuradigan URL manzilingiz bormi? Kodni biz bilan bo'lishish uchun ehtiyot bo'ling?
qo'shib qo'ydi muallif Jon Skeet, manba

2 javoblar

Muammo hal qilindi!

Ma'lumotni pastga tushiradigan server Cognos serveri bo'lib, u siqilgan siqilgan siqilgan kontent uzunligini hisoblab chiqdi, lekin biz kodni siqishni qabul qila olishimiz uchun yubormadik, shuning uchun uni siqilmagan faqat siqishni uzunligiga bog'liq. IE bu muammoni siqishni qabul qila olishi mumkinligi bilan izohlamadi. Muammolarni hal qilish uchun kod:

 request2.Headers.Add("Accept-Encoding", "gzip,deflate"); 
3
qo'shib qo'ydi

HttpWebRequest serverdan yuborilgan ma'lumotlarga aloqador emas, faqat siz yuborgan ma'lumotlar bilan, shuning uchun siz HttpWebResponseni nazarda tutasiz.

HttpWebResponse, server tomonidan yuborilgan Content-Length haqida umuman qiziqtirmaydi, faqat ma'lumotni olish uchun mijozga Headerlar mulkida beradi.

Javoblar oqimidan o'qiyotganda serverning kontent uzunligiga tayanmasligingiz kerak, faqat Stream.Read metodi 0 ga qaytgunicha o'qishni davom ettiring.

0
qo'shib qo'ydi
Connection: Keep Alive Stream.Read Connection: Keep Alive bo'lmaguncha server 0 marta qaytgunicha qaytmaydi deb o'ylamayman.
qo'shib qo'ydi muallif L.B, manba